Skip to content

Commit d7ec8f2

Browse files
authored
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.
1 parent 923a2e1 commit d7ec8f2

File tree

3 files changed

+126
-8
lines changed

3 files changed

+126
-8
lines changed

runtime/service/src/main/java/org/apache/polaris/service/catalog/generic/CatalogGenericTableEventServiceDelegator.java

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,22 @@
2626
import jakarta.ws.rs.core.Response;
2727
import jakarta.ws.rs.core.SecurityContext;
2828
import org.apache.polaris.core.context.RealmContext;
29+
import org.apache.polaris.service.catalog.CatalogPrefixParser;
2930
import org.apache.polaris.service.catalog.api.PolarisCatalogGenericTableApiService;
3031
import org.apache.polaris.service.catalog.common.CatalogAdapter;
32+
import org.apache.polaris.service.events.CatalogGenericTableServiceEvents;
33+
import org.apache.polaris.service.events.listeners.PolarisEventListener;
3134
import org.apache.polaris.service.types.CreateGenericTableRequest;
35+
import org.apache.polaris.service.types.LoadGenericTableResponse;
3236

3337
@Decorator
3438
@Priority(1000)
3539
public class CatalogGenericTableEventServiceDelegator
3640
implements PolarisCatalogGenericTableApiService, CatalogAdapter {
3741

3842
@Inject @Delegate GenericTableCatalogAdapter delegate;
43+
@Inject PolarisEventListener polarisEventListener;
44+
@Inject CatalogPrefixParser prefixParser;
3945

4046
@Override
4147
public Response createGenericTable(
@@ -44,8 +50,17 @@ public Response createGenericTable(
4450
CreateGenericTableRequest createGenericTableRequest,
4551
RealmContext realmContext,
4652
SecurityContext securityContext) {
47-
return delegate.createGenericTable(
48-
prefix, namespace, createGenericTableRequest, realmContext, securityContext);
53+
String catalogName = prefixParser.prefixToCatalogName(realmContext, prefix);
54+
polarisEventListener.onBeforeCreateGenericTable(
55+
new CatalogGenericTableServiceEvents.BeforeCreateGenericTableEvent(
56+
catalogName, namespace, createGenericTableRequest));
57+
Response resp =
58+
delegate.createGenericTable(
59+
prefix, namespace, createGenericTableRequest, realmContext, securityContext);
60+
polarisEventListener.onAfterCreateGenericTable(
61+
new CatalogGenericTableServiceEvents.AfterCreateGenericTableEvent(
62+
catalogName, namespace, ((LoadGenericTableResponse) resp.getEntity()).getTable()));
63+
return resp;
4964
}
5065

5166
@Override
@@ -55,8 +70,16 @@ public Response dropGenericTable(
5570
String genericTable,
5671
RealmContext realmContext,
5772
SecurityContext securityContext) {
58-
return delegate.dropGenericTable(
59-
prefix, namespace, genericTable, realmContext, securityContext);
73+
String catalogName = prefixParser.prefixToCatalogName(realmContext, prefix);
74+
polarisEventListener.onBeforeDropGenericTable(
75+
new CatalogGenericTableServiceEvents.BeforeDropGenericTableEvent(
76+
catalogName, namespace, genericTable));
77+
Response resp =
78+
delegate.dropGenericTable(prefix, namespace, genericTable, realmContext, securityContext);
79+
polarisEventListener.onAfterDropGenericTable(
80+
new CatalogGenericTableServiceEvents.AfterDropGenericTableEvent(
81+
catalogName, namespace, genericTable));
82+
return resp;
6083
}
6184

6285
@Override
@@ -67,8 +90,15 @@ public Response listGenericTables(
6790
Integer pageSize,
6891
RealmContext realmContext,
6992
SecurityContext securityContext) {
70-
return delegate.listGenericTables(
71-
prefix, namespace, pageToken, pageSize, realmContext, securityContext);
93+
String catalogName = prefixParser.prefixToCatalogName(realmContext, prefix);
94+
polarisEventListener.onBeforeListGenericTables(
95+
new CatalogGenericTableServiceEvents.BeforeListGenericTablesEvent(catalogName, namespace));
96+
Response resp =
97+
delegate.listGenericTables(
98+
prefix, namespace, pageToken, pageSize, realmContext, securityContext);
99+
polarisEventListener.onAfterListGenericTables(
100+
new CatalogGenericTableServiceEvents.AfterListGenericTablesEvent(catalogName, namespace));
101+
return resp;
72102
}
73103

74104
@Override
@@ -78,7 +108,15 @@ public Response loadGenericTable(
78108
String genericTable,
79109
RealmContext realmContext,
80110
SecurityContext securityContext) {
81-
return delegate.loadGenericTable(
82-
prefix, namespace, genericTable, realmContext, securityContext);
111+
String catalogName = prefixParser.prefixToCatalogName(realmContext, prefix);
112+
polarisEventListener.onBeforeLoadGenericTable(
113+
new CatalogGenericTableServiceEvents.BeforeLoadGenericTableEvent(
114+
catalogName, namespace, genericTable));
115+
Response resp =
116+
delegate.loadGenericTable(prefix, namespace, genericTable, realmContext, securityContext);
117+
polarisEventListener.onAfterLoadGenericTable(
118+
new CatalogGenericTableServiceEvents.AfterLoadGenericTableEvent(
119+
catalogName, namespace, ((LoadGenericTableResponse) resp.getEntity()).getTable()));
120+
return resp;
83121
}
84122
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
package org.apache.polaris.service.events;
21+
22+
import org.apache.polaris.service.types.CreateGenericTableRequest;
23+
import org.apache.polaris.service.types.GenericTable;
24+
25+
public class CatalogGenericTableServiceEvents {
26+
public record BeforeCreateGenericTableEvent(
27+
String catalogName, String namespace, CreateGenericTableRequest request) {}
28+
29+
public record AfterCreateGenericTableEvent(
30+
String catalogName, String namespace, GenericTable table) {}
31+
32+
public record BeforeDropGenericTableEvent(
33+
String catalogName, String namespace, String tableName) {}
34+
35+
public record AfterDropGenericTableEvent(
36+
String catalogName, String namespace, String tableName) {}
37+
38+
public record BeforeListGenericTablesEvent(String catalogName, String namespace) {}
39+
40+
public record AfterListGenericTablesEvent(String catalogName, String namespace) {}
41+
42+
public record BeforeLoadGenericTableEvent(
43+
String catalogName, String namespace, String tableName) {}
44+
45+
public record AfterLoadGenericTableEvent(
46+
String catalogName, String namespace, GenericTable table) {}
47+
}

runtime/service/src/main/java/org/apache/polaris/service/events/listeners/PolarisEventListener.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.apache.polaris.service.events.BeforeTaskAttemptedEvent;
3232
import org.apache.polaris.service.events.BeforeViewCommitedEvent;
3333
import org.apache.polaris.service.events.BeforeViewRefreshedEvent;
34+
import org.apache.polaris.service.events.CatalogGenericTableServiceEvents;
3435

3536
/**
3637
* Represents an event listener that can respond to notable moments during Polaris's execution.
@@ -76,4 +77,36 @@ public void onAfterTableCreated(AfterTableCreatedEvent event) {}
7677

7778
/** {@link AfterCatalogCreatedEvent} */
7879
public void onAfterCatalogCreated(AfterCatalogCreatedEvent event) {}
80+
81+
/** {@link CatalogGenericTableServiceEvents.BeforeCreateGenericTableEvent} */
82+
public void onBeforeCreateGenericTable(
83+
CatalogGenericTableServiceEvents.BeforeCreateGenericTableEvent event) {}
84+
85+
/** {@link CatalogGenericTableServiceEvents.AfterCreateGenericTableEvent} */
86+
public void onAfterCreateGenericTable(
87+
CatalogGenericTableServiceEvents.AfterCreateGenericTableEvent event) {}
88+
89+
/** {@link CatalogGenericTableServiceEvents.BeforeDropGenericTableEvent} */
90+
public void onBeforeDropGenericTable(
91+
CatalogGenericTableServiceEvents.BeforeDropGenericTableEvent event) {}
92+
93+
/** {@link CatalogGenericTableServiceEvents.AfterDropGenericTableEvent} */
94+
public void onAfterDropGenericTable(
95+
CatalogGenericTableServiceEvents.AfterDropGenericTableEvent event) {}
96+
97+
/** {@link CatalogGenericTableServiceEvents.BeforeListGenericTablesEvent} */
98+
public void onBeforeListGenericTables(
99+
CatalogGenericTableServiceEvents.BeforeListGenericTablesEvent event) {}
100+
101+
/** {@link CatalogGenericTableServiceEvents.AfterListGenericTablesEvent} */
102+
public void onAfterListGenericTables(
103+
CatalogGenericTableServiceEvents.AfterListGenericTablesEvent event) {}
104+
105+
/** {@link CatalogGenericTableServiceEvents.BeforeLoadGenericTableEvent} */
106+
public void onBeforeLoadGenericTable(
107+
CatalogGenericTableServiceEvents.BeforeLoadGenericTableEvent event) {}
108+
109+
/** {@link CatalogGenericTableServiceEvents.AfterLoadGenericTableEvent} */
110+
public void onAfterLoadGenericTable(
111+
CatalogGenericTableServiceEvents.AfterLoadGenericTableEvent event) {}
79112
}

0 commit comments

Comments
 (0)