adnanhemani commented on code in PR #4064:
URL: https://github.com/apache/polaris/pull/4064#discussion_r3067902236


##########
runtime/service/src/main/java/org/apache/polaris/service/events/PolarisEventListeners.java:
##########
@@ -31,23 +31,68 @@
 import jakarta.enterprise.inject.Any;
 import jakarta.enterprise.inject.Instance;
 import jakarta.inject.Inject;
+import java.util.BitSet;
+import java.util.EnumSet;
 import java.util.HashSet;
-import java.util.Set;
 import org.apache.polaris.service.events.listeners.PolarisEventListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 @ApplicationScoped
 public class PolarisEventListeners {
+  private static final Logger LOGGER = 
LoggerFactory.getLogger(PolarisEventListeners.class);
+
   @Inject EventBus eventBus;
   @Inject @Any Instance<PolarisEventListener> eventListeners;
   @Inject PolarisEventListenerConfiguration configuration;
 
+  private final BitSet eventsByType = new 
BitSet(PolarisEventType.values().length);

Review Comment:
   IMO an EnumSet would be much more clear here.



##########
runtime/service/src/main/java/org/apache/polaris/service/events/PolarisEventListenerConfiguration.java:
##########


Review Comment:
   nit: "listeners"



##########
runtime/service/src/main/java/org/apache/polaris/service/events/PolarisEventListeners.java:
##########
@@ -31,23 +31,68 @@
 import jakarta.enterprise.inject.Any;
 import jakarta.enterprise.inject.Instance;
 import jakarta.inject.Inject;
+import java.util.BitSet;
+import java.util.EnumSet;
 import java.util.HashSet;
-import java.util.Set;
 import org.apache.polaris.service.events.listeners.PolarisEventListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 @ApplicationScoped
 public class PolarisEventListeners {
+  private static final Logger LOGGER = 
LoggerFactory.getLogger(PolarisEventListeners.class);
+
   @Inject EventBus eventBus;
   @Inject @Any Instance<PolarisEventListener> eventListeners;
   @Inject PolarisEventListenerConfiguration configuration;
 
+  private final BitSet eventsByType = new 
BitSet(PolarisEventType.values().length);
+
   public void onStartup(@Observes StartupEvent event) {
-    Set<String> listenerTypeSet = 
configuration.types().orElseGet(HashSet::new);
+    var listenerTypeSet = configuration.types().orElseGet(HashSet::new);
     for (String enabledEventListener : listenerTypeSet) {
-      PolarisEventListener listener =
-          
eventListeners.select(Identifier.Literal.of(enabledEventListener)).get();
-      Handler<Message<PolarisEvent>> handler = e -> listener.onEvent(e.body());
-      eventBus.localConsumer(POLARIS_EVENT_CHANNEL, handler);
+      var listenerConfiguration = 
configuration.listenerConfig().get(enabledEventListener);
+      var supportedTypes =
+          listenerConfiguration == null

Review Comment:
   This is a bit brittle logic. Say an Event Listener requires some specific 
configuration (unrelated to event types accepted) but the user does not want to 
explicitly define all of the PolarisEventTypes. What happens then?
   
   IMO, we should ensure that we check for "enabledEventTypes" not being 
present at all.



##########
runtime/service/src/main/java/org/apache/polaris/service/events/PolarisEventType.java:
##########
@@ -19,189 +19,223 @@
 
 package org.apache.polaris.service.events;
 
+import java.util.Arrays;
+import java.util.Set;
+import java.util.stream.Collectors;
+
 public enum PolarisEventType {
   // Catalog Events
-  BEFORE_CREATE_CATALOG(100),
-  AFTER_CREATE_CATALOG(101),
-  BEFORE_DELETE_CATALOG(102),
-  AFTER_DELETE_CATALOG(103),
-  BEFORE_GET_CATALOG(104),
-  AFTER_GET_CATALOG(105),
-  BEFORE_UPDATE_CATALOG(106),
-  AFTER_UPDATE_CATALOG(107),
-  BEFORE_LIST_CATALOGS(108),
-  AFTER_LIST_CATALOGS(109),
+  BEFORE_CREATE_CATALOG(100, Category.CATALOG),
+  AFTER_CREATE_CATALOG(101, Category.CATALOG),
+  BEFORE_DELETE_CATALOG(102, Category.CATALOG),
+  AFTER_DELETE_CATALOG(103, Category.CATALOG),
+  BEFORE_GET_CATALOG(104, Category.CATALOG),
+  AFTER_GET_CATALOG(105, Category.CATALOG),
+  BEFORE_UPDATE_CATALOG(106, Category.CATALOG),
+  AFTER_UPDATE_CATALOG(107, Category.CATALOG),
+  BEFORE_LIST_CATALOGS(108, Category.CATALOG),
+  AFTER_LIST_CATALOGS(109, Category.CATALOG),
 
   // Catalog Role Events
-  BEFORE_CREATE_CATALOG_ROLE(200),
-  AFTER_CREATE_CATALOG_ROLE(201),
-  BEFORE_DELETE_CATALOG_ROLE(202),
-  AFTER_DELETE_CATALOG_ROLE(203),
-  BEFORE_GET_CATALOG_ROLE(204),
-  AFTER_GET_CATALOG_ROLE(205),
-  BEFORE_UPDATE_CATALOG_ROLE(206),
-  AFTER_UPDATE_CATALOG_ROLE(207),
-  BEFORE_LIST_CATALOG_ROLES(208),
-  AFTER_LIST_CATALOG_ROLES(209),
-  BEFORE_ADD_GRANT_TO_CATALOG_ROLE(210),
-  AFTER_ADD_GRANT_TO_CATALOG_ROLE(211),
-  BEFORE_REVOKE_GRANT_FROM_CATALOG_ROLE(212),
-  AFTER_REVOKE_GRANT_FROM_CATALOG_ROLE(213),
-  BEFORE_LIST_ASSIGNEE_PRINCIPAL_ROLES_FOR_CATALOG_ROLE(214),
-  AFTER_LIST_ASSIGNEE_PRINCIPAL_ROLES_FOR_CATALOG_ROLE(215),
-  BEFORE_LIST_GRANTS_FOR_CATALOG_ROLE(216),
-  AFTER_LIST_GRANTS_FOR_CATALOG_ROLE(217),
+  BEFORE_CREATE_CATALOG_ROLE(200, Category.CATALOG_ROLE),
+  AFTER_CREATE_CATALOG_ROLE(201, Category.CATALOG_ROLE),
+  BEFORE_DELETE_CATALOG_ROLE(202, Category.CATALOG_ROLE),
+  AFTER_DELETE_CATALOG_ROLE(203, Category.CATALOG_ROLE),
+  BEFORE_GET_CATALOG_ROLE(204, Category.CATALOG_ROLE),
+  AFTER_GET_CATALOG_ROLE(205, Category.CATALOG_ROLE),
+  BEFORE_UPDATE_CATALOG_ROLE(206, Category.CATALOG_ROLE),
+  AFTER_UPDATE_CATALOG_ROLE(207, Category.CATALOG_ROLE),
+  BEFORE_LIST_CATALOG_ROLES(208, Category.CATALOG_ROLE),
+  AFTER_LIST_CATALOG_ROLES(209, Category.CATALOG_ROLE),
+  BEFORE_ADD_GRANT_TO_CATALOG_ROLE(210, Category.CATALOG_ROLE),
+  AFTER_ADD_GRANT_TO_CATALOG_ROLE(211, Category.CATALOG_ROLE),
+  BEFORE_REVOKE_GRANT_FROM_CATALOG_ROLE(212, Category.CATALOG_ROLE),
+  AFTER_REVOKE_GRANT_FROM_CATALOG_ROLE(213, Category.CATALOG_ROLE),
+  BEFORE_LIST_ASSIGNEE_PRINCIPAL_ROLES_FOR_CATALOG_ROLE(214, 
Category.CATALOG_ROLE),
+  AFTER_LIST_ASSIGNEE_PRINCIPAL_ROLES_FOR_CATALOG_ROLE(215, 
Category.CATALOG_ROLE),
+  BEFORE_LIST_GRANTS_FOR_CATALOG_ROLE(216, Category.CATALOG_ROLE),
+  AFTER_LIST_GRANTS_FOR_CATALOG_ROLE(217, Category.CATALOG_ROLE),
 
   // Principal Events
-  BEFORE_CREATE_PRINCIPAL(300),
-  AFTER_CREATE_PRINCIPAL(301),
-  BEFORE_DELETE_PRINCIPAL(302),
-  AFTER_DELETE_PRINCIPAL(303),
-  BEFORE_GET_PRINCIPAL(304),
-  AFTER_GET_PRINCIPAL(305),
-  BEFORE_UPDATE_PRINCIPAL(306),
-  AFTER_UPDATE_PRINCIPAL(307),
-  BEFORE_ROTATE_CREDENTIALS(308),
-  AFTER_ROTATE_CREDENTIALS(309),
-  BEFORE_RESET_CREDENTIALS(310),
-  AFTER_RESET_CREDENTIALS(311),
-  BEFORE_LIST_PRINCIPALS(312),
-  AFTER_LIST_PRINCIPALS(313),
-  BEFORE_ASSIGN_PRINCIPAL_ROLE(314),
-  AFTER_ASSIGN_PRINCIPAL_ROLE(315),
-  BEFORE_REVOKE_PRINCIPAL_ROLE(316),
-  AFTER_REVOKE_PRINCIPAL_ROLE(317),
-  BEFORE_LIST_ASSIGNED_PRINCIPAL_ROLES(318),
-  AFTER_LIST_ASSIGNED_PRINCIPAL_ROLES(319),
+  BEFORE_CREATE_PRINCIPAL(300, Category.PRINCIPAL),
+  AFTER_CREATE_PRINCIPAL(301, Category.PRINCIPAL),
+  BEFORE_DELETE_PRINCIPAL(302, Category.PRINCIPAL),
+  AFTER_DELETE_PRINCIPAL(303, Category.PRINCIPAL),
+  BEFORE_GET_PRINCIPAL(304, Category.PRINCIPAL),
+  AFTER_GET_PRINCIPAL(305, Category.PRINCIPAL),
+  BEFORE_UPDATE_PRINCIPAL(306, Category.PRINCIPAL),
+  AFTER_UPDATE_PRINCIPAL(307, Category.PRINCIPAL),
+  BEFORE_ROTATE_CREDENTIALS(308, Category.PRINCIPAL),
+  AFTER_ROTATE_CREDENTIALS(309, Category.PRINCIPAL),
+  BEFORE_RESET_CREDENTIALS(310, Category.PRINCIPAL),
+  AFTER_RESET_CREDENTIALS(311, Category.PRINCIPAL),
+  BEFORE_LIST_PRINCIPALS(312, Category.PRINCIPAL),
+  AFTER_LIST_PRINCIPALS(313, Category.PRINCIPAL),
+  BEFORE_ASSIGN_PRINCIPAL_ROLE(314, Category.PRINCIPAL),
+  AFTER_ASSIGN_PRINCIPAL_ROLE(315, Category.PRINCIPAL),
+  BEFORE_REVOKE_PRINCIPAL_ROLE(316, Category.PRINCIPAL),
+  AFTER_REVOKE_PRINCIPAL_ROLE(317, Category.PRINCIPAL),
+  BEFORE_LIST_ASSIGNED_PRINCIPAL_ROLES(318, Category.PRINCIPAL),
+  AFTER_LIST_ASSIGNED_PRINCIPAL_ROLES(319, Category.PRINCIPAL),
 
   // Principal Role Events
-  BEFORE_CREATE_PRINCIPAL_ROLE(400),
-  AFTER_CREATE_PRINCIPAL_ROLE(401),
-  BEFORE_DELETE_PRINCIPAL_ROLE(402),
-  AFTER_DELETE_PRINCIPAL_ROLE(403),
-  BEFORE_GET_PRINCIPAL_ROLE(404),
-  AFTER_GET_PRINCIPAL_ROLE(405),
-  BEFORE_UPDATE_PRINCIPAL_ROLE(406),
-  AFTER_UPDATE_PRINCIPAL_ROLE(407),
-  BEFORE_LIST_PRINCIPAL_ROLES(408),
-  AFTER_LIST_PRINCIPAL_ROLES(409),
-  BEFORE_ASSIGN_CATALOG_ROLE_TO_PRINCIPAL_ROLE(410),
-  AFTER_ASSIGN_CATALOG_ROLE_TO_PRINCIPAL_ROLE(411),
-  BEFORE_REVOKE_CATALOG_ROLE_FROM_PRINCIPAL_ROLE(412),
-  AFTER_REVOKE_CATALOG_ROLE_FROM_PRINCIPAL_ROLE(413),
-  BEFORE_LIST_ASSIGNEE_PRINCIPALS_FOR_PRINCIPAL_ROLE(414),
-  AFTER_LIST_ASSIGNEE_PRINCIPALS_FOR_PRINCIPAL_ROLE(415),
-  BEFORE_LIST_CATALOG_ROLES_FOR_PRINCIPAL_ROLE(416),
-  AFTER_LIST_CATALOG_ROLES_FOR_PRINCIPAL_ROLE(417),
+  BEFORE_CREATE_PRINCIPAL_ROLE(400, Category.PRINCIPAL_ROLE),
+  AFTER_CREATE_PRINCIPAL_ROLE(401, Category.PRINCIPAL_ROLE),
+  BEFORE_DELETE_PRINCIPAL_ROLE(402, Category.PRINCIPAL_ROLE),
+  AFTER_DELETE_PRINCIPAL_ROLE(403, Category.PRINCIPAL_ROLE),
+  BEFORE_GET_PRINCIPAL_ROLE(404, Category.PRINCIPAL_ROLE),
+  AFTER_GET_PRINCIPAL_ROLE(405, Category.PRINCIPAL_ROLE),
+  BEFORE_UPDATE_PRINCIPAL_ROLE(406, Category.PRINCIPAL_ROLE),
+  AFTER_UPDATE_PRINCIPAL_ROLE(407, Category.PRINCIPAL_ROLE),
+  BEFORE_LIST_PRINCIPAL_ROLES(408, Category.PRINCIPAL_ROLE),
+  AFTER_LIST_PRINCIPAL_ROLES(409, Category.PRINCIPAL_ROLE),
+  BEFORE_ASSIGN_CATALOG_ROLE_TO_PRINCIPAL_ROLE(410, Category.PRINCIPAL_ROLE),
+  AFTER_ASSIGN_CATALOG_ROLE_TO_PRINCIPAL_ROLE(411, Category.PRINCIPAL_ROLE),
+  BEFORE_REVOKE_CATALOG_ROLE_FROM_PRINCIPAL_ROLE(412, Category.PRINCIPAL_ROLE),
+  AFTER_REVOKE_CATALOG_ROLE_FROM_PRINCIPAL_ROLE(413, Category.PRINCIPAL_ROLE),
+  BEFORE_LIST_ASSIGNEE_PRINCIPALS_FOR_PRINCIPAL_ROLE(414, 
Category.PRINCIPAL_ROLE),
+  AFTER_LIST_ASSIGNEE_PRINCIPALS_FOR_PRINCIPAL_ROLE(415, 
Category.PRINCIPAL_ROLE),
+  BEFORE_LIST_CATALOG_ROLES_FOR_PRINCIPAL_ROLE(416, Category.PRINCIPAL_ROLE),
+  AFTER_LIST_CATALOG_ROLES_FOR_PRINCIPAL_ROLE(417, Category.PRINCIPAL_ROLE),
 
   // Namespace Events
-  BEFORE_CREATE_NAMESPACE(500),
-  AFTER_CREATE_NAMESPACE(501),
-  BEFORE_LIST_NAMESPACES(502),
-  AFTER_LIST_NAMESPACES(503),
-  BEFORE_LOAD_NAMESPACE_METADATA(504),
-  AFTER_LOAD_NAMESPACE_METADATA(505),
-  BEFORE_CHECK_EXISTS_NAMESPACE(506),
-  AFTER_CHECK_EXISTS_NAMESPACE(507),
-  BEFORE_DROP_NAMESPACE(508),
-  AFTER_DROP_NAMESPACE(509),
-  BEFORE_UPDATE_NAMESPACE_PROPERTIES(510),
-  AFTER_UPDATE_NAMESPACE_PROPERTIES(511),
+  BEFORE_CREATE_NAMESPACE(500, Category.NAMESPACE),
+  AFTER_CREATE_NAMESPACE(501, Category.NAMESPACE),
+  BEFORE_LIST_NAMESPACES(502, Category.NAMESPACE),
+  AFTER_LIST_NAMESPACES(503, Category.NAMESPACE),
+  BEFORE_LOAD_NAMESPACE_METADATA(504, Category.NAMESPACE),
+  AFTER_LOAD_NAMESPACE_METADATA(505, Category.NAMESPACE),
+  BEFORE_CHECK_EXISTS_NAMESPACE(506, Category.NAMESPACE),
+  AFTER_CHECK_EXISTS_NAMESPACE(507, Category.NAMESPACE),
+  BEFORE_DROP_NAMESPACE(508, Category.NAMESPACE),
+  AFTER_DROP_NAMESPACE(509, Category.NAMESPACE),
+  BEFORE_UPDATE_NAMESPACE_PROPERTIES(510, Category.NAMESPACE),
+  AFTER_UPDATE_NAMESPACE_PROPERTIES(511, Category.NAMESPACE),
 
   // Table Events
-  BEFORE_CREATE_TABLE(600),
-  AFTER_CREATE_TABLE(601),
-  BEFORE_LIST_TABLES(602),
-  AFTER_LIST_TABLES(603),
-  BEFORE_LOAD_TABLE(604),
-  AFTER_LOAD_TABLE(605),
-  BEFORE_CHECK_EXISTS_TABLE(606),
-  AFTER_CHECK_EXISTS_TABLE(607),
-  BEFORE_DROP_TABLE(608),
-  AFTER_DROP_TABLE(609),
-  BEFORE_REGISTER_TABLE(610),
-  AFTER_REGISTER_TABLE(611),
-  BEFORE_RENAME_TABLE(612),
-  AFTER_RENAME_TABLE(613),
-  BEFORE_UPDATE_TABLE(614),
-  AFTER_UPDATE_TABLE(615),
-  BEFORE_REFRESH_TABLE(616),
-  AFTER_REFRESH_TABLE(617),
+  BEFORE_CREATE_TABLE(600, Category.TABLE),
+  AFTER_CREATE_TABLE(601, Category.TABLE),
+  BEFORE_LIST_TABLES(602, Category.TABLE),
+  AFTER_LIST_TABLES(603, Category.TABLE),
+  BEFORE_LOAD_TABLE(604, Category.TABLE),
+  AFTER_LOAD_TABLE(605, Category.TABLE),
+  BEFORE_CHECK_EXISTS_TABLE(606, Category.TABLE),
+  AFTER_CHECK_EXISTS_TABLE(607, Category.TABLE),
+  BEFORE_DROP_TABLE(608, Category.TABLE),
+  AFTER_DROP_TABLE(609, Category.TABLE),
+  BEFORE_REGISTER_TABLE(610, Category.TABLE),
+  AFTER_REGISTER_TABLE(611, Category.TABLE),
+  BEFORE_RENAME_TABLE(612, Category.TABLE),
+  AFTER_RENAME_TABLE(613, Category.TABLE),
+  BEFORE_UPDATE_TABLE(614, Category.TABLE),
+  AFTER_UPDATE_TABLE(615, Category.TABLE),
+  BEFORE_REFRESH_TABLE(616, Category.TABLE),
+  AFTER_REFRESH_TABLE(617, Category.TABLE),
 
   // View Events
-  BEFORE_CREATE_VIEW(700),
-  AFTER_CREATE_VIEW(701),
-  BEFORE_LIST_VIEWS(702),
-  AFTER_LIST_VIEWS(703),
-  BEFORE_LOAD_VIEW(704),
-  AFTER_LOAD_VIEW(705),
-  BEFORE_CHECK_EXISTS_VIEW(706),
-  AFTER_CHECK_EXISTS_VIEW(707),
-  BEFORE_DROP_VIEW(708),
-  AFTER_DROP_VIEW(709),
-  BEFORE_RENAME_VIEW(710),
-  AFTER_RENAME_VIEW(711),
-  BEFORE_REPLACE_VIEW(712),
-  AFTER_REPLACE_VIEW(713),
-  BEFORE_REFRESH_VIEW(714),
-  AFTER_REFRESH_VIEW(715),
+  BEFORE_CREATE_VIEW(700, Category.VIEW),
+  AFTER_CREATE_VIEW(701, Category.VIEW),
+  BEFORE_LIST_VIEWS(702, Category.VIEW),
+  AFTER_LIST_VIEWS(703, Category.VIEW),
+  BEFORE_LOAD_VIEW(704, Category.VIEW),
+  AFTER_LOAD_VIEW(705, Category.VIEW),
+  BEFORE_CHECK_EXISTS_VIEW(706, Category.VIEW),
+  AFTER_CHECK_EXISTS_VIEW(707, Category.VIEW),
+  BEFORE_DROP_VIEW(708, Category.VIEW),
+  AFTER_DROP_VIEW(709, Category.VIEW),
+  BEFORE_RENAME_VIEW(710, Category.VIEW),
+  AFTER_RENAME_VIEW(711, Category.VIEW),
+  BEFORE_REPLACE_VIEW(712, Category.VIEW),
+  AFTER_REPLACE_VIEW(713, Category.VIEW),
+  BEFORE_REFRESH_VIEW(714, Category.VIEW),
+  AFTER_REFRESH_VIEW(715, Category.VIEW),
 
   // Credential Events
-  BEFORE_LOAD_CREDENTIALS(800),
-  AFTER_LOAD_CREDENTIALS(801),
+  BEFORE_LOAD_CREDENTIALS(800, Category.CREDENTIAL),
+  AFTER_LOAD_CREDENTIALS(801, Category.CREDENTIAL),
   // Transaction Events
-  BEFORE_COMMIT_TRANSACTION(900),
-  AFTER_COMMIT_TRANSACTION(901),
+  BEFORE_COMMIT_TRANSACTION(900, Category.TRANSACTION),
+  AFTER_COMMIT_TRANSACTION(901, Category.TRANSACTION),
   // Notification Events
-  BEFORE_SEND_NOTIFICATION(1000),
-  AFTER_SEND_NOTIFICATION(1001),
+  BEFORE_SEND_NOTIFICATION(1000, Category.NOTIFICATION),
+  AFTER_SEND_NOTIFICATION(1001, Category.NOTIFICATION),
 
   // Configuration Events
-  BEFORE_GET_CONFIG(1100),
-  AFTER_GET_CONFIG(1101),
+  BEFORE_GET_CONFIG(1100, Category.CONFIG),
+  AFTER_GET_CONFIG(1101, Category.CONFIG),
 
   // Policy Events
-  BEFORE_CREATE_POLICY(1200),
-  AFTER_CREATE_POLICY(1201),
-  BEFORE_LIST_POLICIES(1202),
-  AFTER_LIST_POLICIES(1203),
-  BEFORE_LOAD_POLICY(1204),
-  AFTER_LOAD_POLICY(1205),
-  BEFORE_UPDATE_POLICY(1206),
-  AFTER_UPDATE_POLICY(1207),
-  BEFORE_DROP_POLICY(1208),
-  AFTER_DROP_POLICY(1209),
-  BEFORE_ATTACH_POLICY(1210),
-  AFTER_ATTACH_POLICY(1211),
-  BEFORE_DETACH_POLICY(1212),
-  AFTER_DETACH_POLICY(1213),
-  BEFORE_GET_APPLICABLE_POLICIES(1214),
-  AFTER_GET_APPLICABLE_POLICIES(1215),
+  BEFORE_CREATE_POLICY(1200, Category.POLICY),
+  AFTER_CREATE_POLICY(1201, Category.POLICY),
+  BEFORE_LIST_POLICIES(1202, Category.POLICY),
+  AFTER_LIST_POLICIES(1203, Category.POLICY),
+  BEFORE_LOAD_POLICY(1204, Category.POLICY),
+  AFTER_LOAD_POLICY(1205, Category.POLICY),
+  BEFORE_UPDATE_POLICY(1206, Category.POLICY),
+  AFTER_UPDATE_POLICY(1207, Category.POLICY),
+  BEFORE_DROP_POLICY(1208, Category.POLICY),
+  AFTER_DROP_POLICY(1209, Category.POLICY),
+  BEFORE_ATTACH_POLICY(1210, Category.POLICY),
+  AFTER_ATTACH_POLICY(1211, Category.POLICY),
+  BEFORE_DETACH_POLICY(1212, Category.POLICY),
+  AFTER_DETACH_POLICY(1213, Category.POLICY),
+  BEFORE_GET_APPLICABLE_POLICIES(1214, Category.POLICY),
+  AFTER_GET_APPLICABLE_POLICIES(1215, Category.POLICY),
 
   // Generic Table Events
-  BEFORE_CREATE_GENERIC_TABLE(1300),
-  AFTER_CREATE_GENERIC_TABLE(1301),
-  BEFORE_DROP_GENERIC_TABLE(1302),
-  AFTER_DROP_GENERIC_TABLE(1303),
-  BEFORE_LIST_GENERIC_TABLES(1304),
-  AFTER_LIST_GENERIC_TABLES(1305),
-  BEFORE_LOAD_GENERIC_TABLE(1306),
-  AFTER_LOAD_GENERIC_TABLE(1307),
+  BEFORE_CREATE_GENERIC_TABLE(1300, Category.GENERIC_TABLE),
+  AFTER_CREATE_GENERIC_TABLE(1301, Category.GENERIC_TABLE),
+  BEFORE_DROP_GENERIC_TABLE(1302, Category.GENERIC_TABLE),
+  AFTER_DROP_GENERIC_TABLE(1303, Category.GENERIC_TABLE),
+  BEFORE_LIST_GENERIC_TABLES(1304, Category.GENERIC_TABLE),
+  AFTER_LIST_GENERIC_TABLES(1305, Category.GENERIC_TABLE),
+  BEFORE_LOAD_GENERIC_TABLE(1306, Category.GENERIC_TABLE),
+  AFTER_LOAD_GENERIC_TABLE(1307, Category.GENERIC_TABLE),
 
   // Task Execution Events
-  BEFORE_ATTEMPT_TASK(1400),
-  AFTER_ATTEMPT_TASK(1401),
+  BEFORE_ATTEMPT_TASK(1400, Category.TASK_EXECUTION),
+  AFTER_ATTEMPT_TASK(1401, Category.TASK_EXECUTION),
 
   // Rate Limiting Events
-  BEFORE_LIMIT_REQUEST_RATE(1500);
+  BEFORE_LIMIT_REQUEST_RATE(1500, Category.RATE_LIMITING);
 
   private final int code;
+  private final Category category;
 
-  private PolarisEventType(int code) {
+  PolarisEventType(int code, Category category) {
     this.code = code;
+    this.category = category;
   }
 
   public int code() {
     return code;
   }
+
+  public Category category() {
+    return category;
+  }
+
+  public static Set<PolarisEventType> typesOfCategory(Category category) {

Review Comment:
   nit: we could probably pre-compute this on startup to reduce this 
filter+collect logic during runtime since this will always be static.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to