This is an automated email from the ASF dual-hosted git repository.

singhpk234 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/polaris.git


The following commit(s) were added to refs/heads/main by this push:
     new b8d210a0a Add Events for Policy Service APIs (#2479)
b8d210a0a is described below

commit b8d210a0a6b6322f32ccf33e1eb9851a7e3f94c0
Author: Adnan Hemani <adna...@berkeley.edu>
AuthorDate: Fri Sep 5 15:47:05 2025 -0700

    Add Events for Policy Service APIs (#2479)
---
 .../policy/CatalogPolicyEventServiceDelegator.java | 124 +++++++++++++++++----
 .../service/events/CatalogPolicyServiceEvents.java | 101 +++++++++++++++++
 .../events/listeners/PolarisEventListener.java     |  52 +++++++++
 3 files changed, 255 insertions(+), 22 deletions(-)

diff --git 
a/runtime/service/src/main/java/org/apache/polaris/service/catalog/policy/CatalogPolicyEventServiceDelegator.java
 
b/runtime/service/src/main/java/org/apache/polaris/service/catalog/policy/CatalogPolicyEventServiceDelegator.java
index 959de17ba..2bf671db2 100644
--- 
a/runtime/service/src/main/java/org/apache/polaris/service/catalog/policy/CatalogPolicyEventServiceDelegator.java
+++ 
b/runtime/service/src/main/java/org/apache/polaris/service/catalog/policy/CatalogPolicyEventServiceDelegator.java
@@ -26,11 +26,16 @@ import jakarta.inject.Inject;
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.core.SecurityContext;
 import org.apache.polaris.core.context.RealmContext;
+import org.apache.polaris.service.catalog.CatalogPrefixParser;
 import org.apache.polaris.service.catalog.api.PolarisCatalogPolicyApiService;
 import org.apache.polaris.service.catalog.common.CatalogAdapter;
+import org.apache.polaris.service.events.CatalogPolicyServiceEvents;
+import org.apache.polaris.service.events.listeners.PolarisEventListener;
 import org.apache.polaris.service.types.AttachPolicyRequest;
 import org.apache.polaris.service.types.CreatePolicyRequest;
 import org.apache.polaris.service.types.DetachPolicyRequest;
+import org.apache.polaris.service.types.GetApplicablePoliciesResponse;
+import org.apache.polaris.service.types.LoadPolicyResponse;
 import org.apache.polaris.service.types.UpdatePolicyRequest;
 
 @Decorator
@@ -39,6 +44,8 @@ public class CatalogPolicyEventServiceDelegator
     implements PolarisCatalogPolicyApiService, CatalogAdapter {
 
   @Inject @Delegate PolicyCatalogAdapter delegate;
+  @Inject PolarisEventListener polarisEventListener;
+  @Inject CatalogPrefixParser prefixParser;
 
   @Override
   public Response createPolicy(
@@ -47,8 +54,17 @@ public class CatalogPolicyEventServiceDelegator
       CreatePolicyRequest createPolicyRequest,
       RealmContext realmContext,
       SecurityContext securityContext) {
-    return delegate.createPolicy(
-        prefix, namespace, createPolicyRequest, realmContext, securityContext);
+    String catalogName = prefixParser.prefixToCatalogName(realmContext, 
prefix);
+    polarisEventListener.onBeforeCreatePolicy(
+        new CatalogPolicyServiceEvents.BeforeCreatePolicyEvent(
+            catalogName, namespace, createPolicyRequest));
+    Response resp =
+        delegate.createPolicy(
+            prefix, namespace, createPolicyRequest, realmContext, 
securityContext);
+    polarisEventListener.onAfterCreatePolicy(
+        new CatalogPolicyServiceEvents.AfterCreatePolicyEvent(
+            catalogName, namespace, (LoadPolicyResponse) resp.getEntity()));
+    return resp;
   }
 
   @Override
@@ -60,8 +76,15 @@ public class CatalogPolicyEventServiceDelegator
       String policyType,
       RealmContext realmContext,
       SecurityContext securityContext) {
-    return delegate.listPolicies(
-        prefix, namespace, pageToken, pageSize, policyType, realmContext, 
securityContext);
+    String catalogName = prefixParser.prefixToCatalogName(realmContext, 
prefix);
+    polarisEventListener.onBeforeListPolicies(
+        new CatalogPolicyServiceEvents.BeforeListPoliciesEvent(catalogName, 
namespace, policyType));
+    Response resp =
+        delegate.listPolicies(
+            prefix, namespace, pageToken, pageSize, policyType, realmContext, 
securityContext);
+    polarisEventListener.onAfterListPolicies(
+        new CatalogPolicyServiceEvents.AfterListPoliciesEvent(catalogName, 
namespace, policyType));
+    return resp;
   }
 
   @Override
@@ -71,7 +94,15 @@ public class CatalogPolicyEventServiceDelegator
       String policyName,
       RealmContext realmContext,
       SecurityContext securityContext) {
-    return delegate.loadPolicy(prefix, namespace, policyName, realmContext, 
securityContext);
+    String catalogName = prefixParser.prefixToCatalogName(realmContext, 
prefix);
+    polarisEventListener.onBeforeLoadPolicy(
+        new CatalogPolicyServiceEvents.BeforeLoadPolicyEvent(catalogName, 
namespace, policyName));
+    Response resp =
+        delegate.loadPolicy(prefix, namespace, policyName, realmContext, 
securityContext);
+    polarisEventListener.onAfterLoadPolicy(
+        new CatalogPolicyServiceEvents.AfterLoadPolicyEvent(
+            catalogName, namespace, (LoadPolicyResponse) resp.getEntity()));
+    return resp;
   }
 
   @Override
@@ -82,8 +113,17 @@ public class CatalogPolicyEventServiceDelegator
       UpdatePolicyRequest updatePolicyRequest,
       RealmContext realmContext,
       SecurityContext securityContext) {
-    return delegate.updatePolicy(
-        prefix, namespace, policyName, updatePolicyRequest, realmContext, 
securityContext);
+    String catalogName = prefixParser.prefixToCatalogName(realmContext, 
prefix);
+    polarisEventListener.onBeforeUpdatePolicy(
+        new CatalogPolicyServiceEvents.BeforeUpdatePolicyEvent(
+            catalogName, namespace, policyName, updatePolicyRequest));
+    Response resp =
+        delegate.updatePolicy(
+            prefix, namespace, policyName, updatePolicyRequest, realmContext, 
securityContext);
+    polarisEventListener.onAfterUpdatePolicy(
+        new CatalogPolicyServiceEvents.AfterUpdatePolicyEvent(
+            catalogName, namespace, (LoadPolicyResponse) resp.getEntity()));
+    return resp;
   }
 
   @Override
