From 93c197da5ed8a2b8292be3a6cf8eab9ef3659a88 Mon Sep 17 00:00:00 2001 From: adnanhemani Date: Mon, 29 Sep 2025 17:20:06 -0700 Subject: [PATCH] Add events for APIs awaiting API changes --- .../PolarisCatalogsEventServiceDelegator.java | 74 ++++++++++++++++--- ...isPrincipalRolesEventServiceDelegator.java | 9 ++- 2 files changed, 71 insertions(+), 12 deletions(-) diff --git a/runtime/service/src/main/java/org/apache/polaris/service/admin/PolarisCatalogsEventServiceDelegator.java b/runtime/service/src/main/java/org/apache/polaris/service/admin/PolarisCatalogsEventServiceDelegator.java index 1695334ed7..e45bb1950b 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/admin/PolarisCatalogsEventServiceDelegator.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/admin/PolarisCatalogsEventServiceDelegator.java @@ -27,13 +27,20 @@ import jakarta.ws.rs.core.SecurityContext; import org.apache.polaris.core.admin.model.AddGrantRequest; import org.apache.polaris.core.admin.model.Catalog; +import org.apache.polaris.core.admin.model.CatalogGrant; import org.apache.polaris.core.admin.model.CatalogRole; import org.apache.polaris.core.admin.model.CreateCatalogRequest; import org.apache.polaris.core.admin.model.CreateCatalogRoleRequest; +import org.apache.polaris.core.admin.model.GrantResource; +import org.apache.polaris.core.admin.model.NamespaceGrant; +import org.apache.polaris.core.admin.model.PolicyGrant; import org.apache.polaris.core.admin.model.RevokeGrantRequest; +import org.apache.polaris.core.admin.model.TableGrant; import org.apache.polaris.core.admin.model.UpdateCatalogRequest; import org.apache.polaris.core.admin.model.UpdateCatalogRoleRequest; +import org.apache.polaris.core.admin.model.ViewGrant; import org.apache.polaris.core.context.RealmContext; +import org.apache.polaris.core.entity.PolarisPrivilege; import org.apache.polaris.service.admin.api.PolarisCatalogsApiService; import org.apache.polaris.service.events.CatalogsServiceEvents; import org.apache.polaris.service.events.listeners.PolarisEventListener; @@ -48,8 +55,12 @@ public class PolarisCatalogsEventServiceDelegator implements PolarisCatalogsApiS @Override public Response createCatalog( CreateCatalogRequest request, RealmContext realmContext, SecurityContext securityContext) { - // TODO: After changing the API response, we should change this to emit the corresponding event. - return delegate.createCatalog(request, realmContext, securityContext); + polarisEventListener.onBeforeCreateCatalog( + new CatalogsServiceEvents.BeforeCreateCatalogEvent(request.getCatalog().getName())); + Response resp = delegate.createCatalog(request, realmContext, securityContext); + polarisEventListener.onAfterCreateCatalog( + new CatalogsServiceEvents.AfterCreateCatalogEvent((Catalog) resp.getEntity())); + return resp; } @Override @@ -103,8 +114,14 @@ public Response createCatalogRole( CreateCatalogRoleRequest request, RealmContext realmContext, SecurityContext securityContext) { - // TODO: After changing the API response, we should change this to emit the corresponding event. - return delegate.createCatalogRole(catalogName, request, realmContext, securityContext); + polarisEventListener.onBeforeCreateCatalogRole( + new CatalogsServiceEvents.BeforeCreateCatalogRoleEvent( + catalogName, request.getCatalogRole().getName())); + Response resp = delegate.createCatalogRole(catalogName, request, realmContext, securityContext); + polarisEventListener.onAfterCreateCatalogRole( + new CatalogsServiceEvents.AfterCreateCatalogRoleEvent( + catalogName, (CatalogRole) resp.getEntity())); + return resp; } @Override @@ -175,9 +192,20 @@ public Response addGrantToCatalogRole( AddGrantRequest grantRequest, RealmContext realmContext, SecurityContext securityContext) { - // TODO: After changing the API response, we should change this to emit the corresponding event. - return delegate.addGrantToCatalogRole( - catalogName, catalogRoleName, grantRequest, realmContext, securityContext); + polarisEventListener.onBeforeAddGrantToCatalogRole( + new CatalogsServiceEvents.BeforeAddGrantToCatalogRoleEvent( + catalogName, catalogRoleName, grantRequest)); + Response resp = + delegate.addGrantToCatalogRole( + catalogName, catalogRoleName, grantRequest, realmContext, securityContext); + GrantResource grantResource = grantRequest.getGrant(); + polarisEventListener.onAfterAddGrantToCatalogRole( + new CatalogsServiceEvents.AfterAddGrantToCatalogRoleEvent( + catalogName, + catalogRoleName, + getPrivilegeFromGrantResource(grantResource), + grantResource)); + return resp; } @Override @@ -188,9 +216,21 @@ public Response revokeGrantFromCatalogRole( RevokeGrantRequest grantRequest, RealmContext realmContext, SecurityContext securityContext) { - // TODO: After changing the API response, we should change this to emit the corresponding event. - return delegate.revokeGrantFromCatalogRole( - catalogName, catalogRoleName, cascade, grantRequest, realmContext, securityContext); + polarisEventListener.onBeforeRevokeGrantFromCatalogRole( + new CatalogsServiceEvents.BeforeRevokeGrantFromCatalogRoleEvent( + catalogName, catalogRoleName, grantRequest, cascade)); + Response resp = + delegate.revokeGrantFromCatalogRole( + catalogName, catalogRoleName, cascade, grantRequest, realmContext, securityContext); + GrantResource grantResource = grantRequest.getGrant(); + polarisEventListener.onAfterRevokeGrantFromCatalogRole( + new CatalogsServiceEvents.AfterRevokeGrantFromCatalogRoleEvent( + catalogName, + catalogRoleName, + getPrivilegeFromGrantResource(grantResource), + grantResource, + cascade)); + return resp; } @Override @@ -227,4 +267,18 @@ public Response listGrantsForCatalogRole( new CatalogsServiceEvents.AfterListGrantsForCatalogRoleEvent(catalogName, catalogRoleName)); return resp; } + + private PolarisPrivilege getPrivilegeFromGrantResource(GrantResource grantResource) { + return switch (grantResource) { + case ViewGrant viewGrant -> PolarisPrivilege.valueOf(viewGrant.getPrivilege().toString()); + case TableGrant tableGrant -> PolarisPrivilege.valueOf(tableGrant.getPrivilege().toString()); + case NamespaceGrant namespaceGrant -> + PolarisPrivilege.valueOf(namespaceGrant.getPrivilege().toString()); + case CatalogGrant catalogGrant -> + PolarisPrivilege.valueOf(catalogGrant.getPrivilege().toString()); + case PolicyGrant policyGrant -> + PolarisPrivilege.valueOf(policyGrant.getPrivilege().toString()); + default -> null; + }; + } } diff --git a/runtime/service/src/main/java/org/apache/polaris/service/admin/PolarisPrincipalRolesEventServiceDelegator.java b/runtime/service/src/main/java/org/apache/polaris/service/admin/PolarisPrincipalRolesEventServiceDelegator.java index 5691a489c0..7b88e322ab 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/admin/PolarisPrincipalRolesEventServiceDelegator.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/admin/PolarisPrincipalRolesEventServiceDelegator.java @@ -46,8 +46,13 @@ public Response createPrincipalRole( CreatePrincipalRoleRequest request, RealmContext realmContext, SecurityContext securityContext) { - // TODO: After changing the API response, we should change this to emit the corresponding event. - return delegate.createPrincipalRole(request, realmContext, securityContext); + polarisEventListener.onBeforeCreatePrincipalRole( + new PrincipalRolesServiceEvents.BeforeCreatePrincipalRoleEvent(request)); + Response resp = delegate.createPrincipalRole(request, realmContext, securityContext); + polarisEventListener.onAfterCreatePrincipalRole( + new PrincipalRolesServiceEvents.AfterCreatePrincipalRoleEvent( + (PrincipalRole) resp.getEntity())); + return resp; } @Override