From 1c509787d8e2d894e5ddcb73cd7e8857664d10c3 Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Fri, 19 Sep 2025 17:42:37 +0200 Subject: [PATCH 1/2] Fix & enhancements to the Events API hierarchy Summary of changes: - Turned `PolarisEventListener` into an interface to facilitate implementation / mocking - Added missing `implements PolarisEvent` to many event records - Removed unused method overrides - Added missing method overrides to `TestPolarisEventListener` --- .../CatalogGenericTableServiceEvents.java | 27 +- .../events/CatalogPolicyServiceEvents.java | 48 ++- .../events/IcebergRestCatalogEvents.java | 151 ++++--- .../PropertyMapEventListener.java | 2 +- .../listeners/NoOpPolarisEventListener.java | 2 +- .../listeners/PolarisEventListener.java | 309 +++++++------- .../PolarisPersistenceEventListener.java | 37 +- .../listeners/TestPolarisEventListener.java | 396 +++++++++++++++++- 8 files changed, 697 insertions(+), 275 deletions(-) diff --git a/runtime/service/src/main/java/org/apache/polaris/service/events/CatalogGenericTableServiceEvents.java b/runtime/service/src/main/java/org/apache/polaris/service/events/CatalogGenericTableServiceEvents.java index a533e88c76..ec5e37992e 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/events/CatalogGenericTableServiceEvents.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/events/CatalogGenericTableServiceEvents.java @@ -24,24 +24,27 @@ public class CatalogGenericTableServiceEvents { public record BeforeCreateGenericTableEvent( - String catalogName, String namespace, CreateGenericTableRequest request) {} + String catalogName, String namespace, CreateGenericTableRequest request) + implements PolarisEvent {} public record AfterCreateGenericTableEvent( - String catalogName, String namespace, GenericTable table) {} + String catalogName, String namespace, GenericTable table) implements PolarisEvent {} - public record BeforeDropGenericTableEvent( - String catalogName, String namespace, String tableName) {} + public record BeforeDropGenericTableEvent(String catalogName, String namespace, String tableName) + implements PolarisEvent {} - public record AfterDropGenericTableEvent( - String catalogName, String namespace, String tableName) {} + public record AfterDropGenericTableEvent(String catalogName, String namespace, String tableName) + implements PolarisEvent {} - public record BeforeListGenericTablesEvent(String catalogName, String namespace) {} + public record BeforeListGenericTablesEvent(String catalogName, String namespace) + implements PolarisEvent {} - public record AfterListGenericTablesEvent(String catalogName, String namespace) {} + public record AfterListGenericTablesEvent(String catalogName, String namespace) + implements PolarisEvent {} - public record BeforeLoadGenericTableEvent( - String catalogName, String namespace, String tableName) {} + public record BeforeLoadGenericTableEvent(String catalogName, String namespace, String tableName) + implements PolarisEvent {} - public record AfterLoadGenericTableEvent( - String catalogName, String namespace, GenericTable table) {} + public record AfterLoadGenericTableEvent(String catalogName, String namespace, GenericTable table) + implements PolarisEvent {} } 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 index a550ed10d2..fb302ff42b 100644 --- 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 @@ -34,68 +34,84 @@ public class CatalogPolicyServiceEvents { // Policy CRUD Events public record BeforeCreatePolicyEvent( - String catalogName, String namespace, CreatePolicyRequest createPolicyRequest) {} + String catalogName, String namespace, CreatePolicyRequest createPolicyRequest) + implements PolarisEvent {} public record AfterCreatePolicyEvent( - String catalogName, String namespace, LoadPolicyResponse loadPolicyResponse) {} + String catalogName, String namespace, LoadPolicyResponse loadPolicyResponse) + implements PolarisEvent {} - public record BeforeListPoliciesEvent(String catalogName, String namespace, String policyType) {} + public record BeforeListPoliciesEvent(String catalogName, String namespace, String policyType) + implements PolarisEvent {} - public record AfterListPoliciesEvent(String catalogName, String namespace, String policyType) {} + public record AfterListPoliciesEvent(String catalogName, String namespace, String policyType) + implements PolarisEvent {} - public record BeforeLoadPolicyEvent(String catalogName, String namespace, String policyName) {} + public record BeforeLoadPolicyEvent(String catalogName, String namespace, String policyName) + implements PolarisEvent {} public record AfterLoadPolicyEvent( - String catalogName, String namespace, LoadPolicyResponse loadPolicyResponse) {} + String catalogName, String namespace, LoadPolicyResponse loadPolicyResponse) + implements PolarisEvent {} public record BeforeUpdatePolicyEvent( String catalogName, String namespace, String policyName, - UpdatePolicyRequest updatePolicyRequest) {} + UpdatePolicyRequest updatePolicyRequest) + implements PolarisEvent {} public record AfterUpdatePolicyEvent( - String catalogName, String namespace, LoadPolicyResponse loadPolicyResponse) {} + String catalogName, String namespace, LoadPolicyResponse loadPolicyResponse) + implements PolarisEvent {} public record BeforeDropPolicyEvent( - String catalogName, String namespace, String policyName, Boolean detachAll) {} + String catalogName, String namespace, String policyName, Boolean detachAll) + implements PolarisEvent {} public record AfterDropPolicyEvent( - String catalogName, String namespace, String policyName, Boolean detachAll) {} + String catalogName, String namespace, String policyName, Boolean detachAll) + implements PolarisEvent {} // Policy Attachment Events public record BeforeAttachPolicyEvent( String catalogName, String namespace, String policyName, - AttachPolicyRequest attachPolicyRequest) {} + AttachPolicyRequest attachPolicyRequest) + implements PolarisEvent {} public record AfterAttachPolicyEvent( String catalogName, String namespace, String policyName, - AttachPolicyRequest attachPolicyRequest) {} + AttachPolicyRequest attachPolicyRequest) + implements PolarisEvent {} public record BeforeDetachPolicyEvent( String catalogName, String namespace, String policyName, - DetachPolicyRequest detachPolicyRequest) {} + DetachPolicyRequest detachPolicyRequest) + implements PolarisEvent {} public record AfterDetachPolicyEvent( String catalogName, String namespace, String policyName, - DetachPolicyRequest detachPolicyRequest) {} + DetachPolicyRequest detachPolicyRequest) + implements PolarisEvent {} // Policy Query Events public record BeforeGetApplicablePoliciesEvent( - String catalogName, String namespace, String targetName, String policyType) {} + String catalogName, String namespace, String targetName, String policyType) + implements PolarisEvent {} public record AfterGetApplicablePoliciesEvent( String catalogName, String namespace, String targetName, String policyType, - GetApplicablePoliciesResponse getApplicablePoliciesResponse) {} + GetApplicablePoliciesResponse getApplicablePoliciesResponse) + implements PolarisEvent {} } diff --git a/runtime/service/src/main/java/org/apache/polaris/service/events/IcebergRestCatalogEvents.java b/runtime/service/src/main/java/org/apache/polaris/service/events/IcebergRestCatalogEvents.java index 76d3cf2989..607ff43e47 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/events/IcebergRestCatalogEvents.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/events/IcebergRestCatalogEvents.java @@ -47,54 +47,69 @@ public class IcebergRestCatalogEvents { // Namespace Events public record BeforeCreateNamespaceEvent( - String catalogName, CreateNamespaceRequest createNamespaceRequest) {} + String catalogName, CreateNamespaceRequest createNamespaceRequest) implements PolarisEvent {} public record AfterCreateNamespaceEvent( - String catalogName, Namespace namespace, Map namespaceProperties) {} + String catalogName, Namespace namespace, Map namespaceProperties) + implements PolarisEvent {} - public record BeforeListNamespacesEvent(String catalogName, String parent) {} + public record BeforeListNamespacesEvent(String catalogName, String parent) + implements PolarisEvent {} - public record AfterListNamespacesEvent(String catalogName, String parent) {} + public record AfterListNamespacesEvent(String catalogName, String parent) + implements PolarisEvent {} - public record BeforeLoadNamespaceMetadataEvent(String catalogName, Namespace namespace) {} + public record BeforeLoadNamespaceMetadataEvent(String catalogName, Namespace namespace) + implements PolarisEvent {} public record AfterLoadNamespaceMetadataEvent( - String catalogName, Namespace namespace, Map namespaceProperties) {} + String catalogName, Namespace namespace, Map namespaceProperties) + implements PolarisEvent {} - public record BeforeCheckExistsNamespaceEvent(String catalogName, Namespace namespace) {} + public record BeforeCheckExistsNamespaceEvent(String catalogName, Namespace namespace) + implements PolarisEvent {} - public record AfterCheckExistsNamespaceEvent(String catalogName, Namespace namespace) {} + public record AfterCheckExistsNamespaceEvent(String catalogName, Namespace namespace) + implements PolarisEvent {} - public record BeforeDropNamespaceEvent(String catalogName, Namespace namespace) {} + public record BeforeDropNamespaceEvent(String catalogName, Namespace namespace) + implements PolarisEvent {} - public record AfterDropNamespaceEvent(String catalogName, String namespace) {} + public record AfterDropNamespaceEvent(String catalogName, String namespace) + implements PolarisEvent {} public record BeforeUpdateNamespacePropertiesEvent( String catalogName, Namespace namespace, - UpdateNamespacePropertiesRequest updateNamespacePropertiesRequest) {} + UpdateNamespacePropertiesRequest updateNamespacePropertiesRequest) + implements PolarisEvent {} public record AfterUpdateNamespacePropertiesEvent( String catalogName, Namespace namespace, - UpdateNamespacePropertiesResponse updateNamespacePropertiesResponse) {} + UpdateNamespacePropertiesResponse updateNamespacePropertiesResponse) + implements PolarisEvent {} // Table Events public record BeforeCreateTableEvent( String catalogName, Namespace namespace, CreateTableRequest createTableRequest, - String accessDelegationMode) {} + String accessDelegationMode) + implements PolarisEvent {} public record AfterCreateTableEvent( String catalogName, Namespace namespace, String tableName, - LoadTableResponse loadTableResponse) {} + LoadTableResponse loadTableResponse) + implements PolarisEvent {} - public record BeforeListTablesEvent(String catalogName, Namespace namespace) {} + public record BeforeListTablesEvent(String catalogName, Namespace namespace) + implements PolarisEvent {} - public record AfterListTablesEvent(String catalogName, Namespace namespace) {} + public record AfterListTablesEvent(String catalogName, Namespace namespace) + implements PolarisEvent {} public record BeforeLoadTableEvent( String catalogName, @@ -102,111 +117,139 @@ public record BeforeLoadTableEvent( String table, String accessDelegationMode, String ifNoneMatchString, - String snapshots) {} + String snapshots) + implements PolarisEvent {} public record AfterLoadTableEvent( - String catalogName, Namespace namespace, LoadTableResponse loadTableResponse) {} + String catalogName, Namespace namespace, LoadTableResponse loadTableResponse) + implements PolarisEvent {} - public record BeforeCheckExistsTableEvent( - String catalogName, Namespace namespace, String table) {} + public record BeforeCheckExistsTableEvent(String catalogName, Namespace namespace, String table) + implements PolarisEvent {} - public record AfterCheckExistsTableEvent(String catalogName, Namespace namespace, String table) {} + public record AfterCheckExistsTableEvent(String catalogName, Namespace namespace, String table) + implements PolarisEvent {} public record BeforeDropTableEvent( - String catalogName, Namespace namespace, String table, Boolean purgeRequested) {} + String catalogName, Namespace namespace, String table, Boolean purgeRequested) + implements PolarisEvent {} public record AfterDropTableEvent( - String catalogName, Namespace namespace, String table, Boolean purgeRequested) {} + String catalogName, Namespace namespace, String table, Boolean purgeRequested) + implements PolarisEvent {} public record BeforeRegisterTableEvent( - String catalogName, Namespace namespace, RegisterTableRequest registerTableRequest) {} + String catalogName, Namespace namespace, RegisterTableRequest registerTableRequest) + implements PolarisEvent {} public record AfterRegisterTableEvent( - String catalogName, Namespace namespace, LoadTableResponse loadTableResponse) {} + String catalogName, Namespace namespace, LoadTableResponse loadTableResponse) + implements PolarisEvent {} - public record BeforeRenameTableEvent(String catalogName, RenameTableRequest renameTableRequest) {} + public record BeforeRenameTableEvent(String catalogName, RenameTableRequest renameTableRequest) + implements PolarisEvent {} - public record AfterRenameTableEvent(String catalogName, RenameTableRequest renameTableRequest) {} + public record AfterRenameTableEvent(String catalogName, RenameTableRequest renameTableRequest) + implements PolarisEvent {} public record BeforeUpdateTableEvent( String catalogName, Namespace namespace, String sourceTable, - CommitTableRequest commitTableRequest) {} + CommitTableRequest commitTableRequest) + implements PolarisEvent {} public record AfterUpdateTableEvent( String catalogName, Namespace namespace, String sourceTable, - LoadTableResponse loadTableResponse) {} + LoadTableResponse loadTableResponse) + implements PolarisEvent {} // View Events public record BeforeCreateViewEvent( - String catalogName, Namespace namespace, CreateViewRequest createViewRequest) {} + String catalogName, Namespace namespace, CreateViewRequest createViewRequest) + implements PolarisEvent {} public record AfterCreateViewEvent( - String catalogName, Namespace namespace, LoadViewResponse loadViewResponse) {} + String catalogName, Namespace namespace, LoadViewResponse loadViewResponse) + implements PolarisEvent {} - public record BeforeListViewsEvent(String catalogName, Namespace namespace) {} + public record BeforeListViewsEvent(String catalogName, Namespace namespace) + implements PolarisEvent {} - public record AfterListViewsEvent(String catalogName, Namespace namespace) {} + public record AfterListViewsEvent(String catalogName, Namespace namespace) + implements PolarisEvent {} - public record BeforeLoadViewEvent(String catalogName, Namespace namespace, String view) {} + public record BeforeLoadViewEvent(String catalogName, Namespace namespace, String view) + implements PolarisEvent {} public record AfterLoadViewEvent( - String catalogName, Namespace namespace, LoadViewResponse loadViewResponse) {} + String catalogName, Namespace namespace, LoadViewResponse loadViewResponse) + implements PolarisEvent {} - public record BeforeCheckExistsViewEvent(String catalogName, Namespace namespace, String view) {} + public record BeforeCheckExistsViewEvent(String catalogName, Namespace namespace, String view) + implements PolarisEvent {} - public record AfterCheckExistsViewEvent(String catalogName, Namespace namespace, String view) {} + public record AfterCheckExistsViewEvent(String catalogName, Namespace namespace, String view) + implements PolarisEvent {} - public record BeforeDropViewEvent(String catalogName, Namespace namespace, String view) {} + public record BeforeDropViewEvent(String catalogName, Namespace namespace, String view) + implements PolarisEvent {} - public record AfterDropViewEvent(String catalogName, Namespace namespace, String view) {} + public record AfterDropViewEvent(String catalogName, Namespace namespace, String view) + implements PolarisEvent {} - public record BeforeRenameViewEvent(String catalogName, RenameTableRequest renameTableRequest) {} + public record BeforeRenameViewEvent(String catalogName, RenameTableRequest renameTableRequest) + implements PolarisEvent {} - public record AfterRenameViewEvent(String catalogName, RenameTableRequest renameTableRequest) {} + public record AfterRenameViewEvent(String catalogName, RenameTableRequest renameTableRequest) + implements PolarisEvent {} public record BeforeReplaceViewEvent( String catalogName, Namespace namespace, String sourceView, - CommitViewRequest commitViewRequest) {} + CommitViewRequest commitViewRequest) + implements PolarisEvent {} public record AfterReplaceViewEvent( - String catalogName, - Namespace namespace, - String sourceView, - LoadViewResponse loadViewResponse) {} + String catalogName, Namespace namespace, String sourceView, LoadViewResponse loadViewResponse) + implements PolarisEvent {} // Credential Events - public record BeforeLoadCredentialsEvent(String catalogName, Namespace namespace, String table) {} + public record BeforeLoadCredentialsEvent(String catalogName, Namespace namespace, String table) + implements PolarisEvent {} - public record AfterLoadCredentialsEvent(String catalogName, Namespace namespace, String table) {} + public record AfterLoadCredentialsEvent(String catalogName, Namespace namespace, String table) + implements PolarisEvent {} // Transaction Events public record BeforeCommitTransactionEvent( - String catalogName, CommitTransactionRequest commitTransactionRequest) {} + String catalogName, CommitTransactionRequest commitTransactionRequest) + implements PolarisEvent {} // TODO: Add all PolarisEntities that were modified with this transaction. public record AfterCommitTransactionEvent( - String catalogName, CommitTransactionRequest commitTransactionRequest) {} + String catalogName, CommitTransactionRequest commitTransactionRequest) + implements PolarisEvent {} // Notification Events public record BeforeSendNotificationEvent( String catalogName, Namespace namespace, String table, - NotificationRequest notificationRequest) {} + NotificationRequest notificationRequest) + implements PolarisEvent {} // TODO: Add result once SendNotification API changes are confirmed to return the result. - public record AfterSendNotificationEvent(String catalogName, Namespace namespace, String table) {} + public record AfterSendNotificationEvent(String catalogName, Namespace namespace, String table) + implements PolarisEvent {} // Configuration Events - public record BeforeGetConfigEvent(String warehouse) {} + public record BeforeGetConfigEvent(String warehouse) implements PolarisEvent {} - public record AfterGetConfigEvent(ConfigResponse configResponse) {} + public record AfterGetConfigEvent(ConfigResponse configResponse) implements PolarisEvent {} // Legacy events public record BeforeCommitTableEvent( diff --git a/runtime/service/src/main/java/org/apache/polaris/service/events/jsonEventListener/PropertyMapEventListener.java b/runtime/service/src/main/java/org/apache/polaris/service/events/jsonEventListener/PropertyMapEventListener.java index 3d23129e63..63311fc035 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/events/jsonEventListener/PropertyMapEventListener.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/events/jsonEventListener/PropertyMapEventListener.java @@ -30,7 +30,7 @@ * {{@code @link#transformAndSendEvent(HashMap)}} method to define how the event data should be * transformed into a JSON string, transmitted, and/or stored. */ -public abstract class PropertyMapEventListener extends PolarisEventListener { +public abstract class PropertyMapEventListener implements PolarisEventListener { protected abstract void transformAndSendEvent(HashMap properties); @Override diff --git a/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/NoOpPolarisEventListener.java b/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/NoOpPolarisEventListener.java index c02dfe4811..bfef6e96ec 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/NoOpPolarisEventListener.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/NoOpPolarisEventListener.java @@ -24,4 +24,4 @@ /** Event listener that does nothing. */ @ApplicationScoped @Identifier("no-op") -public class NoOpPolarisEventListener extends PolarisEventListener {} +public class NoOpPolarisEventListener implements PolarisEventListener {} 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 4ad7e642fd..5d38021bc2 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,518 +32,523 @@ * Represents an event listener that can respond to notable moments during Polaris's execution. * Event details are documented under the event objects themselves. */ -public abstract class PolarisEventListener { +public interface PolarisEventListener { /** {@link BeforeLimitRequestRateEvent} */ - public void onBeforeLimitRequestRate(BeforeLimitRequestRateEvent event) {} + default void onBeforeLimitRequestRate(BeforeLimitRequestRateEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeCommitTableEvent} */ - public void onBeforeCommitTable(IcebergRestCatalogEvents.BeforeCommitTableEvent event) {} + default void onBeforeCommitTable(IcebergRestCatalogEvents.BeforeCommitTableEvent event) {} /** {@link IcebergRestCatalogEvents.AfterCommitTableEvent} */ - public void onAfterCommitTable(IcebergRestCatalogEvents.AfterCommitTableEvent event) {} + default void onAfterCommitTable(IcebergRestCatalogEvents.AfterCommitTableEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeCommitViewEvent} */ - public void onBeforeCommitView(IcebergRestCatalogEvents.BeforeCommitViewEvent event) {} + default void onBeforeCommitView(IcebergRestCatalogEvents.BeforeCommitViewEvent event) {} /** {@link IcebergRestCatalogEvents.AfterCommitViewEvent} */ - public void onAfterCommitView(IcebergRestCatalogEvents.AfterCommitViewEvent event) {} + default void onAfterCommitView(IcebergRestCatalogEvents.AfterCommitViewEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeRefreshTableEvent} */ - public void onBeforeRefreshTable(IcebergRestCatalogEvents.BeforeRefreshTableEvent event) {} + default void onBeforeRefreshTable(IcebergRestCatalogEvents.BeforeRefreshTableEvent event) {} /** {@link IcebergRestCatalogEvents.AfterRefreshTableEvent} */ - public void onAfterRefreshTable(IcebergRestCatalogEvents.AfterRefreshTableEvent event) {} + default void onAfterRefreshTable(IcebergRestCatalogEvents.AfterRefreshTableEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeRefreshViewEvent} */ - public void onBeforeRefreshView(IcebergRestCatalogEvents.BeforeRefreshViewEvent event) {} + default void onBeforeRefreshView(IcebergRestCatalogEvents.BeforeRefreshViewEvent event) {} /** {@link IcebergRestCatalogEvents.AfterRefreshViewEvent} */ - public void onAfterRefreshView(IcebergRestCatalogEvents.AfterRefreshViewEvent event) {} + default void onAfterRefreshView(IcebergRestCatalogEvents.AfterRefreshViewEvent event) {} /** {@link BeforeAttemptTaskEvent} */ - public void onBeforeAttemptTask(BeforeAttemptTaskEvent event) {} + default void onBeforeAttemptTask(BeforeAttemptTaskEvent event) {} /** {@link AfterAttemptTaskEvent} */ - public void onAfterAttemptTask(AfterAttemptTaskEvent event) {} + default void onAfterAttemptTask(AfterAttemptTaskEvent event) {} // Iceberg REST Catalog Namespace Events /** {@link IcebergRestCatalogEvents.BeforeCreateNamespaceEvent} */ - public void onBeforeCreateNamespace(IcebergRestCatalogEvents.BeforeCreateNamespaceEvent event) {} + default void onBeforeCreateNamespace(IcebergRestCatalogEvents.BeforeCreateNamespaceEvent event) {} /** {@link IcebergRestCatalogEvents.AfterCreateNamespaceEvent} */ - public void onAfterCreateNamespace(IcebergRestCatalogEvents.AfterCreateNamespaceEvent event) {} + default void onAfterCreateNamespace(IcebergRestCatalogEvents.AfterCreateNamespaceEvent event) {} /** {@link CatalogsServiceEvents.BeforeCreateCatalogEvent} */ - public void onBeforeCreateCatalog(CatalogsServiceEvents.BeforeCreateCatalogEvent event) {} + default void onBeforeCreateCatalog(CatalogsServiceEvents.BeforeCreateCatalogEvent event) {} /** {@link CatalogsServiceEvents.AfterCreateCatalogEvent} */ - public void onAfterCreateCatalog(CatalogsServiceEvents.AfterCreateCatalogEvent event) {} + default void onAfterCreateCatalog(CatalogsServiceEvents.AfterCreateCatalogEvent event) {} /** {@link CatalogsServiceEvents.BeforeDeleteCatalogEvent} */ - public void onBeforeDeleteCatalog(CatalogsServiceEvents.BeforeDeleteCatalogEvent event) {} + default void onBeforeDeleteCatalog(CatalogsServiceEvents.BeforeDeleteCatalogEvent event) {} /** {@link CatalogsServiceEvents.AfterDeleteCatalogEvent} */ - public void onAfterDeleteCatalog(CatalogsServiceEvents.AfterDeleteCatalogEvent event) {} + default void onAfterDeleteCatalog(CatalogsServiceEvents.AfterDeleteCatalogEvent event) {} /** {@link CatalogsServiceEvents.BeforeGetCatalogEvent} */ - public void onBeforeGetCatalog(CatalogsServiceEvents.BeforeGetCatalogEvent event) {} + default void onBeforeGetCatalog(CatalogsServiceEvents.BeforeGetCatalogEvent event) {} /** {@link CatalogsServiceEvents.AfterGetCatalogEvent} */ - public void onAfterGetCatalog(CatalogsServiceEvents.AfterGetCatalogEvent event) {} + default void onAfterGetCatalog(CatalogsServiceEvents.AfterGetCatalogEvent event) {} /** {@link CatalogsServiceEvents.BeforeUpdateCatalogEvent} */ - public void onBeforeUpdateCatalog(CatalogsServiceEvents.BeforeUpdateCatalogEvent event) {} + default void onBeforeUpdateCatalog(CatalogsServiceEvents.BeforeUpdateCatalogEvent event) {} /** {@link CatalogsServiceEvents.AfterUpdateCatalogEvent} */ - public void onAfterUpdateCatalog(CatalogsServiceEvents.AfterUpdateCatalogEvent event) {} + default void onAfterUpdateCatalog(CatalogsServiceEvents.AfterUpdateCatalogEvent event) {} /** {@link CatalogsServiceEvents.BeforeListCatalogEvent} */ - public void onBeforeListCatalog(CatalogsServiceEvents.BeforeListCatalogEvent event) {} + default void onBeforeListCatalog(CatalogsServiceEvents.BeforeListCatalogEvent event) {} /** {@link CatalogsServiceEvents.AfterListCatalogEvent} */ - public void onAfterListCatalog(CatalogsServiceEvents.AfterListCatalogEvent event) {} + default void onAfterListCatalog(CatalogsServiceEvents.AfterListCatalogEvent event) {} /** {@link PrincipalsServiceEvents.BeforeCreatePrincipalEvent} */ - public void onBeforeCreatePrincipal(PrincipalsServiceEvents.BeforeCreatePrincipalEvent event) {} + default void onBeforeCreatePrincipal(PrincipalsServiceEvents.BeforeCreatePrincipalEvent event) {} /** {@link PrincipalsServiceEvents.AfterCreatePrincipalEvent} */ - public void onAfterCreatePrincipal(PrincipalsServiceEvents.AfterCreatePrincipalEvent event) {} + default void onAfterCreatePrincipal(PrincipalsServiceEvents.AfterCreatePrincipalEvent event) {} /** {@link PrincipalsServiceEvents.BeforeDeletePrincipalEvent} */ - public void onBeforeDeletePrincipal(PrincipalsServiceEvents.BeforeDeletePrincipalEvent event) {} + default void onBeforeDeletePrincipal(PrincipalsServiceEvents.BeforeDeletePrincipalEvent event) {} /** {@link PrincipalsServiceEvents.AfterDeletePrincipalEvent} */ - public void onAfterDeletePrincipal(PrincipalsServiceEvents.AfterDeletePrincipalEvent event) {} + default void onAfterDeletePrincipal(PrincipalsServiceEvents.AfterDeletePrincipalEvent event) {} /** {@link PrincipalsServiceEvents.BeforeGetPrincipalEvent} */ - public void onBeforeGetPrincipal(PrincipalsServiceEvents.BeforeGetPrincipalEvent event) {} + default void onBeforeGetPrincipal(PrincipalsServiceEvents.BeforeGetPrincipalEvent event) {} /** {@link PrincipalsServiceEvents.AfterGetPrincipalEvent} */ - public void onAfterGetPrincipal(PrincipalsServiceEvents.AfterGetPrincipalEvent event) {} + default void onAfterGetPrincipal(PrincipalsServiceEvents.AfterGetPrincipalEvent event) {} /** {@link PrincipalsServiceEvents.BeforeUpdatePrincipalEvent} */ - public void onBeforeUpdatePrincipal(PrincipalsServiceEvents.BeforeUpdatePrincipalEvent event) {} + default void onBeforeUpdatePrincipal(PrincipalsServiceEvents.BeforeUpdatePrincipalEvent event) {} /** {@link PrincipalsServiceEvents.AfterUpdatePrincipalEvent} */ - public void onAfterUpdatePrincipal(PrincipalsServiceEvents.AfterUpdatePrincipalEvent event) {} + default void onAfterUpdatePrincipal(PrincipalsServiceEvents.AfterUpdatePrincipalEvent event) {} /** {@link PrincipalsServiceEvents.BeforeRotateCredentialsEvent} */ - public void onBeforeRotateCredentials( + default void onBeforeRotateCredentials( PrincipalsServiceEvents.BeforeRotateCredentialsEvent event) {} /** {@link PrincipalsServiceEvents.AfterRotateCredentialsEvent} */ - public void onAfterRotateCredentials(PrincipalsServiceEvents.AfterRotateCredentialsEvent event) {} + default void onAfterRotateCredentials( + PrincipalsServiceEvents.AfterRotateCredentialsEvent event) {} /** {@link PrincipalsServiceEvents.BeforeListPrincipalsEvent} */ - public void onBeforeListPrincipals(PrincipalsServiceEvents.BeforeListPrincipalsEvent event) {} + default void onBeforeListPrincipals(PrincipalsServiceEvents.BeforeListPrincipalsEvent event) {} /** {@link PrincipalsServiceEvents.AfterListPrincipalsEvent} */ - public void onAfterListPrincipals(PrincipalsServiceEvents.AfterListPrincipalsEvent event) {} + default void onAfterListPrincipals(PrincipalsServiceEvents.AfterListPrincipalsEvent event) {} /** {@link PrincipalsServiceEvents.BeforeResetCredentialsEvent} */ - public void onBeforeResetCredentials(PrincipalsServiceEvents.BeforeResetCredentialsEvent event) {} + default void onBeforeResetCredentials( + PrincipalsServiceEvents.BeforeResetCredentialsEvent event) {} /** {@link PrincipalsServiceEvents.AfterResetCredentialsEvent} */ - public void onAfterResetCredentials(PrincipalsServiceEvents.AfterResetCredentialsEvent event) {} + default void onAfterResetCredentials(PrincipalsServiceEvents.AfterResetCredentialsEvent event) {} /** {@link PrincipalRolesServiceEvents.BeforeCreatePrincipalRoleEvent} */ - public void onBeforeCreatePrincipalRole( + default void onBeforeCreatePrincipalRole( PrincipalRolesServiceEvents.BeforeCreatePrincipalRoleEvent event) {} /** {@link PrincipalRolesServiceEvents.AfterCreatePrincipalRoleEvent} */ - public void onAfterCreatePrincipalRole( + default void onAfterCreatePrincipalRole( PrincipalRolesServiceEvents.AfterCreatePrincipalRoleEvent event) {} /** {@link PrincipalRolesServiceEvents.BeforeDeletePrincipalRoleEvent} */ - public void onBeforeDeletePrincipalRole( + default void onBeforeDeletePrincipalRole( PrincipalRolesServiceEvents.BeforeDeletePrincipalRoleEvent event) {} /** {@link PrincipalRolesServiceEvents.AfterDeletePrincipalRoleEvent} */ - public void onAfterDeletePrincipalRole( + default void onAfterDeletePrincipalRole( PrincipalRolesServiceEvents.AfterDeletePrincipalRoleEvent event) {} /** {@link PrincipalRolesServiceEvents.BeforeGetPrincipalRoleEvent} */ - public void onBeforeGetPrincipalRole( + default void onBeforeGetPrincipalRole( PrincipalRolesServiceEvents.BeforeGetPrincipalRoleEvent event) {} /** {@link PrincipalRolesServiceEvents.AfterGetPrincipalRoleEvent} */ - public void onAfterGetPrincipalRole( + default void onAfterGetPrincipalRole( PrincipalRolesServiceEvents.AfterGetPrincipalRoleEvent event) {} /** {@link PrincipalRolesServiceEvents.BeforeUpdatePrincipalRoleEvent} */ - public void onBeforeUpdatePrincipalRole( + default void onBeforeUpdatePrincipalRole( PrincipalRolesServiceEvents.BeforeUpdatePrincipalRoleEvent event) {} /** {@link PrincipalRolesServiceEvents.AfterUpdatePrincipalRoleEvent} */ - public void onAfterUpdatePrincipalRole( + default void onAfterUpdatePrincipalRole( PrincipalRolesServiceEvents.AfterUpdatePrincipalRoleEvent event) {} /** {@link PrincipalRolesServiceEvents.BeforeListPrincipalRolesEvent} */ - public void onBeforeListPrincipalRoles( + default void onBeforeListPrincipalRoles( PrincipalRolesServiceEvents.BeforeListPrincipalRolesEvent event) {} /** {@link PrincipalRolesServiceEvents.AfterListPrincipalRolesEvent} */ - public void onAfterListPrincipalRoles( + default void onAfterListPrincipalRoles( PrincipalRolesServiceEvents.AfterListPrincipalRolesEvent event) {} /** {@link CatalogsServiceEvents.BeforeCreateCatalogRoleEvent} */ - public void onBeforeCreateCatalogRole(CatalogsServiceEvents.BeforeCreateCatalogRoleEvent event) {} + default void onBeforeCreateCatalogRole( + CatalogsServiceEvents.BeforeCreateCatalogRoleEvent event) {} /** {@link CatalogsServiceEvents.AfterCreateCatalogRoleEvent} */ - public void onAfterCreateCatalogRole(CatalogsServiceEvents.AfterCreateCatalogRoleEvent event) {} + default void onAfterCreateCatalogRole(CatalogsServiceEvents.AfterCreateCatalogRoleEvent event) {} /** {@link CatalogsServiceEvents.BeforeDeleteCatalogRoleEvent} */ - public void onBeforeDeleteCatalogRole(CatalogsServiceEvents.BeforeDeleteCatalogRoleEvent event) {} + default void onBeforeDeleteCatalogRole( + CatalogsServiceEvents.BeforeDeleteCatalogRoleEvent event) {} /** {@link CatalogsServiceEvents.AfterDeleteCatalogRoleEvent} */ - public void onAfterDeleteCatalogRole(CatalogsServiceEvents.AfterDeleteCatalogRoleEvent event) {} + default void onAfterDeleteCatalogRole(CatalogsServiceEvents.AfterDeleteCatalogRoleEvent event) {} /** {@link CatalogsServiceEvents.BeforeGetCatalogRoleEvent} */ - public void onBeforeGetCatalogRole(CatalogsServiceEvents.BeforeGetCatalogRoleEvent event) {} + default void onBeforeGetCatalogRole(CatalogsServiceEvents.BeforeGetCatalogRoleEvent event) {} /** {@link CatalogsServiceEvents.AfterGetCatalogRoleEvent} */ - public void onAfterGetCatalogRole(CatalogsServiceEvents.AfterGetCatalogRoleEvent event) {} + default void onAfterGetCatalogRole(CatalogsServiceEvents.AfterGetCatalogRoleEvent event) {} /** {@link CatalogsServiceEvents.BeforeUpdateCatalogRoleEvent} */ - public void onBeforeUpdateCatalogRole(CatalogsServiceEvents.BeforeUpdateCatalogRoleEvent event) {} + default void onBeforeUpdateCatalogRole( + CatalogsServiceEvents.BeforeUpdateCatalogRoleEvent event) {} /** {@link CatalogsServiceEvents.AfterUpdateCatalogRoleEvent} */ - public void onAfterUpdateCatalogRole(CatalogsServiceEvents.AfterUpdateCatalogRoleEvent event) {} + default void onAfterUpdateCatalogRole(CatalogsServiceEvents.AfterUpdateCatalogRoleEvent event) {} /** {@link CatalogsServiceEvents.BeforeListCatalogRolesEvent} */ - public void onBeforeListCatalogRoles(CatalogsServiceEvents.BeforeListCatalogRolesEvent event) {} + default void onBeforeListCatalogRoles(CatalogsServiceEvents.BeforeListCatalogRolesEvent event) {} /** {@link CatalogsServiceEvents.AfterListCatalogRolesEvent} */ - public void onAfterListCatalogRoles(CatalogsServiceEvents.AfterListCatalogRolesEvent event) {} + default void onAfterListCatalogRoles(CatalogsServiceEvents.AfterListCatalogRolesEvent event) {} /** {@link PrincipalsServiceEvents.BeforeAssignPrincipalRoleEvent} */ - public void onBeforeAssignPrincipalRole( + default void onBeforeAssignPrincipalRole( PrincipalsServiceEvents.BeforeAssignPrincipalRoleEvent event) {} /** {@link PrincipalsServiceEvents.AfterAssignPrincipalRoleEvent} */ - public void onAfterAssignPrincipalRole( + default void onAfterAssignPrincipalRole( PrincipalsServiceEvents.AfterAssignPrincipalRoleEvent event) {} /** {@link PrincipalsServiceEvents.BeforeRevokePrincipalRoleEvent} */ - public void onBeforeRevokePrincipalRole( + default void onBeforeRevokePrincipalRole( PrincipalsServiceEvents.BeforeRevokePrincipalRoleEvent event) {} /** {@link PrincipalsServiceEvents.AfterRevokePrincipalRoleEvent} */ - public void onAfterRevokePrincipalRole( + default void onAfterRevokePrincipalRole( PrincipalsServiceEvents.AfterRevokePrincipalRoleEvent event) {} /** {@link PrincipalsServiceEvents.BeforeListAssignedPrincipalRolesEvent} */ - public void onBeforeListAssignedPrincipalRoles( + default void onBeforeListAssignedPrincipalRoles( PrincipalsServiceEvents.BeforeListAssignedPrincipalRolesEvent event) {} /** {@link PrincipalsServiceEvents.AfterListAssignedPrincipalRolesEvent} */ - public void onAfterListAssignedPrincipalRoles( + default void onAfterListAssignedPrincipalRoles( PrincipalsServiceEvents.AfterListAssignedPrincipalRolesEvent event) {} /** {@link PrincipalRolesServiceEvents.BeforeAssignCatalogRoleToPrincipalRoleEvent} */ - public void onBeforeAssignCatalogRoleToPrincipalRole( + default void onBeforeAssignCatalogRoleToPrincipalRole( PrincipalRolesServiceEvents.BeforeAssignCatalogRoleToPrincipalRoleEvent event) {} /** {@link PrincipalRolesServiceEvents.AfterAssignCatalogRoleToPrincipalRoleEvent} */ - public void onAfterAssignCatalogRoleToPrincipalRole( + default void onAfterAssignCatalogRoleToPrincipalRole( PrincipalRolesServiceEvents.AfterAssignCatalogRoleToPrincipalRoleEvent event) {} /** {@link PrincipalRolesServiceEvents.BeforeRevokeCatalogRoleFromPrincipalRoleEvent} */ - public void onBeforeRevokeCatalogRoleFromPrincipalRole( + default void onBeforeRevokeCatalogRoleFromPrincipalRole( PrincipalRolesServiceEvents.BeforeRevokeCatalogRoleFromPrincipalRoleEvent event) {} /** {@link PrincipalRolesServiceEvents.AfterRevokeCatalogRoleFromPrincipalRoleEvent} */ - public void onAfterRevokeCatalogRoleFromPrincipalRole( + default void onAfterRevokeCatalogRoleFromPrincipalRole( PrincipalRolesServiceEvents.AfterRevokeCatalogRoleFromPrincipalRoleEvent event) {} /** {@link PrincipalRolesServiceEvents.BeforeListAssigneePrincipalsForPrincipalRoleEvent} */ - public void onBeforeListAssigneePrincipalsForPrincipalRole( + default void onBeforeListAssigneePrincipalsForPrincipalRole( PrincipalRolesServiceEvents.BeforeListAssigneePrincipalsForPrincipalRoleEvent event) {} /** {@link PrincipalRolesServiceEvents.AfterListAssigneePrincipalsForPrincipalRoleEvent} */ - public void onAfterListAssigneePrincipalsForPrincipalRole( + default void onAfterListAssigneePrincipalsForPrincipalRole( PrincipalRolesServiceEvents.AfterListAssigneePrincipalsForPrincipalRoleEvent event) {} /** {@link PrincipalRolesServiceEvents.BeforeListCatalogRolesForPrincipalRoleEvent} */ - public void onBeforeListCatalogRolesForPrincipalRole( + default void onBeforeListCatalogRolesForPrincipalRole( PrincipalRolesServiceEvents.BeforeListCatalogRolesForPrincipalRoleEvent event) {} /** {@link PrincipalRolesServiceEvents.AfterListCatalogRolesForPrincipalRoleEvent} */ - public void onAfterListCatalogRolesForPrincipalRole( + default void onAfterListCatalogRolesForPrincipalRole( PrincipalRolesServiceEvents.AfterListCatalogRolesForPrincipalRoleEvent event) {} /** {@link CatalogsServiceEvents.BeforeAddGrantToCatalogRoleEvent} */ - public void onBeforeAddGrantToCatalogRole( + default void onBeforeAddGrantToCatalogRole( CatalogsServiceEvents.BeforeAddGrantToCatalogRoleEvent event) {} /** {@link CatalogsServiceEvents.AfterAddGrantToCatalogRoleEvent} */ - public void onAfterAddGrantToCatalogRole( + default void onAfterAddGrantToCatalogRole( CatalogsServiceEvents.AfterAddGrantToCatalogRoleEvent event) {} /** {@link CatalogsServiceEvents.BeforeRevokeGrantFromCatalogRoleEvent} */ - public void onBeforeRevokeGrantFromCatalogRole( + default void onBeforeRevokeGrantFromCatalogRole( CatalogsServiceEvents.BeforeRevokeGrantFromCatalogRoleEvent event) {} /** {@link CatalogsServiceEvents.AfterRevokeGrantFromCatalogRoleEvent} */ - public void onAfterRevokeGrantFromCatalogRole( + default void onAfterRevokeGrantFromCatalogRole( CatalogsServiceEvents.AfterRevokeGrantFromCatalogRoleEvent event) {} /** {@link CatalogsServiceEvents.BeforeListAssigneePrincipalRolesForCatalogRoleEvent} */ - public void onBeforeListAssigneePrincipalRolesForCatalogRole( + default void onBeforeListAssigneePrincipalRolesForCatalogRole( CatalogsServiceEvents.BeforeListAssigneePrincipalRolesForCatalogRoleEvent event) {} /** {@link CatalogsServiceEvents.AfterListAssigneePrincipalRolesForCatalogRoleEvent} */ - public void onAfterListAssigneePrincipalRolesForCatalogRole( + default void onAfterListAssigneePrincipalRolesForCatalogRole( CatalogsServiceEvents.AfterListAssigneePrincipalRolesForCatalogRoleEvent event) {} /** {@link CatalogsServiceEvents.BeforeListGrantsForCatalogRoleEvent} */ - public void onBeforeListGrantsForCatalogRole( + default void onBeforeListGrantsForCatalogRole( CatalogsServiceEvents.BeforeListGrantsForCatalogRoleEvent event) {} /** {@link CatalogsServiceEvents.AfterListGrantsForCatalogRoleEvent} */ - public void onAfterListGrantsForCatalogRole( + default void onAfterListGrantsForCatalogRole( CatalogsServiceEvents.AfterListGrantsForCatalogRoleEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeListNamespacesEvent} */ - public void onBeforeListNamespaces(IcebergRestCatalogEvents.BeforeListNamespacesEvent event) {} + default void onBeforeListNamespaces(IcebergRestCatalogEvents.BeforeListNamespacesEvent event) {} /** {@link IcebergRestCatalogEvents.AfterListNamespacesEvent} */ - public void onAfterListNamespaces(IcebergRestCatalogEvents.AfterListNamespacesEvent event) {} + default void onAfterListNamespaces(IcebergRestCatalogEvents.AfterListNamespacesEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeLoadNamespaceMetadataEvent} */ - public void onBeforeLoadNamespaceMetadata( + default void onBeforeLoadNamespaceMetadata( IcebergRestCatalogEvents.BeforeLoadNamespaceMetadataEvent event) {} /** {@link IcebergRestCatalogEvents.AfterLoadNamespaceMetadataEvent} */ - public void onAfterLoadNamespaceMetadata( + default void onAfterLoadNamespaceMetadata( IcebergRestCatalogEvents.AfterLoadNamespaceMetadataEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeCheckExistsNamespaceEvent} */ - public void onBeforeCheckExistsNamespace( + default void onBeforeCheckExistsNamespace( IcebergRestCatalogEvents.BeforeCheckExistsNamespaceEvent event) {} /** {@link IcebergRestCatalogEvents.AfterCheckExistsNamespaceEvent} */ - public void onAfterCheckExistsNamespace( + default void onAfterCheckExistsNamespace( IcebergRestCatalogEvents.AfterCheckExistsNamespaceEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeDropNamespaceEvent} */ - public void onBeforeDropNamespace(IcebergRestCatalogEvents.BeforeDropNamespaceEvent event) {} + default void onBeforeDropNamespace(IcebergRestCatalogEvents.BeforeDropNamespaceEvent event) {} /** {@link IcebergRestCatalogEvents.AfterDropNamespaceEvent} */ - public void onAfterDropNamespace(IcebergRestCatalogEvents.AfterDropNamespaceEvent event) {} + default void onAfterDropNamespace(IcebergRestCatalogEvents.AfterDropNamespaceEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeUpdateNamespacePropertiesEvent} */ - public void onBeforeUpdateNamespaceProperties( + default void onBeforeUpdateNamespaceProperties( IcebergRestCatalogEvents.BeforeUpdateNamespacePropertiesEvent event) {} /** {@link IcebergRestCatalogEvents.AfterUpdateNamespacePropertiesEvent} */ - public void onAfterUpdateNamespaceProperties( + default void onAfterUpdateNamespaceProperties( IcebergRestCatalogEvents.AfterUpdateNamespacePropertiesEvent event) {} // Iceberg REST Catalog Table Events /** {@link IcebergRestCatalogEvents.BeforeCreateTableEvent} */ - public void onBeforeCreateTable(IcebergRestCatalogEvents.BeforeCreateTableEvent event) {} + default void onBeforeCreateTable(IcebergRestCatalogEvents.BeforeCreateTableEvent event) {} /** {@link IcebergRestCatalogEvents.AfterCreateTableEvent} */ - public void onAfterCreateTable(IcebergRestCatalogEvents.AfterCreateTableEvent event) {} + default void onAfterCreateTable(IcebergRestCatalogEvents.AfterCreateTableEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeListTablesEvent} */ - public void onBeforeListTables(IcebergRestCatalogEvents.BeforeListTablesEvent event) {} + default void onBeforeListTables(IcebergRestCatalogEvents.BeforeListTablesEvent event) {} /** {@link IcebergRestCatalogEvents.AfterListTablesEvent} */ - public void onAfterListTables(IcebergRestCatalogEvents.AfterListTablesEvent event) {} + default void onAfterListTables(IcebergRestCatalogEvents.AfterListTablesEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeLoadTableEvent} */ - public void onBeforeLoadTable(IcebergRestCatalogEvents.BeforeLoadTableEvent event) {} + default void onBeforeLoadTable(IcebergRestCatalogEvents.BeforeLoadTableEvent event) {} /** {@link IcebergRestCatalogEvents.AfterLoadTableEvent} */ - public void onAfterLoadTable(IcebergRestCatalogEvents.AfterLoadTableEvent event) {} + default void onAfterLoadTable(IcebergRestCatalogEvents.AfterLoadTableEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeCheckExistsTableEvent} */ - public void onBeforeCheckExistsTable( + default void onBeforeCheckExistsTable( IcebergRestCatalogEvents.BeforeCheckExistsTableEvent event) {} /** {@link IcebergRestCatalogEvents.AfterCheckExistsTableEvent} */ - public void onAfterCheckExistsTable(IcebergRestCatalogEvents.AfterCheckExistsTableEvent event) {} + default void onAfterCheckExistsTable(IcebergRestCatalogEvents.AfterCheckExistsTableEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeDropTableEvent} */ - public void onBeforeDropTable(IcebergRestCatalogEvents.BeforeDropTableEvent event) {} + default void onBeforeDropTable(IcebergRestCatalogEvents.BeforeDropTableEvent event) {} /** {@link IcebergRestCatalogEvents.AfterDropTableEvent} */ - public void onAfterDropTable(IcebergRestCatalogEvents.AfterDropTableEvent event) {} + default void onAfterDropTable(IcebergRestCatalogEvents.AfterDropTableEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeRegisterTableEvent} */ - public void onBeforeRegisterTable(IcebergRestCatalogEvents.BeforeRegisterTableEvent event) {} + default void onBeforeRegisterTable(IcebergRestCatalogEvents.BeforeRegisterTableEvent event) {} /** {@link IcebergRestCatalogEvents.AfterRegisterTableEvent} */ - public void onAfterRegisterTable(IcebergRestCatalogEvents.AfterRegisterTableEvent event) {} + default void onAfterRegisterTable(IcebergRestCatalogEvents.AfterRegisterTableEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeRenameTableEvent} */ - public void onBeforeRenameTable(IcebergRestCatalogEvents.BeforeRenameTableEvent event) {} + default void onBeforeRenameTable(IcebergRestCatalogEvents.BeforeRenameTableEvent event) {} /** {@link IcebergRestCatalogEvents.AfterRenameTableEvent} */ - public void onAfterRenameTable(IcebergRestCatalogEvents.AfterRenameTableEvent event) {} + default void onAfterRenameTable(IcebergRestCatalogEvents.AfterRenameTableEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeUpdateTableEvent} */ - public void onBeforeUpdateTable(IcebergRestCatalogEvents.BeforeUpdateTableEvent event) {} + default void onBeforeUpdateTable(IcebergRestCatalogEvents.BeforeUpdateTableEvent event) {} /** {@link IcebergRestCatalogEvents.AfterUpdateTableEvent} */ - public void onAfterUpdateTable(IcebergRestCatalogEvents.AfterUpdateTableEvent event) {} + default void onAfterUpdateTable(IcebergRestCatalogEvents.AfterUpdateTableEvent event) {} // Iceberg REST Catalog View Events /** {@link IcebergRestCatalogEvents.BeforeCreateViewEvent} */ - public void onBeforeCreateView(IcebergRestCatalogEvents.BeforeCreateViewEvent event) {} + default void onBeforeCreateView(IcebergRestCatalogEvents.BeforeCreateViewEvent event) {} /** {@link IcebergRestCatalogEvents.AfterCreateViewEvent} */ - public void onAfterCreateView(IcebergRestCatalogEvents.AfterCreateViewEvent event) {} + default void onAfterCreateView(IcebergRestCatalogEvents.AfterCreateViewEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeListViewsEvent} */ - public void onBeforeListViews(IcebergRestCatalogEvents.BeforeListViewsEvent event) {} + default void onBeforeListViews(IcebergRestCatalogEvents.BeforeListViewsEvent event) {} /** {@link IcebergRestCatalogEvents.AfterListViewsEvent} */ - public void onAfterListViews(IcebergRestCatalogEvents.AfterListViewsEvent event) {} + default void onAfterListViews(IcebergRestCatalogEvents.AfterListViewsEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeLoadViewEvent} */ - public void onBeforeLoadView(IcebergRestCatalogEvents.BeforeLoadViewEvent event) {} + default void onBeforeLoadView(IcebergRestCatalogEvents.BeforeLoadViewEvent event) {} /** {@link IcebergRestCatalogEvents.AfterLoadViewEvent} */ - public void onAfterLoadView(IcebergRestCatalogEvents.AfterLoadViewEvent event) {} + default void onAfterLoadView(IcebergRestCatalogEvents.AfterLoadViewEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeCheckExistsViewEvent} */ - public void onBeforeCheckExistsView(IcebergRestCatalogEvents.BeforeCheckExistsViewEvent event) {} + default void onBeforeCheckExistsView(IcebergRestCatalogEvents.BeforeCheckExistsViewEvent event) {} /** {@link IcebergRestCatalogEvents.AfterCheckExistsViewEvent} */ - public void onAfterCheckExistsView(IcebergRestCatalogEvents.AfterCheckExistsViewEvent event) {} + default void onAfterCheckExistsView(IcebergRestCatalogEvents.AfterCheckExistsViewEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeDropViewEvent} */ - public void onBeforeDropView(IcebergRestCatalogEvents.BeforeDropViewEvent event) {} + default void onBeforeDropView(IcebergRestCatalogEvents.BeforeDropViewEvent event) {} /** {@link IcebergRestCatalogEvents.AfterDropViewEvent} */ - public void onAfterDropView(IcebergRestCatalogEvents.AfterDropViewEvent event) {} + default void onAfterDropView(IcebergRestCatalogEvents.AfterDropViewEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeRenameViewEvent} */ - public void onBeforeRenameView(IcebergRestCatalogEvents.BeforeRenameViewEvent event) {} + default void onBeforeRenameView(IcebergRestCatalogEvents.BeforeRenameViewEvent event) {} /** {@link IcebergRestCatalogEvents.AfterRenameViewEvent} */ - public void onAfterRenameView(IcebergRestCatalogEvents.AfterRenameViewEvent event) {} + default void onAfterRenameView(IcebergRestCatalogEvents.AfterRenameViewEvent event) {} /** {@link IcebergRestCatalogEvents.BeforeReplaceViewEvent} */ - public void onBeforeReplaceView(IcebergRestCatalogEvents.BeforeReplaceViewEvent event) {} + default void onBeforeReplaceView(IcebergRestCatalogEvents.BeforeReplaceViewEvent event) {} /** {@link IcebergRestCatalogEvents.AfterReplaceViewEvent} */ - public void onAfterReplaceView(IcebergRestCatalogEvents.AfterReplaceViewEvent event) {} + default void onAfterReplaceView(IcebergRestCatalogEvents.AfterReplaceViewEvent event) {} // Iceberg REST Catalog Credential Events /** {@link IcebergRestCatalogEvents.BeforeLoadCredentialsEvent} */ - public void onBeforeLoadCredentials(IcebergRestCatalogEvents.BeforeLoadCredentialsEvent event) {} + default void onBeforeLoadCredentials(IcebergRestCatalogEvents.BeforeLoadCredentialsEvent event) {} /** {@link IcebergRestCatalogEvents.AfterLoadCredentialsEvent} */ - public void onAfterLoadCredentials(IcebergRestCatalogEvents.AfterLoadCredentialsEvent event) {} + default void onAfterLoadCredentials(IcebergRestCatalogEvents.AfterLoadCredentialsEvent event) {} // Iceberg REST Catalog Transactions Events /** {@link IcebergRestCatalogEvents.BeforeCommitTransactionEvent} */ - public void onBeforeCommitTransaction( + default void onBeforeCommitTransaction( IcebergRestCatalogEvents.BeforeCommitTransactionEvent event) {} /** {@link IcebergRestCatalogEvents.AfterCommitTransactionEvent} */ - public void onAfterCommitTransaction( + default void onAfterCommitTransaction( IcebergRestCatalogEvents.AfterCommitTransactionEvent event) {} // Iceberg REST Catalog Notification Events /** {@link IcebergRestCatalogEvents.BeforeSendNotificationEvent} */ - public void onBeforeSendNotification( + default void onBeforeSendNotification( IcebergRestCatalogEvents.BeforeSendNotificationEvent event) {} /** {@link IcebergRestCatalogEvents.AfterSendNotificationEvent} */ - public void onAfterSendNotification(IcebergRestCatalogEvents.AfterSendNotificationEvent event) {} + default void onAfterSendNotification(IcebergRestCatalogEvents.AfterSendNotificationEvent event) {} // Iceberg REST Catalog Configuration Events /** {@link IcebergRestCatalogEvents.BeforeGetConfigEvent} */ - public void onBeforeGetConfig(IcebergRestCatalogEvents.BeforeGetConfigEvent event) {} + default void onBeforeGetConfig(IcebergRestCatalogEvents.BeforeGetConfigEvent event) {} /** {@link IcebergRestCatalogEvents.AfterGetConfigEvent} */ - public void onAfterGetConfig(IcebergRestCatalogEvents.AfterGetConfigEvent event) {} + default void onAfterGetConfig(IcebergRestCatalogEvents.AfterGetConfigEvent event) {} // Catalog Policy Service Events /** {@link CatalogPolicyServiceEvents.BeforeCreatePolicyEvent} */ - public void onBeforeCreatePolicy(CatalogPolicyServiceEvents.BeforeCreatePolicyEvent event) {} + default void onBeforeCreatePolicy(CatalogPolicyServiceEvents.BeforeCreatePolicyEvent event) {} /** {@link CatalogPolicyServiceEvents.AfterCreatePolicyEvent} */ - public void onAfterCreatePolicy(CatalogPolicyServiceEvents.AfterCreatePolicyEvent event) {} + default void onAfterCreatePolicy(CatalogPolicyServiceEvents.AfterCreatePolicyEvent event) {} /** {@link CatalogPolicyServiceEvents.BeforeListPoliciesEvent} */ - public void onBeforeListPolicies(CatalogPolicyServiceEvents.BeforeListPoliciesEvent event) {} + default void onBeforeListPolicies(CatalogPolicyServiceEvents.BeforeListPoliciesEvent event) {} /** {@link CatalogPolicyServiceEvents.AfterListPoliciesEvent} */ - public void onAfterListPolicies(CatalogPolicyServiceEvents.AfterListPoliciesEvent event) {} + default void onAfterListPolicies(CatalogPolicyServiceEvents.AfterListPoliciesEvent event) {} /** {@link CatalogPolicyServiceEvents.BeforeLoadPolicyEvent} */ - public void onBeforeLoadPolicy(CatalogPolicyServiceEvents.BeforeLoadPolicyEvent event) {} + default void onBeforeLoadPolicy(CatalogPolicyServiceEvents.BeforeLoadPolicyEvent event) {} /** {@link CatalogPolicyServiceEvents.AfterLoadPolicyEvent} */ - public void onAfterLoadPolicy(CatalogPolicyServiceEvents.AfterLoadPolicyEvent event) {} + default void onAfterLoadPolicy(CatalogPolicyServiceEvents.AfterLoadPolicyEvent event) {} /** {@link CatalogPolicyServiceEvents.BeforeUpdatePolicyEvent} */ - public void onBeforeUpdatePolicy(CatalogPolicyServiceEvents.BeforeUpdatePolicyEvent event) {} + default void onBeforeUpdatePolicy(CatalogPolicyServiceEvents.BeforeUpdatePolicyEvent event) {} /** {@link CatalogPolicyServiceEvents.AfterUpdatePolicyEvent} */ - public void onAfterUpdatePolicy(CatalogPolicyServiceEvents.AfterUpdatePolicyEvent event) {} + default void onAfterUpdatePolicy(CatalogPolicyServiceEvents.AfterUpdatePolicyEvent event) {} /** {@link CatalogPolicyServiceEvents.BeforeDropPolicyEvent} */ - public void onBeforeDropPolicy(CatalogPolicyServiceEvents.BeforeDropPolicyEvent event) {} + default void onBeforeDropPolicy(CatalogPolicyServiceEvents.BeforeDropPolicyEvent event) {} /** {@link CatalogPolicyServiceEvents.AfterDropPolicyEvent} */ - public void onAfterDropPolicy(CatalogPolicyServiceEvents.AfterDropPolicyEvent event) {} + default void onAfterDropPolicy(CatalogPolicyServiceEvents.AfterDropPolicyEvent event) {} /** {@link CatalogPolicyServiceEvents.BeforeAttachPolicyEvent} */ - public void onBeforeAttachPolicy(CatalogPolicyServiceEvents.BeforeAttachPolicyEvent event) {} + default void onBeforeAttachPolicy(CatalogPolicyServiceEvents.BeforeAttachPolicyEvent event) {} /** {@link CatalogPolicyServiceEvents.AfterAttachPolicyEvent} */ - public void onAfterAttachPolicy(CatalogPolicyServiceEvents.AfterAttachPolicyEvent event) {} + default void onAfterAttachPolicy(CatalogPolicyServiceEvents.AfterAttachPolicyEvent event) {} /** {@link CatalogPolicyServiceEvents.BeforeDetachPolicyEvent} */ - public void onBeforeDetachPolicy(CatalogPolicyServiceEvents.BeforeDetachPolicyEvent event) {} + default void onBeforeDetachPolicy(CatalogPolicyServiceEvents.BeforeDetachPolicyEvent event) {} /** {@link CatalogPolicyServiceEvents.AfterDetachPolicyEvent} */ - public void onAfterDetachPolicy(CatalogPolicyServiceEvents.AfterDetachPolicyEvent event) {} + default void onAfterDetachPolicy(CatalogPolicyServiceEvents.AfterDetachPolicyEvent event) {} /** {@link CatalogPolicyServiceEvents.BeforeGetApplicablePoliciesEvent} */ - public void onBeforeGetApplicablePolicies( + default void onBeforeGetApplicablePolicies( CatalogPolicyServiceEvents.BeforeGetApplicablePoliciesEvent event) {} /** {@link CatalogPolicyServiceEvents.AfterGetApplicablePoliciesEvent} */ - public void onAfterGetApplicablePolicies( + default void onAfterGetApplicablePolicies( CatalogPolicyServiceEvents.AfterGetApplicablePoliciesEvent event) {} /** {@link CatalogGenericTableServiceEvents.BeforeCreateGenericTableEvent} */ - public void onBeforeCreateGenericTable( + default void onBeforeCreateGenericTable( CatalogGenericTableServiceEvents.BeforeCreateGenericTableEvent event) {} /** {@link CatalogGenericTableServiceEvents.AfterCreateGenericTableEvent} */ - public void onAfterCreateGenericTable( + default void onAfterCreateGenericTable( CatalogGenericTableServiceEvents.AfterCreateGenericTableEvent event) {} /** {@link CatalogGenericTableServiceEvents.BeforeDropGenericTableEvent} */ - public void onBeforeDropGenericTable( + default void onBeforeDropGenericTable( CatalogGenericTableServiceEvents.BeforeDropGenericTableEvent event) {} /** {@link CatalogGenericTableServiceEvents.AfterDropGenericTableEvent} */ - public void onAfterDropGenericTable( + default void onAfterDropGenericTable( CatalogGenericTableServiceEvents.AfterDropGenericTableEvent event) {} /** {@link CatalogGenericTableServiceEvents.BeforeListGenericTablesEvent} */ - public void onBeforeListGenericTables( + default void onBeforeListGenericTables( CatalogGenericTableServiceEvents.BeforeListGenericTablesEvent event) {} /** {@link CatalogGenericTableServiceEvents.AfterListGenericTablesEvent} */ - public void onAfterListGenericTables( + default void onAfterListGenericTables( CatalogGenericTableServiceEvents.AfterListGenericTablesEvent event) {} /** {@link CatalogGenericTableServiceEvents.BeforeLoadGenericTableEvent} */ - public void onBeforeLoadGenericTable( + default void onBeforeLoadGenericTable( CatalogGenericTableServiceEvents.BeforeLoadGenericTableEvent event) {} /** {@link CatalogGenericTableServiceEvents.AfterLoadGenericTableEvent} */ - public void onAfterLoadGenericTable( + default void onAfterLoadGenericTable( CatalogGenericTableServiceEvents.AfterLoadGenericTableEvent event) {} } diff --git a/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/PolarisPersistenceEventListener.java b/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/PolarisPersistenceEventListener.java index d33727cc37..f2f0c960a8 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/PolarisPersistenceEventListener.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/PolarisPersistenceEventListener.java @@ -25,47 +25,12 @@ import org.apache.iceberg.TableMetadataParser; import org.apache.iceberg.catalog.TableIdentifier; import org.apache.polaris.core.entity.PolarisEvent; -import org.apache.polaris.service.events.AfterAttemptTaskEvent; -import org.apache.polaris.service.events.BeforeAttemptTaskEvent; -import org.apache.polaris.service.events.BeforeLimitRequestRateEvent; import org.apache.polaris.service.events.CatalogsServiceEvents; import org.apache.polaris.service.events.IcebergRestCatalogEvents; -public abstract class PolarisPersistenceEventListener extends PolarisEventListener { +public abstract class PolarisPersistenceEventListener implements PolarisEventListener { // TODO: Ensure all events (except RateLimiter ones) call `processEvent` - @Override - public final void onBeforeLimitRequestRate(BeforeLimitRequestRateEvent event) {} - - @Override - public void onBeforeCommitTable(IcebergRestCatalogEvents.BeforeCommitTableEvent event) {} - - @Override - public void onAfterCommitTable(IcebergRestCatalogEvents.AfterCommitTableEvent event) {} - - @Override - public void onBeforeCommitView(IcebergRestCatalogEvents.BeforeCommitViewEvent event) {} - - @Override - public void onAfterCommitView(IcebergRestCatalogEvents.AfterCommitViewEvent event) {} - - @Override - public void onBeforeRefreshTable(IcebergRestCatalogEvents.BeforeRefreshTableEvent event) {} - - @Override - public void onAfterRefreshTable(IcebergRestCatalogEvents.AfterRefreshTableEvent event) {} - - @Override - public void onBeforeRefreshView(IcebergRestCatalogEvents.BeforeRefreshViewEvent event) {} - - @Override - public void onAfterRefreshView(IcebergRestCatalogEvents.AfterRefreshViewEvent event) {} - - @Override - public void onBeforeAttemptTask(BeforeAttemptTaskEvent event) {} - - @Override - public void onAfterAttemptTask(AfterAttemptTaskEvent event) {} @Override public void onAfterCreateTable(IcebergRestCatalogEvents.AfterCreateTableEvent event) { diff --git a/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/TestPolarisEventListener.java b/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/TestPolarisEventListener.java index d0b9b5f92d..deec48c30a 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/TestPolarisEventListener.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/TestPolarisEventListener.java @@ -26,18 +26,21 @@ import org.apache.polaris.service.events.AfterAttemptTaskEvent; import org.apache.polaris.service.events.BeforeAttemptTaskEvent; import org.apache.polaris.service.events.BeforeLimitRequestRateEvent; +import org.apache.polaris.service.events.CatalogGenericTableServiceEvents; +import org.apache.polaris.service.events.CatalogPolicyServiceEvents; import org.apache.polaris.service.events.IcebergRestCatalogEvents; import org.apache.polaris.service.events.PolarisEvent; /** Event listener that stores all emitted events forever. Not recommended for use in production. */ @ApplicationScoped @Identifier("test") -public class TestPolarisEventListener extends PolarisEventListener { +public class TestPolarisEventListener implements PolarisEventListener { private final List history = new ArrayList<>(); public T getLatest(Class type) { - return (T) - Streams.findLast(history.stream().filter(type::isInstance)).map(type::cast).orElseThrow(); + return Streams.findLast(history.stream().filter(type::isInstance)) + .map(type::cast) + .orElseThrow(); } @Override @@ -85,6 +88,393 @@ public void onAfterRefreshView(IcebergRestCatalogEvents.AfterRefreshViewEvent ev history.add(event); } + @Override + public void onBeforeCreateNamespace(IcebergRestCatalogEvents.BeforeCreateNamespaceEvent event) { + history.add(event); + } + + @Override + public void onAfterCreateNamespace(IcebergRestCatalogEvents.AfterCreateNamespaceEvent event) { + history.add(event); + } + + @Override + public void onBeforeListNamespaces(IcebergRestCatalogEvents.BeforeListNamespacesEvent event) { + history.add(event); + } + + @Override + public void onAfterListNamespaces(IcebergRestCatalogEvents.AfterListNamespacesEvent event) { + history.add(event); + } + + @Override + public void onBeforeLoadNamespaceMetadata( + IcebergRestCatalogEvents.BeforeLoadNamespaceMetadataEvent event) { + history.add(event); + } + + @Override + public void onAfterLoadNamespaceMetadata( + IcebergRestCatalogEvents.AfterLoadNamespaceMetadataEvent event) { + history.add(event); + } + + @Override + public void onBeforeCheckExistsNamespace( + IcebergRestCatalogEvents.BeforeCheckExistsNamespaceEvent event) { + history.add(event); + } + + @Override + public void onAfterCheckExistsNamespace( + IcebergRestCatalogEvents.AfterCheckExistsNamespaceEvent event) { + history.add(event); + } + + @Override + public void onBeforeDropNamespace(IcebergRestCatalogEvents.BeforeDropNamespaceEvent event) { + history.add(event); + } + + @Override + public void onAfterDropNamespace(IcebergRestCatalogEvents.AfterDropNamespaceEvent event) { + history.add(event); + } + + @Override + public void onBeforeUpdateNamespaceProperties( + IcebergRestCatalogEvents.BeforeUpdateNamespacePropertiesEvent event) { + history.add(event); + } + + @Override + public void onAfterUpdateNamespaceProperties( + IcebergRestCatalogEvents.AfterUpdateNamespacePropertiesEvent event) { + history.add(event); + } + + @Override + public void onBeforeCreateTable(IcebergRestCatalogEvents.BeforeCreateTableEvent event) { + history.add(event); + } + + @Override + public void onAfterCreateTable(IcebergRestCatalogEvents.AfterCreateTableEvent event) { + history.add(event); + } + + @Override + public void onBeforeListTables(IcebergRestCatalogEvents.BeforeListTablesEvent event) { + history.add(event); + } + + @Override + public void onAfterListTables(IcebergRestCatalogEvents.AfterListTablesEvent event) { + history.add(event); + } + + @Override + public void onBeforeLoadTable(IcebergRestCatalogEvents.BeforeLoadTableEvent event) { + history.add(event); + } + + @Override + public void onAfterLoadTable(IcebergRestCatalogEvents.AfterLoadTableEvent event) { + history.add(event); + } + + @Override + public void onBeforeCheckExistsTable(IcebergRestCatalogEvents.BeforeCheckExistsTableEvent event) { + history.add(event); + } + + @Override + public void onAfterCheckExistsTable(IcebergRestCatalogEvents.AfterCheckExistsTableEvent event) { + history.add(event); + } + + @Override + public void onBeforeDropTable(IcebergRestCatalogEvents.BeforeDropTableEvent event) { + history.add(event); + } + + @Override + public void onAfterDropTable(IcebergRestCatalogEvents.AfterDropTableEvent event) { + history.add(event); + } + + @Override + public void onBeforeRegisterTable(IcebergRestCatalogEvents.BeforeRegisterTableEvent event) { + history.add(event); + } + + @Override + public void onAfterRegisterTable(IcebergRestCatalogEvents.AfterRegisterTableEvent event) { + history.add(event); + } + + @Override + public void onBeforeRenameTable(IcebergRestCatalogEvents.BeforeRenameTableEvent event) { + history.add(event); + } + + @Override + public void onAfterRenameTable(IcebergRestCatalogEvents.AfterRenameTableEvent event) { + history.add(event); + } + + @Override + public void onBeforeUpdateTable(IcebergRestCatalogEvents.BeforeUpdateTableEvent event) { + history.add(event); + } + + @Override + public void onAfterUpdateTable(IcebergRestCatalogEvents.AfterUpdateTableEvent event) { + history.add(event); + } + + @Override + public void onBeforeCreateView(IcebergRestCatalogEvents.BeforeCreateViewEvent event) { + history.add(event); + } + + @Override + public void onAfterCreateView(IcebergRestCatalogEvents.AfterCreateViewEvent event) { + history.add(event); + } + + @Override + public void onBeforeListViews(IcebergRestCatalogEvents.BeforeListViewsEvent event) { + history.add(event); + } + + @Override + public void onAfterListViews(IcebergRestCatalogEvents.AfterListViewsEvent event) { + history.add(event); + } + + @Override + public void onBeforeLoadView(IcebergRestCatalogEvents.BeforeLoadViewEvent event) { + history.add(event); + } + + @Override + public void onAfterLoadView(IcebergRestCatalogEvents.AfterLoadViewEvent event) { + history.add(event); + } + + @Override + public void onBeforeCheckExistsView(IcebergRestCatalogEvents.BeforeCheckExistsViewEvent event) { + history.add(event); + } + + @Override + public void onAfterCheckExistsView(IcebergRestCatalogEvents.AfterCheckExistsViewEvent event) { + history.add(event); + } + + @Override + public void onBeforeDropView(IcebergRestCatalogEvents.BeforeDropViewEvent event) { + history.add(event); + } + + @Override + public void onAfterDropView(IcebergRestCatalogEvents.AfterDropViewEvent event) { + history.add(event); + } + + @Override + public void onBeforeRenameView(IcebergRestCatalogEvents.BeforeRenameViewEvent event) { + history.add(event); + } + + @Override + public void onAfterRenameView(IcebergRestCatalogEvents.AfterRenameViewEvent event) { + history.add(event); + } + + @Override + public void onBeforeReplaceView(IcebergRestCatalogEvents.BeforeReplaceViewEvent event) { + history.add(event); + } + + @Override + public void onAfterReplaceView(IcebergRestCatalogEvents.AfterReplaceViewEvent event) { + history.add(event); + } + + @Override + public void onBeforeLoadCredentials(IcebergRestCatalogEvents.BeforeLoadCredentialsEvent event) { + history.add(event); + } + + @Override + public void onAfterLoadCredentials(IcebergRestCatalogEvents.AfterLoadCredentialsEvent event) { + history.add(event); + } + + @Override + public void onBeforeCommitTransaction( + IcebergRestCatalogEvents.BeforeCommitTransactionEvent event) { + history.add(event); + } + + @Override + public void onAfterCommitTransaction(IcebergRestCatalogEvents.AfterCommitTransactionEvent event) { + history.add(event); + } + + @Override + public void onBeforeSendNotification(IcebergRestCatalogEvents.BeforeSendNotificationEvent event) { + history.add(event); + } + + @Override + public void onAfterSendNotification(IcebergRestCatalogEvents.AfterSendNotificationEvent event) { + history.add(event); + } + + @Override + public void onBeforeGetConfig(IcebergRestCatalogEvents.BeforeGetConfigEvent event) { + history.add(event); + } + + @Override + public void onAfterGetConfig(IcebergRestCatalogEvents.AfterGetConfigEvent event) { + history.add(event); + } + + @Override + public void onBeforeCreatePolicy(CatalogPolicyServiceEvents.BeforeCreatePolicyEvent event) { + history.add(event); + } + + @Override + public void onAfterCreatePolicy(CatalogPolicyServiceEvents.AfterCreatePolicyEvent event) { + history.add(event); + } + + @Override + public void onBeforeListPolicies(CatalogPolicyServiceEvents.BeforeListPoliciesEvent event) { + history.add(event); + } + + @Override + public void onAfterListPolicies(CatalogPolicyServiceEvents.AfterListPoliciesEvent event) { + history.add(event); + } + + @Override + public void onBeforeLoadPolicy(CatalogPolicyServiceEvents.BeforeLoadPolicyEvent event) { + history.add(event); + } + + @Override + public void onAfterLoadPolicy(CatalogPolicyServiceEvents.AfterLoadPolicyEvent event) { + history.add(event); + } + + @Override + public void onBeforeUpdatePolicy(CatalogPolicyServiceEvents.BeforeUpdatePolicyEvent event) { + history.add(event); + } + + @Override + public void onAfterUpdatePolicy(CatalogPolicyServiceEvents.AfterUpdatePolicyEvent event) { + history.add(event); + } + + @Override + public void onBeforeDropPolicy(CatalogPolicyServiceEvents.BeforeDropPolicyEvent event) { + history.add(event); + } + + @Override + public void onAfterDropPolicy(CatalogPolicyServiceEvents.AfterDropPolicyEvent event) { + history.add(event); + } + + @Override + public void onBeforeAttachPolicy(CatalogPolicyServiceEvents.BeforeAttachPolicyEvent event) { + history.add(event); + } + + @Override + public void onAfterAttachPolicy(CatalogPolicyServiceEvents.AfterAttachPolicyEvent event) { + history.add(event); + } + + @Override + public void onBeforeDetachPolicy(CatalogPolicyServiceEvents.BeforeDetachPolicyEvent event) { + history.add(event); + } + + @Override + public void onAfterDetachPolicy(CatalogPolicyServiceEvents.AfterDetachPolicyEvent event) { + history.add(event); + } + + @Override + public void onBeforeGetApplicablePolicies( + CatalogPolicyServiceEvents.BeforeGetApplicablePoliciesEvent event) { + history.add(event); + } + + @Override + public void onAfterGetApplicablePolicies( + CatalogPolicyServiceEvents.AfterGetApplicablePoliciesEvent event) { + history.add(event); + } + + @Override + public void onBeforeCreateGenericTable( + CatalogGenericTableServiceEvents.BeforeCreateGenericTableEvent event) { + history.add(event); + } + + @Override + public void onAfterCreateGenericTable( + CatalogGenericTableServiceEvents.AfterCreateGenericTableEvent event) { + history.add(event); + } + + @Override + public void onBeforeDropGenericTable( + CatalogGenericTableServiceEvents.BeforeDropGenericTableEvent event) { + history.add(event); + } + + @Override + public void onAfterDropGenericTable( + CatalogGenericTableServiceEvents.AfterDropGenericTableEvent event) { + history.add(event); + } + + @Override + public void onBeforeListGenericTables( + CatalogGenericTableServiceEvents.BeforeListGenericTablesEvent event) { + history.add(event); + } + + @Override + public void onAfterListGenericTables( + CatalogGenericTableServiceEvents.AfterListGenericTablesEvent event) { + history.add(event); + } + + @Override + public void onBeforeLoadGenericTable( + CatalogGenericTableServiceEvents.BeforeLoadGenericTableEvent event) { + history.add(event); + } + + @Override + public void onAfterLoadGenericTable( + CatalogGenericTableServiceEvents.AfterLoadGenericTableEvent event) { + history.add(event); + } + @Override public void onBeforeAttemptTask(BeforeAttemptTaskEvent event) { history.add(event); From 9d9b48d0c9fab47c11879c793ddfde25a9db4aa4 Mon Sep 17 00:00:00 2001 From: Alexandre Dutra Date: Tue, 23 Sep 2025 18:51:23 +0200 Subject: [PATCH 2/2] add note + tests to ensure PolarisEventListener is well-formed --- .../PolarisCatalogsEventServiceDelegator.java | 4 +- .../service/events/CatalogsServiceEvents.java | 4 +- .../listeners/PolarisEventListener.java | 281 ++++--------- .../listeners/TestPolarisEventListener.java | 384 +++++++++++++++++- .../listeners/PolarisEventListenerTest.java | 85 ++++ .../TestPolarisEventListenerTest.java | 40 ++ 6 files changed, 583 insertions(+), 215 deletions(-) create mode 100644 runtime/service/src/test/java/org/apache/polaris/service/events/listeners/PolarisEventListenerTest.java create mode 100644 runtime/service/src/test/java/org/apache/polaris/service/events/listeners/TestPolarisEventListenerTest.java 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 f84cafa043..1695334ed7 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 @@ -91,9 +91,9 @@ public Response updateCatalog( @Override public Response listCatalogs(RealmContext realmContext, SecurityContext securityContext) { - polarisEventListener.onBeforeListCatalog(new CatalogsServiceEvents.BeforeListCatalogEvent()); + polarisEventListener.onBeforeListCatalogs(new CatalogsServiceEvents.BeforeListCatalogsEvent()); Response resp = delegate.listCatalogs(realmContext, securityContext); - polarisEventListener.onAfterListCatalog(new CatalogsServiceEvents.AfterListCatalogEvent()); + polarisEventListener.onAfterListCatalogs(new CatalogsServiceEvents.AfterListCatalogsEvent()); return resp; } diff --git a/runtime/service/src/main/java/org/apache/polaris/service/events/CatalogsServiceEvents.java b/runtime/service/src/main/java/org/apache/polaris/service/events/CatalogsServiceEvents.java index 6242d91c34..918e34c708 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/events/CatalogsServiceEvents.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/events/CatalogsServiceEvents.java @@ -46,9 +46,9 @@ public record BeforeUpdateCatalogEvent(String catalogName, UpdateCatalogRequest public record AfterUpdateCatalogEvent(Catalog catalog) implements PolarisEvent {} - public record BeforeListCatalogEvent() implements PolarisEvent {} + public record BeforeListCatalogsEvent() implements PolarisEvent {} - public record AfterListCatalogEvent() implements PolarisEvent {} + public record AfterListCatalogsEvent() implements PolarisEvent {} public record BeforeCreateCatalogRoleEvent(String catalogName, String catalogRoleName) implements PolarisEvent {} 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 5d38021bc2..113dcd0d91 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 @@ -33,522 +33,399 @@ * Event details are documented under the event objects themselves. */ public interface PolarisEventListener { - /** {@link BeforeLimitRequestRateEvent} */ - default void onBeforeLimitRequestRate(BeforeLimitRequestRateEvent event) {} - - /** {@link IcebergRestCatalogEvents.BeforeCommitTableEvent} */ - default void onBeforeCommitTable(IcebergRestCatalogEvents.BeforeCommitTableEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterCommitTableEvent} */ - default void onAfterCommitTable(IcebergRestCatalogEvents.AfterCommitTableEvent event) {} + /* + API Compatibility Note: any new methods added to this interface must have a default + implementation in order to preserve binary compatibility. + */ - /** {@link IcebergRestCatalogEvents.BeforeCommitViewEvent} */ - default void onBeforeCommitView(IcebergRestCatalogEvents.BeforeCommitViewEvent event) {} - - /** {@link IcebergRestCatalogEvents.AfterCommitViewEvent} */ - default void onAfterCommitView(IcebergRestCatalogEvents.AfterCommitViewEvent event) {} - - /** {@link IcebergRestCatalogEvents.BeforeRefreshTableEvent} */ - default void onBeforeRefreshTable(IcebergRestCatalogEvents.BeforeRefreshTableEvent event) {} - - /** {@link IcebergRestCatalogEvents.AfterRefreshTableEvent} */ - default void onAfterRefreshTable(IcebergRestCatalogEvents.AfterRefreshTableEvent event) {} - - /** {@link IcebergRestCatalogEvents.BeforeRefreshViewEvent} */ - default void onBeforeRefreshView(IcebergRestCatalogEvents.BeforeRefreshViewEvent event) {} + // ============= Catalog Events ============= - /** {@link IcebergRestCatalogEvents.AfterRefreshViewEvent} */ - default void onAfterRefreshView(IcebergRestCatalogEvents.AfterRefreshViewEvent event) {} - - /** {@link BeforeAttemptTaskEvent} */ - default void onBeforeAttemptTask(BeforeAttemptTaskEvent event) {} - - /** {@link AfterAttemptTaskEvent} */ - default void onAfterAttemptTask(AfterAttemptTaskEvent event) {} - - // Iceberg REST Catalog Namespace Events - /** {@link IcebergRestCatalogEvents.BeforeCreateNamespaceEvent} */ - default void onBeforeCreateNamespace(IcebergRestCatalogEvents.BeforeCreateNamespaceEvent event) {} - - /** {@link IcebergRestCatalogEvents.AfterCreateNamespaceEvent} */ - default void onAfterCreateNamespace(IcebergRestCatalogEvents.AfterCreateNamespaceEvent event) {} - - /** {@link CatalogsServiceEvents.BeforeCreateCatalogEvent} */ default void onBeforeCreateCatalog(CatalogsServiceEvents.BeforeCreateCatalogEvent event) {} - /** {@link CatalogsServiceEvents.AfterCreateCatalogEvent} */ default void onAfterCreateCatalog(CatalogsServiceEvents.AfterCreateCatalogEvent event) {} - /** {@link CatalogsServiceEvents.BeforeDeleteCatalogEvent} */ default void onBeforeDeleteCatalog(CatalogsServiceEvents.BeforeDeleteCatalogEvent event) {} - /** {@link CatalogsServiceEvents.AfterDeleteCatalogEvent} */ default void onAfterDeleteCatalog(CatalogsServiceEvents.AfterDeleteCatalogEvent event) {} - /** {@link CatalogsServiceEvents.BeforeGetCatalogEvent} */ default void onBeforeGetCatalog(CatalogsServiceEvents.BeforeGetCatalogEvent event) {} - /** {@link CatalogsServiceEvents.AfterGetCatalogEvent} */ default void onAfterGetCatalog(CatalogsServiceEvents.AfterGetCatalogEvent event) {} - /** {@link CatalogsServiceEvents.BeforeUpdateCatalogEvent} */ default void onBeforeUpdateCatalog(CatalogsServiceEvents.BeforeUpdateCatalogEvent event) {} - /** {@link CatalogsServiceEvents.AfterUpdateCatalogEvent} */ default void onAfterUpdateCatalog(CatalogsServiceEvents.AfterUpdateCatalogEvent event) {} - /** {@link CatalogsServiceEvents.BeforeListCatalogEvent} */ - default void onBeforeListCatalog(CatalogsServiceEvents.BeforeListCatalogEvent event) {} + default void onBeforeListCatalogs(CatalogsServiceEvents.BeforeListCatalogsEvent event) {} + + default void onAfterListCatalogs(CatalogsServiceEvents.AfterListCatalogsEvent event) {} - /** {@link CatalogsServiceEvents.AfterListCatalogEvent} */ - default void onAfterListCatalog(CatalogsServiceEvents.AfterListCatalogEvent event) {} + // ============= Principal Events ============= - /** {@link PrincipalsServiceEvents.BeforeCreatePrincipalEvent} */ default void onBeforeCreatePrincipal(PrincipalsServiceEvents.BeforeCreatePrincipalEvent event) {} - /** {@link PrincipalsServiceEvents.AfterCreatePrincipalEvent} */ default void onAfterCreatePrincipal(PrincipalsServiceEvents.AfterCreatePrincipalEvent event) {} - /** {@link PrincipalsServiceEvents.BeforeDeletePrincipalEvent} */ default void onBeforeDeletePrincipal(PrincipalsServiceEvents.BeforeDeletePrincipalEvent event) {} - /** {@link PrincipalsServiceEvents.AfterDeletePrincipalEvent} */ default void onAfterDeletePrincipal(PrincipalsServiceEvents.AfterDeletePrincipalEvent event) {} - /** {@link PrincipalsServiceEvents.BeforeGetPrincipalEvent} */ default void onBeforeGetPrincipal(PrincipalsServiceEvents.BeforeGetPrincipalEvent event) {} - /** {@link PrincipalsServiceEvents.AfterGetPrincipalEvent} */ default void onAfterGetPrincipal(PrincipalsServiceEvents.AfterGetPrincipalEvent event) {} - /** {@link PrincipalsServiceEvents.BeforeUpdatePrincipalEvent} */ default void onBeforeUpdatePrincipal(PrincipalsServiceEvents.BeforeUpdatePrincipalEvent event) {} - /** {@link PrincipalsServiceEvents.AfterUpdatePrincipalEvent} */ default void onAfterUpdatePrincipal(PrincipalsServiceEvents.AfterUpdatePrincipalEvent event) {} - /** {@link PrincipalsServiceEvents.BeforeRotateCredentialsEvent} */ default void onBeforeRotateCredentials( PrincipalsServiceEvents.BeforeRotateCredentialsEvent event) {} - /** {@link PrincipalsServiceEvents.AfterRotateCredentialsEvent} */ default void onAfterRotateCredentials( PrincipalsServiceEvents.AfterRotateCredentialsEvent event) {} - /** {@link PrincipalsServiceEvents.BeforeListPrincipalsEvent} */ default void onBeforeListPrincipals(PrincipalsServiceEvents.BeforeListPrincipalsEvent event) {} - /** {@link PrincipalsServiceEvents.AfterListPrincipalsEvent} */ default void onAfterListPrincipals(PrincipalsServiceEvents.AfterListPrincipalsEvent event) {} - /** {@link PrincipalsServiceEvents.BeforeResetCredentialsEvent} */ default void onBeforeResetCredentials( PrincipalsServiceEvents.BeforeResetCredentialsEvent event) {} - /** {@link PrincipalsServiceEvents.AfterResetCredentialsEvent} */ default void onAfterResetCredentials(PrincipalsServiceEvents.AfterResetCredentialsEvent event) {} - /** {@link PrincipalRolesServiceEvents.BeforeCreatePrincipalRoleEvent} */ + default void onBeforeAssignPrincipalRole( + PrincipalsServiceEvents.BeforeAssignPrincipalRoleEvent event) {} + + default void onAfterAssignPrincipalRole( + PrincipalsServiceEvents.AfterAssignPrincipalRoleEvent event) {} + + default void onBeforeRevokePrincipalRole( + PrincipalsServiceEvents.BeforeRevokePrincipalRoleEvent event) {} + + default void onAfterRevokePrincipalRole( + PrincipalsServiceEvents.AfterRevokePrincipalRoleEvent event) {} + + default void onBeforeListAssignedPrincipalRoles( + PrincipalsServiceEvents.BeforeListAssignedPrincipalRolesEvent event) {} + + default void onAfterListAssignedPrincipalRoles( + PrincipalsServiceEvents.AfterListAssignedPrincipalRolesEvent event) {} + + // ============= Principal Role Events ============= + default void onBeforeCreatePrincipalRole( PrincipalRolesServiceEvents.BeforeCreatePrincipalRoleEvent event) {} - /** {@link PrincipalRolesServiceEvents.AfterCreatePrincipalRoleEvent} */ default void onAfterCreatePrincipalRole( PrincipalRolesServiceEvents.AfterCreatePrincipalRoleEvent event) {} - /** {@link PrincipalRolesServiceEvents.BeforeDeletePrincipalRoleEvent} */ default void onBeforeDeletePrincipalRole( PrincipalRolesServiceEvents.BeforeDeletePrincipalRoleEvent event) {} - /** {@link PrincipalRolesServiceEvents.AfterDeletePrincipalRoleEvent} */ default void onAfterDeletePrincipalRole( PrincipalRolesServiceEvents.AfterDeletePrincipalRoleEvent event) {} - /** {@link PrincipalRolesServiceEvents.BeforeGetPrincipalRoleEvent} */ default void onBeforeGetPrincipalRole( PrincipalRolesServiceEvents.BeforeGetPrincipalRoleEvent event) {} - /** {@link PrincipalRolesServiceEvents.AfterGetPrincipalRoleEvent} */ default void onAfterGetPrincipalRole( PrincipalRolesServiceEvents.AfterGetPrincipalRoleEvent event) {} - /** {@link PrincipalRolesServiceEvents.BeforeUpdatePrincipalRoleEvent} */ default void onBeforeUpdatePrincipalRole( PrincipalRolesServiceEvents.BeforeUpdatePrincipalRoleEvent event) {} - /** {@link PrincipalRolesServiceEvents.AfterUpdatePrincipalRoleEvent} */ default void onAfterUpdatePrincipalRole( PrincipalRolesServiceEvents.AfterUpdatePrincipalRoleEvent event) {} - /** {@link PrincipalRolesServiceEvents.BeforeListPrincipalRolesEvent} */ default void onBeforeListPrincipalRoles( PrincipalRolesServiceEvents.BeforeListPrincipalRolesEvent event) {} - /** {@link PrincipalRolesServiceEvents.AfterListPrincipalRolesEvent} */ default void onAfterListPrincipalRoles( PrincipalRolesServiceEvents.AfterListPrincipalRolesEvent event) {} - /** {@link CatalogsServiceEvents.BeforeCreateCatalogRoleEvent} */ + // ============= Catalog Role Events ============= + default void onBeforeCreateCatalogRole( CatalogsServiceEvents.BeforeCreateCatalogRoleEvent event) {} - /** {@link CatalogsServiceEvents.AfterCreateCatalogRoleEvent} */ default void onAfterCreateCatalogRole(CatalogsServiceEvents.AfterCreateCatalogRoleEvent event) {} - /** {@link CatalogsServiceEvents.BeforeDeleteCatalogRoleEvent} */ default void onBeforeDeleteCatalogRole( CatalogsServiceEvents.BeforeDeleteCatalogRoleEvent event) {} - /** {@link CatalogsServiceEvents.AfterDeleteCatalogRoleEvent} */ default void onAfterDeleteCatalogRole(CatalogsServiceEvents.AfterDeleteCatalogRoleEvent event) {} - /** {@link CatalogsServiceEvents.BeforeGetCatalogRoleEvent} */ default void onBeforeGetCatalogRole(CatalogsServiceEvents.BeforeGetCatalogRoleEvent event) {} - /** {@link CatalogsServiceEvents.AfterGetCatalogRoleEvent} */ default void onAfterGetCatalogRole(CatalogsServiceEvents.AfterGetCatalogRoleEvent event) {} - /** {@link CatalogsServiceEvents.BeforeUpdateCatalogRoleEvent} */ default void onBeforeUpdateCatalogRole( CatalogsServiceEvents.BeforeUpdateCatalogRoleEvent event) {} - /** {@link CatalogsServiceEvents.AfterUpdateCatalogRoleEvent} */ default void onAfterUpdateCatalogRole(CatalogsServiceEvents.AfterUpdateCatalogRoleEvent event) {} - /** {@link CatalogsServiceEvents.BeforeListCatalogRolesEvent} */ default void onBeforeListCatalogRoles(CatalogsServiceEvents.BeforeListCatalogRolesEvent event) {} - /** {@link CatalogsServiceEvents.AfterListCatalogRolesEvent} */ default void onAfterListCatalogRoles(CatalogsServiceEvents.AfterListCatalogRolesEvent event) {} - /** {@link PrincipalsServiceEvents.BeforeAssignPrincipalRoleEvent} */ - default void onBeforeAssignPrincipalRole( - PrincipalsServiceEvents.BeforeAssignPrincipalRoleEvent event) {} - - /** {@link PrincipalsServiceEvents.AfterAssignPrincipalRoleEvent} */ - default void onAfterAssignPrincipalRole( - PrincipalsServiceEvents.AfterAssignPrincipalRoleEvent event) {} - - /** {@link PrincipalsServiceEvents.BeforeRevokePrincipalRoleEvent} */ - default void onBeforeRevokePrincipalRole( - PrincipalsServiceEvents.BeforeRevokePrincipalRoleEvent event) {} - - /** {@link PrincipalsServiceEvents.AfterRevokePrincipalRoleEvent} */ - default void onAfterRevokePrincipalRole( - PrincipalsServiceEvents.AfterRevokePrincipalRoleEvent event) {} - - /** {@link PrincipalsServiceEvents.BeforeListAssignedPrincipalRolesEvent} */ - default void onBeforeListAssignedPrincipalRoles( - PrincipalsServiceEvents.BeforeListAssignedPrincipalRolesEvent event) {} - - /** {@link PrincipalsServiceEvents.AfterListAssignedPrincipalRolesEvent} */ - default void onAfterListAssignedPrincipalRoles( - PrincipalsServiceEvents.AfterListAssignedPrincipalRolesEvent event) {} - - /** {@link PrincipalRolesServiceEvents.BeforeAssignCatalogRoleToPrincipalRoleEvent} */ default void onBeforeAssignCatalogRoleToPrincipalRole( PrincipalRolesServiceEvents.BeforeAssignCatalogRoleToPrincipalRoleEvent event) {} - /** {@link PrincipalRolesServiceEvents.AfterAssignCatalogRoleToPrincipalRoleEvent} */ default void onAfterAssignCatalogRoleToPrincipalRole( PrincipalRolesServiceEvents.AfterAssignCatalogRoleToPrincipalRoleEvent event) {} - /** {@link PrincipalRolesServiceEvents.BeforeRevokeCatalogRoleFromPrincipalRoleEvent} */ default void onBeforeRevokeCatalogRoleFromPrincipalRole( PrincipalRolesServiceEvents.BeforeRevokeCatalogRoleFromPrincipalRoleEvent event) {} - /** {@link PrincipalRolesServiceEvents.AfterRevokeCatalogRoleFromPrincipalRoleEvent} */ default void onAfterRevokeCatalogRoleFromPrincipalRole( PrincipalRolesServiceEvents.AfterRevokeCatalogRoleFromPrincipalRoleEvent event) {} - /** {@link PrincipalRolesServiceEvents.BeforeListAssigneePrincipalsForPrincipalRoleEvent} */ default void onBeforeListAssigneePrincipalsForPrincipalRole( PrincipalRolesServiceEvents.BeforeListAssigneePrincipalsForPrincipalRoleEvent event) {} - /** {@link PrincipalRolesServiceEvents.AfterListAssigneePrincipalsForPrincipalRoleEvent} */ default void onAfterListAssigneePrincipalsForPrincipalRole( PrincipalRolesServiceEvents.AfterListAssigneePrincipalsForPrincipalRoleEvent event) {} - /** {@link PrincipalRolesServiceEvents.BeforeListCatalogRolesForPrincipalRoleEvent} */ default void onBeforeListCatalogRolesForPrincipalRole( PrincipalRolesServiceEvents.BeforeListCatalogRolesForPrincipalRoleEvent event) {} - /** {@link PrincipalRolesServiceEvents.AfterListCatalogRolesForPrincipalRoleEvent} */ default void onAfterListCatalogRolesForPrincipalRole( PrincipalRolesServiceEvents.AfterListCatalogRolesForPrincipalRoleEvent event) {} - /** {@link CatalogsServiceEvents.BeforeAddGrantToCatalogRoleEvent} */ default void onBeforeAddGrantToCatalogRole( CatalogsServiceEvents.BeforeAddGrantToCatalogRoleEvent event) {} - /** {@link CatalogsServiceEvents.AfterAddGrantToCatalogRoleEvent} */ default void onAfterAddGrantToCatalogRole( CatalogsServiceEvents.AfterAddGrantToCatalogRoleEvent event) {} - /** {@link CatalogsServiceEvents.BeforeRevokeGrantFromCatalogRoleEvent} */ default void onBeforeRevokeGrantFromCatalogRole( CatalogsServiceEvents.BeforeRevokeGrantFromCatalogRoleEvent event) {} - /** {@link CatalogsServiceEvents.AfterRevokeGrantFromCatalogRoleEvent} */ default void onAfterRevokeGrantFromCatalogRole( CatalogsServiceEvents.AfterRevokeGrantFromCatalogRoleEvent event) {} - /** {@link CatalogsServiceEvents.BeforeListAssigneePrincipalRolesForCatalogRoleEvent} */ default void onBeforeListAssigneePrincipalRolesForCatalogRole( CatalogsServiceEvents.BeforeListAssigneePrincipalRolesForCatalogRoleEvent event) {} - /** {@link CatalogsServiceEvents.AfterListAssigneePrincipalRolesForCatalogRoleEvent} */ default void onAfterListAssigneePrincipalRolesForCatalogRole( CatalogsServiceEvents.AfterListAssigneePrincipalRolesForCatalogRoleEvent event) {} - /** {@link CatalogsServiceEvents.BeforeListGrantsForCatalogRoleEvent} */ default void onBeforeListGrantsForCatalogRole( CatalogsServiceEvents.BeforeListGrantsForCatalogRoleEvent event) {} - /** {@link CatalogsServiceEvents.AfterListGrantsForCatalogRoleEvent} */ default void onAfterListGrantsForCatalogRole( CatalogsServiceEvents.AfterListGrantsForCatalogRoleEvent event) {} - /** {@link IcebergRestCatalogEvents.BeforeListNamespacesEvent} */ + // ============= Iceberg REST Namespace Events ============= + + default void onBeforeCreateNamespace(IcebergRestCatalogEvents.BeforeCreateNamespaceEvent event) {} + + default void onAfterCreateNamespace(IcebergRestCatalogEvents.AfterCreateNamespaceEvent event) {} + default void onBeforeListNamespaces(IcebergRestCatalogEvents.BeforeListNamespacesEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterListNamespacesEvent} */ default void onAfterListNamespaces(IcebergRestCatalogEvents.AfterListNamespacesEvent event) {} - /** {@link IcebergRestCatalogEvents.BeforeLoadNamespaceMetadataEvent} */ default void onBeforeLoadNamespaceMetadata( IcebergRestCatalogEvents.BeforeLoadNamespaceMetadataEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterLoadNamespaceMetadataEvent} */ default void onAfterLoadNamespaceMetadata( IcebergRestCatalogEvents.AfterLoadNamespaceMetadataEvent event) {} - /** {@link IcebergRestCatalogEvents.BeforeCheckExistsNamespaceEvent} */ default void onBeforeCheckExistsNamespace( IcebergRestCatalogEvents.BeforeCheckExistsNamespaceEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterCheckExistsNamespaceEvent} */ default void onAfterCheckExistsNamespace( IcebergRestCatalogEvents.AfterCheckExistsNamespaceEvent event) {} - /** {@link IcebergRestCatalogEvents.BeforeDropNamespaceEvent} */ default void onBeforeDropNamespace(IcebergRestCatalogEvents.BeforeDropNamespaceEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterDropNamespaceEvent} */ default void onAfterDropNamespace(IcebergRestCatalogEvents.AfterDropNamespaceEvent event) {} - /** {@link IcebergRestCatalogEvents.BeforeUpdateNamespacePropertiesEvent} */ default void onBeforeUpdateNamespaceProperties( IcebergRestCatalogEvents.BeforeUpdateNamespacePropertiesEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterUpdateNamespacePropertiesEvent} */ default void onAfterUpdateNamespaceProperties( IcebergRestCatalogEvents.AfterUpdateNamespacePropertiesEvent event) {} - // Iceberg REST Catalog Table Events - /** {@link IcebergRestCatalogEvents.BeforeCreateTableEvent} */ + // ============= Iceberg REST Table Events ============= + default void onBeforeCreateTable(IcebergRestCatalogEvents.BeforeCreateTableEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterCreateTableEvent} */ default void onAfterCreateTable(IcebergRestCatalogEvents.AfterCreateTableEvent event) {} - /** {@link IcebergRestCatalogEvents.BeforeListTablesEvent} */ + default void onBeforeCommitTable(IcebergRestCatalogEvents.BeforeCommitTableEvent event) {} + + default void onAfterCommitTable(IcebergRestCatalogEvents.AfterCommitTableEvent event) {} + + default void onBeforeRefreshTable(IcebergRestCatalogEvents.BeforeRefreshTableEvent event) {} + + default void onAfterRefreshTable(IcebergRestCatalogEvents.AfterRefreshTableEvent event) {} + default void onBeforeListTables(IcebergRestCatalogEvents.BeforeListTablesEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterListTablesEvent} */ default void onAfterListTables(IcebergRestCatalogEvents.AfterListTablesEvent event) {} - /** {@link IcebergRestCatalogEvents.BeforeLoadTableEvent} */ default void onBeforeLoadTable(IcebergRestCatalogEvents.BeforeLoadTableEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterLoadTableEvent} */ default void onAfterLoadTable(IcebergRestCatalogEvents.AfterLoadTableEvent event) {} - /** {@link IcebergRestCatalogEvents.BeforeCheckExistsTableEvent} */ default void onBeforeCheckExistsTable( IcebergRestCatalogEvents.BeforeCheckExistsTableEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterCheckExistsTableEvent} */ default void onAfterCheckExistsTable(IcebergRestCatalogEvents.AfterCheckExistsTableEvent event) {} - /** {@link IcebergRestCatalogEvents.BeforeDropTableEvent} */ default void onBeforeDropTable(IcebergRestCatalogEvents.BeforeDropTableEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterDropTableEvent} */ default void onAfterDropTable(IcebergRestCatalogEvents.AfterDropTableEvent event) {} - /** {@link IcebergRestCatalogEvents.BeforeRegisterTableEvent} */ default void onBeforeRegisterTable(IcebergRestCatalogEvents.BeforeRegisterTableEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterRegisterTableEvent} */ default void onAfterRegisterTable(IcebergRestCatalogEvents.AfterRegisterTableEvent event) {} - /** {@link IcebergRestCatalogEvents.BeforeRenameTableEvent} */ default void onBeforeRenameTable(IcebergRestCatalogEvents.BeforeRenameTableEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterRenameTableEvent} */ default void onAfterRenameTable(IcebergRestCatalogEvents.AfterRenameTableEvent event) {} - /** {@link IcebergRestCatalogEvents.BeforeUpdateTableEvent} */ default void onBeforeUpdateTable(IcebergRestCatalogEvents.BeforeUpdateTableEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterUpdateTableEvent} */ default void onAfterUpdateTable(IcebergRestCatalogEvents.AfterUpdateTableEvent event) {} - // Iceberg REST Catalog View Events - /** {@link IcebergRestCatalogEvents.BeforeCreateViewEvent} */ + // ============ Iceberg REST View Events ============= + default void onBeforeCreateView(IcebergRestCatalogEvents.BeforeCreateViewEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterCreateViewEvent} */ default void onAfterCreateView(IcebergRestCatalogEvents.AfterCreateViewEvent event) {} - /** {@link IcebergRestCatalogEvents.BeforeListViewsEvent} */ + default void onBeforeCommitView(IcebergRestCatalogEvents.BeforeCommitViewEvent event) {} + + default void onAfterCommitView(IcebergRestCatalogEvents.AfterCommitViewEvent event) {} + + default void onBeforeRefreshView(IcebergRestCatalogEvents.BeforeRefreshViewEvent event) {} + + default void onAfterRefreshView(IcebergRestCatalogEvents.AfterRefreshViewEvent event) {} + default void onBeforeListViews(IcebergRestCatalogEvents.BeforeListViewsEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterListViewsEvent} */ default void onAfterListViews(IcebergRestCatalogEvents.AfterListViewsEvent event) {} - /** {@link IcebergRestCatalogEvents.BeforeLoadViewEvent} */ default void onBeforeLoadView(IcebergRestCatalogEvents.BeforeLoadViewEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterLoadViewEvent} */ default void onAfterLoadView(IcebergRestCatalogEvents.AfterLoadViewEvent event) {} - /** {@link IcebergRestCatalogEvents.BeforeCheckExistsViewEvent} */ default void onBeforeCheckExistsView(IcebergRestCatalogEvents.BeforeCheckExistsViewEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterCheckExistsViewEvent} */ default void onAfterCheckExistsView(IcebergRestCatalogEvents.AfterCheckExistsViewEvent event) {} - /** {@link IcebergRestCatalogEvents.BeforeDropViewEvent} */ default void onBeforeDropView(IcebergRestCatalogEvents.BeforeDropViewEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterDropViewEvent} */ default void onAfterDropView(IcebergRestCatalogEvents.AfterDropViewEvent event) {} - /** {@link IcebergRestCatalogEvents.BeforeRenameViewEvent} */ default void onBeforeRenameView(IcebergRestCatalogEvents.BeforeRenameViewEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterRenameViewEvent} */ default void onAfterRenameView(IcebergRestCatalogEvents.AfterRenameViewEvent event) {} - /** {@link IcebergRestCatalogEvents.BeforeReplaceViewEvent} */ default void onBeforeReplaceView(IcebergRestCatalogEvents.BeforeReplaceViewEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterReplaceViewEvent} */ default void onAfterReplaceView(IcebergRestCatalogEvents.AfterReplaceViewEvent event) {} - // Iceberg REST Catalog Credential Events - /** {@link IcebergRestCatalogEvents.BeforeLoadCredentialsEvent} */ + // ============ Iceberg REST Credential Events ============= + default void onBeforeLoadCredentials(IcebergRestCatalogEvents.BeforeLoadCredentialsEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterLoadCredentialsEvent} */ default void onAfterLoadCredentials(IcebergRestCatalogEvents.AfterLoadCredentialsEvent event) {} - // Iceberg REST Catalog Transactions Events - /** {@link IcebergRestCatalogEvents.BeforeCommitTransactionEvent} */ + // ============ Iceberg REST Transaction Events ============= + default void onBeforeCommitTransaction( IcebergRestCatalogEvents.BeforeCommitTransactionEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterCommitTransactionEvent} */ default void onAfterCommitTransaction( IcebergRestCatalogEvents.AfterCommitTransactionEvent event) {} - // Iceberg REST Catalog Notification Events - /** {@link IcebergRestCatalogEvents.BeforeSendNotificationEvent} */ + // ============ Iceberg REST Notification Events ============= + default void onBeforeSendNotification( IcebergRestCatalogEvents.BeforeSendNotificationEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterSendNotificationEvent} */ default void onAfterSendNotification(IcebergRestCatalogEvents.AfterSendNotificationEvent event) {} - // Iceberg REST Catalog Configuration Events - /** {@link IcebergRestCatalogEvents.BeforeGetConfigEvent} */ + // ============ Iceberg REST Configuration Events ============= + default void onBeforeGetConfig(IcebergRestCatalogEvents.BeforeGetConfigEvent event) {} - /** {@link IcebergRestCatalogEvents.AfterGetConfigEvent} */ default void onAfterGetConfig(IcebergRestCatalogEvents.AfterGetConfigEvent event) {} - // Catalog Policy Service Events - /** {@link CatalogPolicyServiceEvents.BeforeCreatePolicyEvent} */ + // ============= Policy Events ============= + default void onBeforeCreatePolicy(CatalogPolicyServiceEvents.BeforeCreatePolicyEvent event) {} - /** {@link CatalogPolicyServiceEvents.AfterCreatePolicyEvent} */ default void onAfterCreatePolicy(CatalogPolicyServiceEvents.AfterCreatePolicyEvent event) {} - /** {@link CatalogPolicyServiceEvents.BeforeListPoliciesEvent} */ default void onBeforeListPolicies(CatalogPolicyServiceEvents.BeforeListPoliciesEvent event) {} - /** {@link CatalogPolicyServiceEvents.AfterListPoliciesEvent} */ default void onAfterListPolicies(CatalogPolicyServiceEvents.AfterListPoliciesEvent event) {} - /** {@link CatalogPolicyServiceEvents.BeforeLoadPolicyEvent} */ default void onBeforeLoadPolicy(CatalogPolicyServiceEvents.BeforeLoadPolicyEvent event) {} - /** {@link CatalogPolicyServiceEvents.AfterLoadPolicyEvent} */ default void onAfterLoadPolicy(CatalogPolicyServiceEvents.AfterLoadPolicyEvent event) {} - /** {@link CatalogPolicyServiceEvents.BeforeUpdatePolicyEvent} */ default void onBeforeUpdatePolicy(CatalogPolicyServiceEvents.BeforeUpdatePolicyEvent event) {} - /** {@link CatalogPolicyServiceEvents.AfterUpdatePolicyEvent} */ default void onAfterUpdatePolicy(CatalogPolicyServiceEvents.AfterUpdatePolicyEvent event) {} - /** {@link CatalogPolicyServiceEvents.BeforeDropPolicyEvent} */ default void onBeforeDropPolicy(CatalogPolicyServiceEvents.BeforeDropPolicyEvent event) {} - /** {@link CatalogPolicyServiceEvents.AfterDropPolicyEvent} */ default void onAfterDropPolicy(CatalogPolicyServiceEvents.AfterDropPolicyEvent event) {} - /** {@link CatalogPolicyServiceEvents.BeforeAttachPolicyEvent} */ default void onBeforeAttachPolicy(CatalogPolicyServiceEvents.BeforeAttachPolicyEvent event) {} - /** {@link CatalogPolicyServiceEvents.AfterAttachPolicyEvent} */ default void onAfterAttachPolicy(CatalogPolicyServiceEvents.AfterAttachPolicyEvent event) {} - /** {@link CatalogPolicyServiceEvents.BeforeDetachPolicyEvent} */ default void onBeforeDetachPolicy(CatalogPolicyServiceEvents.BeforeDetachPolicyEvent event) {} - /** {@link CatalogPolicyServiceEvents.AfterDetachPolicyEvent} */ default void onAfterDetachPolicy(CatalogPolicyServiceEvents.AfterDetachPolicyEvent event) {} - /** {@link CatalogPolicyServiceEvents.BeforeGetApplicablePoliciesEvent} */ default void onBeforeGetApplicablePolicies( CatalogPolicyServiceEvents.BeforeGetApplicablePoliciesEvent event) {} - /** {@link CatalogPolicyServiceEvents.AfterGetApplicablePoliciesEvent} */ default void onAfterGetApplicablePolicies( CatalogPolicyServiceEvents.AfterGetApplicablePoliciesEvent event) {} - /** {@link CatalogGenericTableServiceEvents.BeforeCreateGenericTableEvent} */ + // ============= Generic Table Events ============= + default void onBeforeCreateGenericTable( CatalogGenericTableServiceEvents.BeforeCreateGenericTableEvent event) {} - /** {@link CatalogGenericTableServiceEvents.AfterCreateGenericTableEvent} */ default void onAfterCreateGenericTable( CatalogGenericTableServiceEvents.AfterCreateGenericTableEvent event) {} - /** {@link CatalogGenericTableServiceEvents.BeforeDropGenericTableEvent} */ default void onBeforeDropGenericTable( CatalogGenericTableServiceEvents.BeforeDropGenericTableEvent event) {} - /** {@link CatalogGenericTableServiceEvents.AfterDropGenericTableEvent} */ default void onAfterDropGenericTable( CatalogGenericTableServiceEvents.AfterDropGenericTableEvent event) {} - /** {@link CatalogGenericTableServiceEvents.BeforeListGenericTablesEvent} */ default void onBeforeListGenericTables( CatalogGenericTableServiceEvents.BeforeListGenericTablesEvent event) {} - /** {@link CatalogGenericTableServiceEvents.AfterListGenericTablesEvent} */ default void onAfterListGenericTables( CatalogGenericTableServiceEvents.AfterListGenericTablesEvent event) {} - /** {@link CatalogGenericTableServiceEvents.BeforeLoadGenericTableEvent} */ default void onBeforeLoadGenericTable( CatalogGenericTableServiceEvents.BeforeLoadGenericTableEvent event) {} - /** {@link CatalogGenericTableServiceEvents.AfterLoadGenericTableEvent} */ default void onAfterLoadGenericTable( CatalogGenericTableServiceEvents.AfterLoadGenericTableEvent event) {} + + // ============= Task Execution Events ============= + + default void onBeforeAttemptTask(BeforeAttemptTaskEvent event) {} + + default void onAfterAttemptTask(AfterAttemptTaskEvent event) {} + + // ============= Rate Limiting Events ============= + + default void onBeforeLimitRequestRate(BeforeLimitRequestRateEvent event) {} } diff --git a/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/TestPolarisEventListener.java b/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/TestPolarisEventListener.java index deec48c30a..579fe1bf93 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/TestPolarisEventListener.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/TestPolarisEventListener.java @@ -28,8 +28,11 @@ import org.apache.polaris.service.events.BeforeLimitRequestRateEvent; import org.apache.polaris.service.events.CatalogGenericTableServiceEvents; import org.apache.polaris.service.events.CatalogPolicyServiceEvents; +import org.apache.polaris.service.events.CatalogsServiceEvents; import org.apache.polaris.service.events.IcebergRestCatalogEvents; import org.apache.polaris.service.events.PolarisEvent; +import org.apache.polaris.service.events.PrincipalRolesServiceEvents; +import org.apache.polaris.service.events.PrincipalsServiceEvents; /** Event listener that stores all emitted events forever. Not recommended for use in production. */ @ApplicationScoped @@ -44,47 +47,365 @@ public T getLatest(Class type) { } @Override - public void onBeforeLimitRequestRate(BeforeLimitRequestRateEvent event) { + public void onBeforeCreateCatalog(CatalogsServiceEvents.BeforeCreateCatalogEvent event) { history.add(event); } @Override - public void onBeforeCommitTable(IcebergRestCatalogEvents.BeforeCommitTableEvent event) { + public void onAfterCreateCatalog(CatalogsServiceEvents.AfterCreateCatalogEvent event) { history.add(event); } @Override - public void onAfterCommitTable(IcebergRestCatalogEvents.AfterCommitTableEvent event) { + public void onBeforeDeleteCatalog(CatalogsServiceEvents.BeforeDeleteCatalogEvent event) { history.add(event); } @Override - public void onBeforeCommitView(IcebergRestCatalogEvents.BeforeCommitViewEvent event) { + public void onAfterDeleteCatalog(CatalogsServiceEvents.AfterDeleteCatalogEvent event) { history.add(event); } @Override - public void onAfterCommitView(IcebergRestCatalogEvents.AfterCommitViewEvent event) { + public void onBeforeGetCatalog(CatalogsServiceEvents.BeforeGetCatalogEvent event) { history.add(event); } @Override - public void onBeforeRefreshTable(IcebergRestCatalogEvents.BeforeRefreshTableEvent event) { + public void onAfterGetCatalog(CatalogsServiceEvents.AfterGetCatalogEvent event) { history.add(event); } @Override - public void onAfterRefreshTable(IcebergRestCatalogEvents.AfterRefreshTableEvent event) { + public void onBeforeUpdateCatalog(CatalogsServiceEvents.BeforeUpdateCatalogEvent event) { history.add(event); } @Override - public void onBeforeRefreshView(IcebergRestCatalogEvents.BeforeRefreshViewEvent event) { + public void onAfterUpdateCatalog(CatalogsServiceEvents.AfterUpdateCatalogEvent event) { history.add(event); } @Override - public void onAfterRefreshView(IcebergRestCatalogEvents.AfterRefreshViewEvent event) { + public void onBeforeListCatalogs(CatalogsServiceEvents.BeforeListCatalogsEvent event) { + history.add(event); + } + + @Override + public void onAfterListCatalogs(CatalogsServiceEvents.AfterListCatalogsEvent event) { + history.add(event); + } + + @Override + public void onBeforeCreatePrincipal(PrincipalsServiceEvents.BeforeCreatePrincipalEvent event) { + history.add(event); + } + + @Override + public void onAfterCreatePrincipal(PrincipalsServiceEvents.AfterCreatePrincipalEvent event) { + history.add(event); + } + + @Override + public void onBeforeDeletePrincipal(PrincipalsServiceEvents.BeforeDeletePrincipalEvent event) { + history.add(event); + } + + @Override + public void onAfterDeletePrincipal(PrincipalsServiceEvents.AfterDeletePrincipalEvent event) { + history.add(event); + } + + @Override + public void onBeforeGetPrincipal(PrincipalsServiceEvents.BeforeGetPrincipalEvent event) { + history.add(event); + } + + @Override + public void onAfterGetPrincipal(PrincipalsServiceEvents.AfterGetPrincipalEvent event) { + history.add(event); + } + + @Override + public void onBeforeUpdatePrincipal(PrincipalsServiceEvents.BeforeUpdatePrincipalEvent event) { + history.add(event); + } + + @Override + public void onAfterUpdatePrincipal(PrincipalsServiceEvents.AfterUpdatePrincipalEvent event) { + history.add(event); + } + + @Override + public void onBeforeRotateCredentials( + PrincipalsServiceEvents.BeforeRotateCredentialsEvent event) { + history.add(event); + } + + @Override + public void onAfterRotateCredentials(PrincipalsServiceEvents.AfterRotateCredentialsEvent event) { + history.add(event); + } + + @Override + public void onBeforeListPrincipals(PrincipalsServiceEvents.BeforeListPrincipalsEvent event) { + history.add(event); + } + + @Override + public void onAfterListPrincipals(PrincipalsServiceEvents.AfterListPrincipalsEvent event) { + history.add(event); + } + + @Override + public void onBeforeResetCredentials(PrincipalsServiceEvents.BeforeResetCredentialsEvent event) { + history.add(event); + } + + @Override + public void onAfterResetCredentials(PrincipalsServiceEvents.AfterResetCredentialsEvent event) { + history.add(event); + } + + @Override + public void onBeforeAssignPrincipalRole( + PrincipalsServiceEvents.BeforeAssignPrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onAfterAssignPrincipalRole( + PrincipalsServiceEvents.AfterAssignPrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onBeforeRevokePrincipalRole( + PrincipalsServiceEvents.BeforeRevokePrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onAfterRevokePrincipalRole( + PrincipalsServiceEvents.AfterRevokePrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onBeforeListAssignedPrincipalRoles( + PrincipalsServiceEvents.BeforeListAssignedPrincipalRolesEvent event) { + history.add(event); + } + + @Override + public void onAfterListAssignedPrincipalRoles( + PrincipalsServiceEvents.AfterListAssignedPrincipalRolesEvent event) { + history.add(event); + } + + @Override + public void onBeforeCreatePrincipalRole( + PrincipalRolesServiceEvents.BeforeCreatePrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onAfterCreatePrincipalRole( + PrincipalRolesServiceEvents.AfterCreatePrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onBeforeDeletePrincipalRole( + PrincipalRolesServiceEvents.BeforeDeletePrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onAfterDeletePrincipalRole( + PrincipalRolesServiceEvents.AfterDeletePrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onBeforeGetPrincipalRole( + PrincipalRolesServiceEvents.BeforeGetPrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onAfterGetPrincipalRole( + PrincipalRolesServiceEvents.AfterGetPrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onBeforeUpdatePrincipalRole( + PrincipalRolesServiceEvents.BeforeUpdatePrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onAfterUpdatePrincipalRole( + PrincipalRolesServiceEvents.AfterUpdatePrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onBeforeListPrincipalRoles( + PrincipalRolesServiceEvents.BeforeListPrincipalRolesEvent event) { + history.add(event); + } + + @Override + public void onAfterListPrincipalRoles( + PrincipalRolesServiceEvents.AfterListPrincipalRolesEvent event) { + history.add(event); + } + + @Override + public void onBeforeCreateCatalogRole(CatalogsServiceEvents.BeforeCreateCatalogRoleEvent event) { + history.add(event); + } + + @Override + public void onAfterCreateCatalogRole(CatalogsServiceEvents.AfterCreateCatalogRoleEvent event) { + history.add(event); + } + + @Override + public void onBeforeDeleteCatalogRole(CatalogsServiceEvents.BeforeDeleteCatalogRoleEvent event) { + history.add(event); + } + + @Override + public void onAfterDeleteCatalogRole(CatalogsServiceEvents.AfterDeleteCatalogRoleEvent event) { + history.add(event); + } + + @Override + public void onBeforeGetCatalogRole(CatalogsServiceEvents.BeforeGetCatalogRoleEvent event) { + history.add(event); + } + + @Override + public void onAfterGetCatalogRole(CatalogsServiceEvents.AfterGetCatalogRoleEvent event) { + history.add(event); + } + + @Override + public void onBeforeUpdateCatalogRole(CatalogsServiceEvents.BeforeUpdateCatalogRoleEvent event) { + history.add(event); + } + + @Override + public void onAfterUpdateCatalogRole(CatalogsServiceEvents.AfterUpdateCatalogRoleEvent event) { + history.add(event); + } + + @Override + public void onBeforeListCatalogRoles(CatalogsServiceEvents.BeforeListCatalogRolesEvent event) { + history.add(event); + } + + @Override + public void onAfterListCatalogRoles(CatalogsServiceEvents.AfterListCatalogRolesEvent event) { + history.add(event); + } + + @Override + public void onBeforeAssignCatalogRoleToPrincipalRole( + PrincipalRolesServiceEvents.BeforeAssignCatalogRoleToPrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onAfterAssignCatalogRoleToPrincipalRole( + PrincipalRolesServiceEvents.AfterAssignCatalogRoleToPrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onBeforeRevokeCatalogRoleFromPrincipalRole( + PrincipalRolesServiceEvents.BeforeRevokeCatalogRoleFromPrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onAfterRevokeCatalogRoleFromPrincipalRole( + PrincipalRolesServiceEvents.AfterRevokeCatalogRoleFromPrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onBeforeListAssigneePrincipalsForPrincipalRole( + PrincipalRolesServiceEvents.BeforeListAssigneePrincipalsForPrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onAfterListAssigneePrincipalsForPrincipalRole( + PrincipalRolesServiceEvents.AfterListAssigneePrincipalsForPrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onBeforeListCatalogRolesForPrincipalRole( + PrincipalRolesServiceEvents.BeforeListCatalogRolesForPrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onAfterListCatalogRolesForPrincipalRole( + PrincipalRolesServiceEvents.AfterListCatalogRolesForPrincipalRoleEvent event) { + history.add(event); + } + + @Override + public void onBeforeAddGrantToCatalogRole( + CatalogsServiceEvents.BeforeAddGrantToCatalogRoleEvent event) { + history.add(event); + } + + @Override + public void onAfterAddGrantToCatalogRole( + CatalogsServiceEvents.AfterAddGrantToCatalogRoleEvent event) { + history.add(event); + } + + @Override + public void onBeforeRevokeGrantFromCatalogRole( + CatalogsServiceEvents.BeforeRevokeGrantFromCatalogRoleEvent event) { + history.add(event); + } + + @Override + public void onAfterRevokeGrantFromCatalogRole( + CatalogsServiceEvents.AfterRevokeGrantFromCatalogRoleEvent event) { + history.add(event); + } + + @Override + public void onBeforeListAssigneePrincipalRolesForCatalogRole( + CatalogsServiceEvents.BeforeListAssigneePrincipalRolesForCatalogRoleEvent event) { + history.add(event); + } + + @Override + public void onAfterListAssigneePrincipalRolesForCatalogRole( + CatalogsServiceEvents.AfterListAssigneePrincipalRolesForCatalogRoleEvent event) { + history.add(event); + } + + @Override + public void onBeforeListGrantsForCatalogRole( + CatalogsServiceEvents.BeforeListGrantsForCatalogRoleEvent event) { + history.add(event); + } + + @Override + public void onAfterListGrantsForCatalogRole( + CatalogsServiceEvents.AfterListGrantsForCatalogRoleEvent event) { history.add(event); } @@ -164,6 +485,26 @@ public void onAfterCreateTable(IcebergRestCatalogEvents.AfterCreateTableEvent ev history.add(event); } + @Override + public void onBeforeCommitTable(IcebergRestCatalogEvents.BeforeCommitTableEvent event) { + history.add(event); + } + + @Override + public void onAfterCommitTable(IcebergRestCatalogEvents.AfterCommitTableEvent event) { + history.add(event); + } + + @Override + public void onBeforeRefreshTable(IcebergRestCatalogEvents.BeforeRefreshTableEvent event) { + history.add(event); + } + + @Override + public void onAfterRefreshTable(IcebergRestCatalogEvents.AfterRefreshTableEvent event) { + history.add(event); + } + @Override public void onBeforeListTables(IcebergRestCatalogEvents.BeforeListTablesEvent event) { history.add(event); @@ -244,6 +585,26 @@ public void onAfterCreateView(IcebergRestCatalogEvents.AfterCreateViewEvent even history.add(event); } + @Override + public void onBeforeCommitView(IcebergRestCatalogEvents.BeforeCommitViewEvent event) { + history.add(event); + } + + @Override + public void onAfterCommitView(IcebergRestCatalogEvents.AfterCommitViewEvent event) { + history.add(event); + } + + @Override + public void onBeforeRefreshView(IcebergRestCatalogEvents.BeforeRefreshViewEvent event) { + history.add(event); + } + + @Override + public void onAfterRefreshView(IcebergRestCatalogEvents.AfterRefreshViewEvent event) { + history.add(event); + } + @Override public void onBeforeListViews(IcebergRestCatalogEvents.BeforeListViewsEvent event) { history.add(event); @@ -484,4 +845,9 @@ public void onBeforeAttemptTask(BeforeAttemptTaskEvent event) { public void onAfterAttemptTask(AfterAttemptTaskEvent event) { history.add(event); } + + @Override + public void onBeforeLimitRequestRate(BeforeLimitRequestRateEvent event) { + history.add(event); + } } diff --git a/runtime/service/src/test/java/org/apache/polaris/service/events/listeners/PolarisEventListenerTest.java b/runtime/service/src/test/java/org/apache/polaris/service/events/listeners/PolarisEventListenerTest.java new file mode 100644 index 0000000000..257113d009 --- /dev/null +++ b/runtime/service/src/test/java/org/apache/polaris/service/events/listeners/PolarisEventListenerTest.java @@ -0,0 +1,85 @@ +/* + * 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.listeners; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.Set; +import java.util.stream.Collectors; +import org.apache.polaris.service.events.PolarisEvent; +import org.jboss.jandex.ClassInfo; +import org.jboss.jandex.DotName; +import org.jboss.jandex.Index; +import org.jboss.jandex.IndexReader; +import org.junit.jupiter.api.Test; + +/** Test that PolarisEventListener interface is well-formed and consistent. */ +class PolarisEventListenerTest { + + @Test + void testAllMethodsWellFormed() { + for (Method method : PolarisEventListener.class.getMethods()) { + assertThat(method.isDefault()).as("Method %s is not default", method.getName()).isTrue(); + assertThat(method.getReturnType()) + .as("Method %s does not return void", method.getName()) + .isEqualTo(void.class); + assertThat(method.getParameters()) + .as("Method %s does not have exactly 1 parameter", method.getName()) + .hasSize(1); + Class eventType = method.getParameters()[0].getType(); + assertThat(PolarisEvent.class).isAssignableFrom(eventType); + String expectedMethodName = + "on" + method.getParameterTypes()[0].getSimpleName().replace("Event", ""); + assertThat(method.getName()).isEqualTo(expectedMethodName); + } + } + + @Test + void testAllEventTypesHandled() throws IOException { + Index index; + try (InputStream is = getClass().getClassLoader().getResourceAsStream("META-INF/jandex.idx")) { + index = new IndexReader(is).read(); + } + + // Find all classes that implement PolarisEvent + Set eventTypes = + index.getAllKnownImplementors(DotName.createSimple(PolarisEvent.class)).stream() + .map(ClassInfo::name) + .map(DotName::toString) + .collect(Collectors.toSet()); + + assertThat(eventTypes).isNotEmpty(); + + // Find all event types that have corresponding listener methods + Set handledEventTypes = + Arrays.stream(PolarisEventListener.class.getMethods()) + .filter(method -> method.getParameterCount() == 1) + .filter(method -> PolarisEvent.class.isAssignableFrom(method.getParameterTypes()[0])) + .map(method -> method.getParameterTypes()[0].getName()) + .collect(Collectors.toSet()); + + // Check that all PolarisEvent implementations have corresponding listener methods + assertThat(handledEventTypes).containsAll(eventTypes); + } +} diff --git a/runtime/service/src/test/java/org/apache/polaris/service/events/listeners/TestPolarisEventListenerTest.java b/runtime/service/src/test/java/org/apache/polaris/service/events/listeners/TestPolarisEventListenerTest.java new file mode 100644 index 0000000000..3d856c99ac --- /dev/null +++ b/runtime/service/src/test/java/org/apache/polaris/service/events/listeners/TestPolarisEventListenerTest.java @@ -0,0 +1,40 @@ +/* + * 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.listeners; + +import java.lang.reflect.Method; +import org.junit.jupiter.api.Test; + +class TestPolarisEventListenerTest { + + @Test + @SuppressWarnings("ReturnValueIgnored") + void testAllMethodsOverridden() { + for (Method method : PolarisEventListener.class.getMethods()) { + try { + TestPolarisEventListener.class.getDeclaredMethod( + method.getName(), method.getParameterTypes()); + } catch (NoSuchMethodException e) { + throw new AssertionError( + "Method " + method.getName() + " is not overridden in TestPolarisEventListener"); + } + } + } +}