@@ -94,8 +134,17 @@ public class CatalogPolicyEventServiceDelegator
       Boolean detachAll,
       RealmContext realmContext,
       SecurityContext securityContext) {
-    return delegate.dropPolicy(
-        prefix, namespace, policyName, detachAll, realmContext, 
securityContext);
+    String catalogName = prefixParser.prefixToCatalogName(realmContext, 
prefix);
+    polarisEventListener.onBeforeDropPolicy(
+        new CatalogPolicyServiceEvents.BeforeDropPolicyEvent(
+            catalogName, namespace, policyName, detachAll));
+    Response resp =
+        delegate.dropPolicy(
+            prefix, namespace, policyName, detachAll, realmContext, 
securityContext);
+    polarisEventListener.onAfterDropPolicy(
+        new CatalogPolicyServiceEvents.AfterDropPolicyEvent(
+            catalogName, namespace, policyName, detachAll));
+    return resp;
   }
 
   @Override
@@ -106,8 +155,17 @@ public class CatalogPolicyEventServiceDelegator
       AttachPolicyRequest attachPolicyRequest,
       RealmContext realmContext,
       SecurityContext securityContext) {
-    return delegate.attachPolicy(
-        prefix, namespace, policyName, attachPolicyRequest, realmContext, 
securityContext);
+    String catalogName = prefixParser.prefixToCatalogName(realmContext, 
prefix);
+    polarisEventListener.onBeforeAttachPolicy(
+        new CatalogPolicyServiceEvents.BeforeAttachPolicyEvent(
+            catalogName, namespace, policyName, attachPolicyRequest));
+    Response resp =
+        delegate.attachPolicy(
+            prefix, namespace, policyName, attachPolicyRequest, realmContext, 
securityContext);
+    polarisEventListener.onAfterAttachPolicy(
+        new CatalogPolicyServiceEvents.AfterAttachPolicyEvent(
+            catalogName, namespace, policyName, attachPolicyRequest));
+    return resp;
   }
 
   @Override
