This is an automated email from the ASF dual-hosted git repository.
emaynard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/polaris.git
The following commit(s) were added to refs/heads/main by this push:
new d7ec8f276 Add Events for Generic Table APIs (#2481)
d7ec8f276 is described below
commit d7ec8f27688ba8e8fef567a16a73fb0b34778f91
Author: Adnan Hemani <[email protected]>
AuthorDate: Thu Sep 4 11:08:15 2025 -0700
Add Events for Generic Table APIs (#2481)
This PR adds the Events instrumentation for the Generic Tables Service
APIs, surrounding the default delegated call to the business logic APIs.
---
.../CatalogGenericTableEventServiceDelegator.java | 54 ++++++++++++++++++----
.../events/CatalogGenericTableServiceEvents.java | 47 +++++++++++++++++++
.../events/listeners/PolarisEventListener.java | 33 +++++++++++++
3 files changed, 126 insertions(+), 8 deletions(-)
diff --git
a/runtime/service/src/main/java/org/apache/polaris/service/catalog/generic/CatalogGenericTableEventServiceDelegator.java
b/runtime/service/src/main/java/org/apache/polaris/service/catalog/generic/CatalogGenericTableEventServiceDelegator.java
index 0db2a4257..e7bb6d925 100644
---
a/runtime/service/src/main/java/org/apache/polaris/service/catalog/generic/CatalogGenericTableEventServiceDelegator.java
+++
b/runtime/service/src/main/java/org/apache/polaris/service/catalog/generic/CatalogGenericTableEventServiceDelegator.java
@@ -26,9 +26,13 @@ import jakarta.inject.Inject;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.SecurityContext;
import org.apache.polaris.core.context.RealmContext;
+import org.apache.polaris.service.catalog.CatalogPrefixParser;
import
org.apache.polaris.service.catalog.api.PolarisCatalogGenericTableApiService;
import org.apache.polaris.service.catalog.common.CatalogAdapter;
+import org.apache.polaris.service.events.CatalogGenericTableServiceEvents;
+import org.apache.polaris.service.events.listeners.PolarisEventListener;
import org.apache.polaris.service.types.CreateGenericTableRequest;
+import org.apache.polaris.service.types.LoadGenericTableResponse;
@Decorator
@Priority(1000)
@@ -36,6 +40,8 @@ public class CatalogGenericTableEventServiceDelegator
implements PolarisCatalogGenericTableApiService, CatalogAdapter {
@Inject @Delegate GenericTableCatalogAdapter delegate;
+ @Inject PolarisEventListener polarisEventListener;
+ @Inject CatalogPrefixParser prefixParser;
@Override
public Response createGenericTable(
@@ -44,8 +50,17 @@ public class CatalogGenericTableEventServiceDelegator
CreateGenericTableRequest createGenericTableRequest,
RealmContext realmContext,
SecurityContext securityContext) {
- return delegate.createGenericTable(
- prefix, namespace, createGenericTableRequest, realmContext,
securityContext);
+ String catalogName = prefixParser.prefixToCatalogName(realmContext,
prefix);
+ polarisEventListener.onBeforeCreateGenericTable(
+ new CatalogGenericTableServiceEvents.BeforeCreateGenericTableEvent(
+ catalogName, namespace, createGenericTableRequest));
+ Response resp =
+ delegate.createGenericTable(
+ prefix, namespace, createGenericTableRequest, realmContext,
securityContext);
+ polarisEventListener.onAfterCreateGenericTable(
+ new CatalogGenericTableServiceEvents.AfterCreateGenericTableEvent(
+ catalogName, namespace, ((LoadGenericTableResponse)
resp.getEntity()).getTable()));
+ return resp;
}
@Override
@@ -55,8 +70,16 @@ public class CatalogGenericTableEventServiceDelegator
String genericTable,
RealmContext realmContext,
SecurityContext securityContext) {
- return delegate.dropGenericTable(
- prefix, namespace, genericTable, realmContext, securityContext);
+ String catalogName = prefixParser.prefixToCatalogName(realmContext,
prefix);
+ polarisEventListener.onBeforeDropGenericTable(
+ new CatalogGenericTableServiceEvents.BeforeDropGenericTableEvent(
+ catalogName, namespace, genericTable));
+ Response resp =
+ delegate.dropGenericTable(prefix, namespace, genericTable,
realmContext, securityContext);
+ polarisEventListener.onAfterDropGenericTable(
+ new CatalogGenericTableServiceEvents.AfterDropGenericTableEvent(
+ catalogName, namespace, genericTable));
+ return resp;
}
@Override
@@ -67,8 +90,15 @@ public class CatalogGenericTableEventServiceDelegator
Integer pageSize,
RealmContext realmContext,
SecurityContext securityContext) {
- return delegate.listGenericTables(
- prefix, namespace, pageToken, pageSize, realmContext, securityContext);
+ String catalogName = prefixParser.prefixToCatalogName(realmContext,
prefix);
+ polarisEventListener.onBeforeListGenericTables(
+ new
CatalogGenericTableServiceEvents.BeforeListGenericTablesEvent(catalogName,
namespace));
+ Response resp =
+ delegate.listGenericTables(
+ prefix, namespace, pageToken, pageSize, realmContext,
securityContext);
+ polarisEventListener.onAfterListGenericTables(
+ new
CatalogGenericTableServiceEvents.AfterListGenericTablesEvent(catalogName,
namespace));
+ return resp;
}
@Override
@@ -78,7 +108,15 @@ public class CatalogGenericTableEventServiceDelegator
String genericTable,
RealmContext realmContext,
SecurityContext securityContext) {
- return delegate.loadGenericTable(
- prefix, namespace, genericTable, realmContext, securityContext);
+ String catalogName = prefixParser.prefixToCatalogName(realmContext,
prefix);
+ polarisEventListener.onBeforeLoadGenericTable(
+ new CatalogGenericTableServiceEvents.BeforeLoadGenericTableEvent(
+ catalogName, namespace, genericTable));
+ Response resp =
+ delegate.loadGenericTable(prefix, namespace, genericTable,
realmContext, securityContext);
+ polarisEventListener.onAfterLoadGenericTable(
+ new CatalogGenericTableServiceEvents.AfterLoadGenericTableEvent(
+ catalogName, namespace, ((LoadGenericTableResponse)
resp.getEntity()).getTable()));
+ return resp;
}
}
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
new file mode 100644
index 000000000..a533e88c7
--- /dev/null
+++
b/runtime/service/src/main/java/org/apache/polaris/service/events/CatalogGenericTableServiceEvents.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.polaris.service.events;
+
+import org.apache.polaris.service.types.CreateGenericTableRequest;
+import org.apache.polaris.service.types.GenericTable;
+
+public class CatalogGenericTableServiceEvents {
+ public record BeforeCreateGenericTableEvent(
+ String catalogName, String namespace, CreateGenericTableRequest request)
{}
+
+ public record AfterCreateGenericTableEvent(
+ String catalogName, String namespace, GenericTable table) {}
+
+ public record BeforeDropGenericTableEvent(
+ String catalogName, String namespace, String tableName) {}
+
+ public record AfterDropGenericTableEvent(
+ String catalogName, String namespace, String tableName) {}
+
+ public record BeforeListGenericTablesEvent(String catalogName, String
namespace) {}
+
+ public record AfterListGenericTablesEvent(String catalogName, String
namespace) {}
+
+ public record BeforeLoadGenericTableEvent(
+ String catalogName, String namespace, String tableName) {}
+
+ public record AfterLoadGenericTableEvent(
+ String catalogName, String namespace, GenericTable table) {}
+}
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 2d13194dc..1c72a0904 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
@@ -31,6 +31,7 @@ import
org.apache.polaris.service.events.BeforeTableRefreshedEvent;
import org.apache.polaris.service.events.BeforeTaskAttemptedEvent;
import org.apache.polaris.service.events.BeforeViewCommitedEvent;
import org.apache.polaris.service.events.BeforeViewRefreshedEvent;
+import org.apache.polaris.service.events.CatalogGenericTableServiceEvents;
/**
* Represents an event listener that can respond to notable moments during
Polaris's execution.
@@ -76,4 +77,36 @@ public abstract class PolarisEventListener {
/** {@link AfterCatalogCreatedEvent} */
public void onAfterCatalogCreated(AfterCatalogCreatedEvent event) {}
+
+ /** {@link CatalogGenericTableServiceEvents.BeforeCreateGenericTableEvent} */
+ public void onBeforeCreateGenericTable(
+ CatalogGenericTableServiceEvents.BeforeCreateGenericTableEvent event) {}
+
+ /** {@link CatalogGenericTableServiceEvents.AfterCreateGenericTableEvent} */
+ public void onAfterCreateGenericTable(
+ CatalogGenericTableServiceEvents.AfterCreateGenericTableEvent event) {}
+
+ /** {@link CatalogGenericTableServiceEvents.BeforeDropGenericTableEvent} */
+ public void onBeforeDropGenericTable(
+ CatalogGenericTableServiceEvents.BeforeDropGenericTableEvent event) {}
+
+ /** {@link CatalogGenericTableServiceEvents.AfterDropGenericTableEvent} */
+ public void onAfterDropGenericTable(
+ CatalogGenericTableServiceEvents.AfterDropGenericTableEvent event) {}
+
+ /** {@link CatalogGenericTableServiceEvents.BeforeListGenericTablesEvent} */
+ public void onBeforeListGenericTables(
+ CatalogGenericTableServiceEvents.BeforeListGenericTablesEvent event) {}
+
+ /** {@link CatalogGenericTableServiceEvents.AfterListGenericTablesEvent} */
+ public void onAfterListGenericTables(
+ CatalogGenericTableServiceEvents.AfterListGenericTablesEvent event) {}
+
+ /** {@link CatalogGenericTableServiceEvents.BeforeLoadGenericTableEvent} */
+ public void onBeforeLoadGenericTable(
+ CatalogGenericTableServiceEvents.BeforeLoadGenericTableEvent event) {}
+
+ /** {@link CatalogGenericTableServiceEvents.AfterLoadGenericTableEvent} */
+ public void onAfterLoadGenericTable(
+ CatalogGenericTableServiceEvents.AfterLoadGenericTableEvent event) {}
}