You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polaris.apache.org by yu...@apache.org on 2026/06/09 18:32:34 UTC
(polaris) branch main updated: Refactor event listener supported type resolution (#4625)
This is an automated email from the ASF dual-hosted git repository.
flyrain 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 bacb5f149f Refactor event listener supported type resolution (#4625)
bacb5f149f is described below
commit bacb5f149f3b4e7b5b3b706cbceeac7b57cdffe9
Author: Yufei Gu <yu...@apache.org>
AuthorDate: Tue Jun 9 11:32:28 2026 -0700
Refactor event listener supported type resolution (#4625)
---
.../service/events/PolarisEventListeners.java | 47 ++++++++++++++--------
1 file changed, 31 insertions(+), 16 deletions(-)
diff --git a/runtime/service/src/main/java/org/apache/polaris/service/events/PolarisEventListeners.java b/runtime/service/src/main/java/org/apache/polaris/service/events/PolarisEventListeners.java
index 26118f0557..35924744a2 100644
--- a/runtime/service/src/main/java/org/apache/polaris/service/events/PolarisEventListeners.java
+++ b/runtime/service/src/main/java/org/apache/polaris/service/events/PolarisEventListeners.java
@@ -33,6 +33,7 @@ import jakarta.enterprise.inject.Instance;
import jakarta.inject.Inject;
import java.util.EnumSet;
import java.util.HashSet;
+import java.util.Set;
import java.util.concurrent.Executor;
import org.apache.polaris.service.events.listeners.PolarisEventListener;
import org.slf4j.Logger;
@@ -53,27 +54,19 @@ public class PolarisEventListeners {
private final EnumSet<PolarisEventType> eventTypesWithListeners =
EnumSet.noneOf(PolarisEventType.class);
+ /**
+ * Registers configured Polaris event listeners with the local Vert.x event bus at startup.
+ *
+ * <p>Each listener may enable event categories, individual event types, or both. When no
+ * per-listener filters are configured, the listener receives every Polaris event type.
+ */
public void onStartup(@Observes StartupEvent event) {
var listenerTypeSet = configuration.types().orElseGet(HashSet::new);
for (String enabledEventListener : listenerTypeSet) {
var listenerConfiguration = configuration.listenerConfig().get(enabledEventListener);
- var supportedTypes =
- listenerConfiguration == null
- || (listenerConfiguration.enabledEventCategories().isEmpty()
- && listenerConfiguration.enabledEventTypes().isEmpty())
- ? EnumSet.allOf(PolarisEventType.class)
- : EnumSet.noneOf(PolarisEventType.class);
- if (listenerConfiguration != null) {
- if (listenerConfiguration.enabledEventCategories().isPresent()) {
- for (var enabledEventCategory : listenerConfiguration.enabledEventCategories().get()) {
- supportedTypes.addAll(PolarisEventType.typesOfCategory(enabledEventCategory));
- }
- }
- if (listenerConfiguration.enabledEventTypes().isPresent()) {
- supportedTypes.addAll(listenerConfiguration.enabledEventTypes().get());
- }
- }
+ var supportedTypes = resolveSupportedTypes(listenerConfiguration);
var listener = eventListeners.select(Identifier.Literal.of(enabledEventListener)).get();
+ // Reuse the same handler for every selected event type for this listener.
Handler<Message<PolarisEvent>> handler =
message -> deliverEvent(message.body(), enabledEventListener, listener);
for (var polarisEventType : supportedTypes) {
@@ -83,6 +76,28 @@ public class PolarisEventListeners {
}
}
+ private static EnumSet<PolarisEventType> resolveSupportedTypes(
+ PolarisEventListenerConfiguration.ListenerConfiguration listenerConfiguration) {
+ // Missing or empty per-listener filters mean that the listener receives all event types.
+ if (listenerConfiguration == null
+ || (listenerConfiguration.enabledEventCategories().orElse(Set.of()).isEmpty()
+ && listenerConfiguration.enabledEventTypes().orElse(Set.of()).isEmpty())) {
+ return EnumSet.allOf(PolarisEventType.class);
+ }
+
+ // Category and type filters are additive: a listener receives the union of both.
+ var supportedTypes = EnumSet.noneOf(PolarisEventType.class);
+ if (listenerConfiguration.enabledEventCategories().isPresent()) {
+ for (var enabledEventCategory : listenerConfiguration.enabledEventCategories().get()) {
+ supportedTypes.addAll(PolarisEventType.typesOfCategory(enabledEventCategory));
+ }
+ }
+ if (listenerConfiguration.enabledEventTypes().isPresent()) {
+ supportedTypes.addAll(listenerConfiguration.enabledEventTypes().get());
+ }
+ return supportedTypes;
+ }
+
private void deliverEvent(
PolarisEvent event, String listenerName, PolarisEventListener listener) {
LOGGER.debug("Delivering {} event to listener '{}' ({})", event.type(), listenerName, listener);