@@ -118,8 +176,17 @@ public class CatalogPolicyEventServiceDelegator
       DetachPolicyRequest detachPolicyRequest,
       RealmContext realmContext,
       SecurityContext securityContext) {
-    return delegate.detachPolicy(
-        prefix, namespace, policyName, detachPolicyRequest, realmContext, 
securityContext);
+    String catalogName = prefixParser.prefixToCatalogName(realmContext, 
prefix);
+    polarisEventListener.onBeforeDetachPolicy(
+        new CatalogPolicyServiceEvents.BeforeDetachPolicyEvent(
+            catalogName, namespace, policyName, detachPolicyRequest));
+    Response resp =
+        delegate.detachPolicy(
+            prefix, namespace, policyName, detachPolicyRequest, realmContext, 
securityContext);
+    polarisEventListener.onAfterDetachPolicy(
+        new CatalogPolicyServiceEvents.AfterDetachPolicyEvent(
+            catalogName, namespace, policyName, detachPolicyRequest));
+    return resp;
   }
 
   @Override
@@ -132,14 +199,27 @@ public class CatalogPolicyEventServiceDelegator
       String policyType,
       RealmContext realmContext,
       SecurityContext securityContext) {
-    return delegate.getApplicablePolicies(
-        prefix,
-        pageToken,
-        pageSize,
-        namespace,
-        targetName,
-        policyType,
-        realmContext,
-        securityContext);
+    String catalogName = prefixParser.prefixToCatalogName(realmContext, 
prefix);
+    polarisEventListener.onBeforeGetApplicablePolicies(
+        new CatalogPolicyServiceEvents.BeforeGetApplicablePoliciesEvent(
+            catalogName, namespace, targetName, policyType));
+    Response resp =
+        delegate.getApplicablePolicies(
+            prefix,
+            pageToken,
+            pageSize,
+            namespace,
+            targetName,
+            policyType,
+            realmContext,
+            securityContext);
+    polarisEventListener.onAfterGetApplicablePolicies(
+        new CatalogPolicyServiceEvents.AfterGetApplicablePoliciesEvent(
+            catalogName,
+            namespace,
+            targetName,
+            policyType,
+            (GetApplicablePoliciesResponse) resp.getEntity()));
+    return resp;
   }
 }
diff --git 
a/runtime/service/src/main/java/org/apache/polaris/service/events/CatalogPolicyServiceEvents.java
 
b/runtime/service/src/main/java/org/apache/polaris/service/events/CatalogPolicyServiceEvents.java
new file mode 100644
index 000000000..a550ed10d
--- /dev/null
+++ 
b/runtime/service/src/main/java/org/apache/polaris/service/events/CatalogPolicyServiceEvents.java
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.polaris.service.events;
+
+import org.apache.polaris.service.types.AttachPolicyRequest;
+import org.apache.polaris.service.types.CreatePolicyRequest;
+import org.apache.polaris.service.types.DetachPolicyRequest;
+import org.apache.polaris.service.types.GetApplicablePoliciesResponse;
+import org.apache.polaris.service.types.LoadPolicyResponse;
+import org.apache.polaris.service.types.UpdatePolicyRequest;
+
+/**
+ * Event records for Catalog Policy operations. Each operation has 
corresponding "Before" and
+ * "After" event records.
+ */
+public class CatalogPolicyServiceEvents {
+
+  // Policy CRUD Events
+  public record BeforeCreatePolicyEvent(
+      String catalogName, String namespace, CreatePolicyRequest 
createPolicyRequest) {}
+
+  public record AfterCreatePolicyEvent(
+      String catalogName, String namespace, LoadPolicyResponse 
loadPolicyResponse) {}
+
+  public record BeforeListPoliciesEvent(String catalogName, String namespace, 
String policyType) {}
+
+  public record AfterListPoliciesEvent(String catalogName, String namespace, 
String policyType) {}
+
+  public record BeforeLoadPolicyEvent(String catalogName, String namespace, 
String policyName) {}
+
+  public record AfterLoadPolicyEvent(
+      String catalogName, String namespace, LoadPolicyResponse 
loadPolicyResponse) {}
+
+  public record BeforeUpdatePolicyEvent(
+      String catalogName,
+      String namespace,
+      String policyName,
+      UpdatePolicyRequest updatePolicyRequest) {}
+
+  public record AfterUpdatePolicyEvent(
+      String catalogName, String namespace, LoadPolicyResponse 
loadPolicyResponse) {}
+
+  public record BeforeDropPolicyEvent(
+      String catalogName, String namespace, String policyName, Boolean 
detachAll) {}
+
+  public record AfterDropPolicyEvent(
+      String catalogName, String namespace, String policyName, Boolean 
detachAll) {}
+
+  // Policy Attachment Events
+  public record BeforeAttachPolicyEvent(
+      String catalogName,
+      String namespace,
+      String policyName,
+      AttachPolicyRequest attachPolicyRequest) {}
+
+  public record AfterAttachPolicyEvent(
+      String catalogName,
+      String namespace,
+      String policyName,
+      AttachPolicyRequest attachPolicyRequest) {}
+
+  public record BeforeDetachPolicyEvent(
+      String catalogName,
+      String namespace,
+      String policyName,
+      DetachPolicyRequest detachPolicyRequest) {}
+
+  public record AfterDetachPolicyEvent(
+      String catalogName,
+      String namespace,
+      String policyName,
+      DetachPolicyRequest detachPolicyRequest) {}
+
+  // Policy Query Events
+  public record BeforeGetApplicablePoliciesEvent(
+      String catalogName, String namespace, String targetName, String 
policyType) {}
+
+  public record AfterGetApplicablePoliciesEvent(
+      String catalogName,
+      String namespace,
+      String targetName,
+      String policyType,
+      GetApplicablePoliciesResponse getApplicablePoliciesResponse) {}
+}
diff --git 
a/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/PolarisEventListener.java
 
b/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/PolarisEventListener.java
index 1c72a0904..5e1122d25 100644
--- 
a/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/PolarisEventListener.java
+++ 
b/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/PolarisEventListener.java
@@ -32,6 +32,7 @@ import 
org.apache.polaris.service.events.BeforeTaskAttemptedEvent;
 import org.apache.polaris.service.events.BeforeViewCommitedEvent;
 import org.apache.polaris.service.events.BeforeViewRefreshedEvent;
 import org.apache.polaris.service.events.CatalogGenericTableServiceEvents;
+import org.apache.polaris.service.events.CatalogPolicyServiceEvents;
 
 /**
  * Represents an event listener that can respond to notable moments during 
Polaris's execution.
@@ -78,6 +79,57 @@ public abstract class PolarisEventListener {
   /** {@link AfterCatalogCreatedEvent} */
   public void onAfterCatalogCreated(AfterCatalogCreatedEvent event) {}
 
+  // Catalog Policy Service Events
+  /** {@link CatalogPolicyServiceEvents.BeforeCreatePolicyEvent} */
+  public void 
onBeforeCreatePolicy(CatalogPolicyServiceEvents.BeforeCreatePolicyEvent event) 
{}
+
+  /** {@link CatalogPolicyServiceEvents.AfterCreatePolicyEvent} */
+  public void 
onAfterCreatePolicy(CatalogPolicyServiceEvents.AfterCreatePolicyEvent event) {}
+
+  /** {@link CatalogPolicyServiceEvents.BeforeListPoliciesEvent} */
+  public void 
onBeforeListPolicies(CatalogPolicyServiceEvents.BeforeListPoliciesEvent event) 
{}
+
+  /** {@link CatalogPolicyServiceEvents.AfterListPoliciesEvent} */
+  public void 
onAfterListPolicies(CatalogPolicyServiceEvents.AfterListPoliciesEvent event) {}
+
+  /** {@link CatalogPolicyServiceEvents.BeforeLoadPolicyEvent} */
+  public void 
onBeforeLoadPolicy(CatalogPolicyServiceEvents.BeforeLoadPolicyEvent event) {}
+
+  /** {@link CatalogPolicyServiceEvents.AfterLoadPolicyEvent} */
+  public void 
onAfterLoadPolicy(CatalogPolicyServiceEvents.AfterLoadPolicyEvent event) {}
+
+  /** {@link CatalogPolicyServiceEvents.BeforeUpdatePolicyEvent} */
+  public void 
onBeforeUpdatePolicy(CatalogPolicyServiceEvents.BeforeUpdatePolicyEvent event) 
{}
+
+  /** {@link CatalogPolicyServiceEvents.AfterUpdatePolicyEvent} */
+  public void 
onAfterUpdatePolicy(CatalogPolicyServiceEvents.AfterUpdatePolicyEvent event) {}
+
+  /** {@link CatalogPolicyServiceEvents.BeforeDropPolicyEvent} */
+  public void 
onBeforeDropPolicy(CatalogPolicyServiceEvents.BeforeDropPolicyEvent event) {}
+
+  /** {@link CatalogPolicyServiceEvents.AfterDropPolicyEvent} */
+  public void 
onAfterDropPolicy(CatalogPolicyServiceEvents.AfterDropPolicyEvent event) {}
+
+  /** {@link CatalogPolicyServiceEvents.BeforeAttachPolicyEvent} */
+  public void 
onBeforeAttachPolicy(CatalogPolicyServiceEvents.BeforeAttachPolicyEvent event) 
{}
+
+  /** {@link CatalogPolicyServiceEvents.AfterAttachPolicyEvent} */
+  public void 
onAfterAttachPolicy(CatalogPolicyServiceEvents.AfterAttachPolicyEvent event) {}
+
+  /** {@link CatalogPolicyServiceEvents.BeforeDetachPolicyEvent} */
+  public void 
onBeforeDetachPolicy(CatalogPolicyServiceEvents.BeforeDetachPolicyEvent event) 
{}
+
+  /** {@link CatalogPolicyServiceEvents.AfterDetachPolicyEvent} */
+  public void 
onAfterDetachPolicy(CatalogPolicyServiceEvents.AfterDetachPolicyEvent event) {}
+
+  /** {@link CatalogPolicyServiceEvents.BeforeGetApplicablePoliciesEvent} */
+  public void onBeforeGetApplicablePolicies(
+      CatalogPolicyServiceEvents.BeforeGetApplicablePoliciesEvent event) {}
+
+  /** {@link CatalogPolicyServiceEvents.AfterGetApplicablePoliciesEvent} */
+  public void onAfterGetApplicablePolicies(
+      CatalogPolicyServiceEvents.AfterGetApplicablePoliciesEvent event) {}
+
   /** {@link CatalogGenericTableServiceEvents.BeforeCreateGenericTableEvent} */
   public void onBeforeCreateGenericTable(
       CatalogGenericTableServiceEvents.BeforeCreateGenericTableEvent event) {}

Reply via email to