This is an automated email from the ASF dual-hosted git repository.

fanng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new 914e69b08e [#6759] test(core): Support role event to Gravitino server 
(#6851)
914e69b08e is described below

commit 914e69b08e03509e6c8904189b6a103bd7ac55db
Author: Lord of Abyss <103809695+abyss-l...@users.noreply.github.com>
AuthorDate: Wed Apr 9 11:41:03 2025 +0800

    [#6759] test(core): Support role event to Gravitino server (#6851)
    
    ### What changes were proposed in this pull request?
    
    Support role event to Gravitino server
    
    ### Why are the changes needed?
    
    Fix: #6759
    
    ### Does this PR introduce _any_ user-facing change?
    
    user can listen to `RoleEvent`.
    
    ### How was this patch tested?
    
    local ut.
---
 .../api/event/AccessControlEventDispatcher.java    |  47 ++++--
 .../listener/api/event/CreateRoleEvent.java        |  61 ++++++++
 .../listener/api/event/DeleteRoleEvent.java        |  73 +++++++++
 .../gravitino/listener/api/event/GetRoleEvent.java |  62 ++++++++
 ...egesPreEvent.java => GrantPrivilegesEvent.java} |  53 +++----
 .../api/event/GrantPrivilegesPreEvent.java         |  10 +-
 .../listener/api/event/ListRoleNamesEvent.java     |  74 +++++++++
 ...gesPreEvent.java => RevokePrivilegesEvent.java} |  48 +++---
 .../api/event/RevokePrivilegesPreEvent.java        |  10 +-
 .../gravitino/listener/api/event/RoleEvent.java    |  50 ++++++
 .../gravitino/listener/api/info/RoleInfo.java      |  80 ++++++++++
 .../listener/api/event/TestRoleEvent.java          | 169 ++++++++++++++++++++-
 docs/gravitino-server-config.md                    |  25 +--
 13 files changed, 670 insertions(+), 92 deletions(-)

diff --git 
a/core/src/main/java/org/apache/gravitino/listener/api/event/AccessControlEventDispatcher.java
 
b/core/src/main/java/org/apache/gravitino/listener/api/event/AccessControlEventDispatcher.java
index d6db8bfe89..cd5d1613f3 100644
--- 
a/core/src/main/java/org/apache/gravitino/listener/api/event/AccessControlEventDispatcher.java
+++ 
b/core/src/main/java/org/apache/gravitino/listener/api/event/AccessControlEventDispatcher.java
@@ -40,6 +40,7 @@ import 
org.apache.gravitino.exceptions.RoleAlreadyExistsException;
 import org.apache.gravitino.exceptions.UserAlreadyExistsException;
 import org.apache.gravitino.listener.EventBus;
 import org.apache.gravitino.listener.api.info.GroupInfo;
+import org.apache.gravitino.listener.api.info.RoleInfo;
 import org.apache.gravitino.listener.api.info.UserInfo;
 import org.apache.gravitino.utils.PrincipalUtils;
 
@@ -340,8 +341,10 @@ public class AccessControlEventDispatcher implements 
AccessControlDispatcher {
     eventBus.dispatchEvent(
         new CreateRolePreEvent(initiator, metalake, role, properties, 
securableObjects));
     try {
-      // TODO: add Event
-      return dispatcher.createRole(metalake, role, properties, 
securableObjects);
+      Role roleObject = dispatcher.createRole(metalake, role, properties, 
securableObjects);
+      eventBus.dispatchEvent(new CreateRoleEvent(initiator, metalake, new 
RoleInfo(roleObject)));
+
+      return roleObject;
     } catch (Exception e) {
       // TODO: add failure event
       throw e;
@@ -356,8 +359,10 @@ public class AccessControlEventDispatcher implements 
AccessControlDispatcher {
 
     eventBus.dispatchEvent(new GetRolePreEvent(initiator, metalake, role));
     try {
-      // TODO: add Event
-      return dispatcher.getRole(metalake, role);
+      Role roleObject = dispatcher.getRole(metalake, role);
+      eventBus.dispatchEvent(new GetRoleEvent(initiator, metalake, new 
RoleInfo(roleObject)));
+
+      return roleObject;
     } catch (Exception e) {
       // TODO: add failure event
       throw e;
@@ -371,8 +376,10 @@ public class AccessControlEventDispatcher implements 
AccessControlDispatcher {
 
     eventBus.dispatchEvent(new DeleteRolePreEvent(initiator, metalake, role));
     try {
-      // TODO: add Event
-      return dispatcher.deleteRole(metalake, role);
+      boolean isExists = dispatcher.deleteRole(metalake, role);
+      eventBus.dispatchEvent(new DeleteRoleEvent(initiator, metalake, role, 
isExists));
+
+      return isExists;
     } catch (Exception e) {
       // TODO: add failure event
       throw e;
@@ -386,8 +393,10 @@ public class AccessControlEventDispatcher implements 
AccessControlDispatcher {
 
     eventBus.dispatchEvent(new ListRoleNamesPreEvent(initiator, metalake));
     try {
-      // TODO: add Event
-      return dispatcher.listRoleNames(metalake);
+      String[] roleNames = dispatcher.listRoleNames(metalake);
+      eventBus.dispatchEvent(new ListRoleNamesEvent(initiator, metalake));
+
+      return roleNames;
     } catch (Exception e) {
       // TODO: add failure event
       throw e;
@@ -402,8 +411,10 @@ public class AccessControlEventDispatcher implements 
AccessControlDispatcher {
 
     eventBus.dispatchEvent(new ListRoleNamesPreEvent(initiator, metalake, 
object));
     try {
-      // TODO: add Event
-      return dispatcher.listRoleNamesByObject(metalake, object);
+      String[] roleNames = dispatcher.listRoleNamesByObject(metalake, object);
+      eventBus.dispatchEvent(new ListRoleNamesEvent(initiator, metalake, 
object));
+
+      return roleNames;
     } catch (Exception e) {
       // TODO: add failure event
       throw e;
@@ -420,8 +431,12 @@ public class AccessControlEventDispatcher implements 
AccessControlDispatcher {
     eventBus.dispatchEvent(
         new GrantPrivilegesPreEvent(initiator, metalake, role, object, 
privileges));
     try {
-      // TODO: add Event
-      return dispatcher.grantPrivilegeToRole(metalake, role, object, 
privileges);
+      Role roleObject = dispatcher.grantPrivilegeToRole(metalake, role, 
object, privileges);
+      eventBus.dispatchEvent(
+          new GrantPrivilegesEvent(
+              initiator, metalake, new RoleInfo(roleObject), privileges, 
object));
+
+      return roleObject;
     } catch (Exception e) {
       // TODO: add failure event
       throw e;
@@ -438,8 +453,12 @@ public class AccessControlEventDispatcher implements 
AccessControlDispatcher {
     eventBus.dispatchEvent(
         new RevokePrivilegesPreEvent(initiator, metalake, role, object, 
privileges));
     try {
-      // TODO: add Event
-      return dispatcher.revokePrivilegesFromRole(metalake, role, object, 
privileges);
+      Role roleObject = dispatcher.revokePrivilegesFromRole(metalake, role, 
object, privileges);
+      eventBus.dispatchEvent(
+          new RevokePrivilegesEvent(
+              initiator, metalake, new RoleInfo(roleObject), object, 
privileges));
+
+      return roleObject;
     } catch (Exception e) {
       // TODO: add failure event
       throw e;
diff --git 
a/core/src/main/java/org/apache/gravitino/listener/api/event/CreateRoleEvent.java
 
b/core/src/main/java/org/apache/gravitino/listener/api/event/CreateRoleEvent.java
new file mode 100644
index 0000000000..527e122f6a
--- /dev/null
+++ 
b/core/src/main/java/org/apache/gravitino/listener/api/event/CreateRoleEvent.java
@@ -0,0 +1,61 @@
+/*
+ * 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.gravitino.listener.api.event;
+
+import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.listener.api.info.RoleInfo;
+import org.apache.gravitino.utils.NameIdentifierUtil;
+
+/** Represents an event triggered after a role is successfully created. */
+@DeveloperApi
+public class CreateRoleEvent extends RoleEvent {
+  private final RoleInfo createdRoleInfo;
+
+  /**
+   * Constructs a new {@code CreateRoleEvent} instance.
+   *
+   * @param initiator the user who initiated the event.
+   * @param metalake the metalake name where the role was created.
+   * @param createdRoleInfo the information of the created role.
+   */
+  public CreateRoleEvent(String initiator, String metalake, RoleInfo 
createdRoleInfo) {
+    super(initiator, NameIdentifierUtil.ofRole(metalake, 
createdRoleInfo.roleName()));
+    this.createdRoleInfo = createdRoleInfo;
+  }
+
+  /**
+   * Returns the created role information.
+   *
+   * @return the {@code RoleInfo} instance containing details of the created 
role.
+   */
+  public RoleInfo createdRoleInfo() {
+    return createdRoleInfo;
+  }
+
+  /**
+   * Returns the operation type of this event.
+   *
+   * @return the operation type.
+   */
+  @Override
+  public OperationType operationType() {
+    return OperationType.CREATE_ROLE;
+  }
+}
diff --git 
a/core/src/main/java/org/apache/gravitino/listener/api/event/DeleteRoleEvent.java
 
b/core/src/main/java/org/apache/gravitino/listener/api/event/DeleteRoleEvent.java
new file mode 100644
index 0000000000..839070c495
--- /dev/null
+++ 
b/core/src/main/java/org/apache/gravitino/listener/api/event/DeleteRoleEvent.java
@@ -0,0 +1,73 @@
+/*
+ * 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.gravitino.listener.api.event;
+
+import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.utils.NameIdentifierUtil;
+
+/** Represents an event triggered after a role is successfully deleted. */
+@DeveloperApi
+public class DeleteRoleEvent extends RoleEvent {
+  private final String roleName;
+  private final boolean isExists;
+
+  /**
+   * Constructs a new {@code DeleteRoleEvent} instance.
+   *
+   * @param initiator the user who initiated the event.
+   * @param metalake the metalake name where the role was deleted.
+   * @param roleName the name of the deleted role.
+   * @param isExists a flag indicating whether the role existed at the time of 
deletion.
+   */
+  public DeleteRoleEvent(String initiator, String metalake, String roleName, 
boolean isExists) {
+    super(initiator, NameIdentifierUtil.ofRole(metalake, roleName));
+
+    this.roleName = roleName;
+    this.isExists = isExists;
+  }
+
+  /**
+   * Returns a flag indicating whether the role existed at the time of 
deletion.
+   *
+   * @return {@code true} if the role existed; {@code false} otherwise.
+   */
+  public boolean isExists() {
+    return isExists;
+  }
+
+  /**
+   * Returns the name of the deleted role.
+   *
+   * @return the name of the deleted role.
+   */
+  public String roleName() {
+    return roleName;
+  }
+
+  /**
+   * Returns the operation type of this event.
+   *
+   * @return the operation type.
+   */
+  @Override
+  public OperationType operationType() {
+    return OperationType.DELETE_ROLE;
+  }
+}
diff --git 
a/core/src/main/java/org/apache/gravitino/listener/api/event/GetRoleEvent.java 
b/core/src/main/java/org/apache/gravitino/listener/api/event/GetRoleEvent.java
new file mode 100644
index 0000000000..6a30400e6f
--- /dev/null
+++ 
b/core/src/main/java/org/apache/gravitino/listener/api/event/GetRoleEvent.java
@@ -0,0 +1,62 @@
+/*
+ * 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.gravitino.listener.api.event;
+
+import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.listener.api.info.RoleInfo;
+import org.apache.gravitino.utils.NameIdentifierUtil;
+
+/** Represents an event triggered after a role is successfully loaded. */
+@DeveloperApi
+public class GetRoleEvent extends RoleEvent {
+  private final RoleInfo loadedRoleInfo;
+
+  /**
+   * Constructs a new {@code GetRoleEvent} instance.
+   *
+   * @param initiator the user who initiated the event.
+   * @param metalake the metalake name from which the role was loaded.
+   * @param loadedRoleInfo the {@code RoleInfo} instance of the loaded role.
+   */
+  public GetRoleEvent(String initiator, String metalake, RoleInfo 
loadedRoleInfo) {
+    super(initiator, NameIdentifierUtil.ofRole(metalake, 
loadedRoleInfo.roleName()));
+
+    this.loadedRoleInfo = loadedRoleInfo;
+  }
+
+  /**
+   * Returns the role information of the loaded role.
+   *
+   * @return the {@code RoleInfo} instance of the loaded role.
+   */
+  public RoleInfo roleInfo() {
+    return loadedRoleInfo;
+  }
+
+  /**
+   * Returns the operation type of this event.
+   *
+   * @return the operation type.
+   */
+  @Override
+  public OperationType operationType() {
+    return OperationType.GET_ROLE;
+  }
+}
diff --git 
a/core/src/main/java/org/apache/gravitino/listener/api/event/GrantPrivilegesPreEvent.java
 
b/core/src/main/java/org/apache/gravitino/listener/api/event/GrantPrivilegesEvent.java
similarity index 55%
copy from 
core/src/main/java/org/apache/gravitino/listener/api/event/GrantPrivilegesPreEvent.java
copy to 
core/src/main/java/org/apache/gravitino/listener/api/event/GrantPrivilegesEvent.java
index 3f33c8cce4..33ca0b66ea 100644
--- 
a/core/src/main/java/org/apache/gravitino/listener/api/event/GrantPrivilegesPreEvent.java
+++ 
b/core/src/main/java/org/apache/gravitino/listener/api/event/GrantPrivilegesEvent.java
@@ -23,63 +23,60 @@ import java.util.Set;
 import org.apache.gravitino.MetadataObject;
 import org.apache.gravitino.annotation.DeveloperApi;
 import org.apache.gravitino.authorization.Privilege;
+import org.apache.gravitino.listener.api.info.RoleInfo;
 import org.apache.gravitino.utils.NameIdentifierUtil;
 
-/**
- * Represents an event generated before granting a set of privileges to a 
role. This class
- * encapsulates the details of the privilege granting event prior to its 
execution.
- */
+/** Represents an event triggered after privileges are granted to a role. */
 @DeveloperApi
-public class GrantPrivilegesPreEvent extends RolePreEvent {
-  private final String roleName;
+public class GrantPrivilegesEvent extends RoleEvent {
+  private final RoleInfo grantedRoleInfo;
   private final MetadataObject object;
   private final Set<Privilege> privileges;
 
   /**
-   * Constructs a new {@link GrantPrivilegesPreEvent} instance with the 
specified initiator,
-   * identifier, role name, object, and privileges.
+   * Constructs a new {@code GrantPrivilegesEvent} instance.
    *
-   * @param initiator The name of the user who initiated the event.
-   * @param metalake The name of the metalake.
-   * @param roleName The name of the role to which privileges will be granted.
-   * @param object The {@link MetadataObject} instance related to the role.
-   * @param privileges The set of privileges to grant to the role.
+   * @param initiator the user who initiated the event.
+   * @param metalake the metalake name where the event occurred.
+   * @param grantedRoleInfo the {@code RoleInfo} of the role that was granted 
privileges.
+   * @param privileges the set of privileges granted to the role.
+   * @param object the {@code MetadataObject} associated with the role.
    */
-  public GrantPrivilegesPreEvent(
+  public GrantPrivilegesEvent(
       String initiator,
       String metalake,
-      String roleName,
-      MetadataObject object,
-      Set<Privilege> privileges) {
-    super(initiator, NameIdentifierUtil.ofRole(metalake, roleName));
+      RoleInfo grantedRoleInfo,
+      Set<Privilege> privileges,
+      MetadataObject object) {
+    super(initiator, NameIdentifierUtil.ofRole(metalake, 
grantedRoleInfo.roleName()));
 
-    this.roleName = roleName;
-    this.object = object;
+    this.grantedRoleInfo = grantedRoleInfo;
     this.privileges = privileges;
+    this.object = object;
   }
 
   /**
-   * Returns the name of the role.
+   * Returns the role information of the role that was granted privileges.
    *
-   * @return The name of the role to which privileges will be granted.
+   * @return the {@code RoleInfo} instance containing details of the granted 
role.
    */
-  public String roleName() {
-    return roleName;
+  public RoleInfo grantedRoleInfo() {
+    return grantedRoleInfo;
   }
 
   /**
-   * Returns the {@link MetadataObject} instance.
+   * Returns the metadata object associated with the role.
    *
-   * @return The {@link MetadataObject} instance related to the role.
+   * @return the {@code MetadataObject} instance.
    */
   public MetadataObject object() {
     return object;
   }
 
   /**
-   * Returns the set of privileges to grant.
+   * Returns the set of privileges granted to the role.
    *
-   * @return The set of privileges to grant to the role.
+   * @return a set of {@code Privilege} instances.
    */
   public Set<Privilege> privileges() {
     return privileges;
diff --git 
a/core/src/main/java/org/apache/gravitino/listener/api/event/GrantPrivilegesPreEvent.java
 
b/core/src/main/java/org/apache/gravitino/listener/api/event/GrantPrivilegesPreEvent.java
index 3f33c8cce4..262bd80eaf 100644
--- 
a/core/src/main/java/org/apache/gravitino/listener/api/event/GrantPrivilegesPreEvent.java
+++ 
b/core/src/main/java/org/apache/gravitino/listener/api/event/GrantPrivilegesPreEvent.java
@@ -32,7 +32,7 @@ import org.apache.gravitino.utils.NameIdentifierUtil;
 @DeveloperApi
 public class GrantPrivilegesPreEvent extends RolePreEvent {
   private final String roleName;
-  private final MetadataObject object;
+  private final MetadataObject metadataObject;
   private final Set<Privilege> privileges;
 
   /**
@@ -42,19 +42,19 @@ public class GrantPrivilegesPreEvent extends RolePreEvent {
    * @param initiator The name of the user who initiated the event.
    * @param metalake The name of the metalake.
    * @param roleName The name of the role to which privileges will be granted.
-   * @param object The {@link MetadataObject} instance related to the role.
+   * @param metadataObject The {@link MetadataObject} instance related to the 
role.
    * @param privileges The set of privileges to grant to the role.
    */
   public GrantPrivilegesPreEvent(
       String initiator,
       String metalake,
       String roleName,
-      MetadataObject object,
+      MetadataObject metadataObject,
       Set<Privilege> privileges) {
     super(initiator, NameIdentifierUtil.ofRole(metalake, roleName));
 
     this.roleName = roleName;
-    this.object = object;
+    this.metadataObject = metadataObject;
     this.privileges = privileges;
   }
 
@@ -73,7 +73,7 @@ public class GrantPrivilegesPreEvent extends RolePreEvent {
    * @return The {@link MetadataObject} instance related to the role.
    */
   public MetadataObject object() {
-    return object;
+    return metadataObject;
   }
 
   /**
diff --git 
a/core/src/main/java/org/apache/gravitino/listener/api/event/ListRoleNamesEvent.java
 
b/core/src/main/java/org/apache/gravitino/listener/api/event/ListRoleNamesEvent.java
new file mode 100644
index 0000000000..9b59c70fe0
--- /dev/null
+++ 
b/core/src/main/java/org/apache/gravitino/listener/api/event/ListRoleNamesEvent.java
@@ -0,0 +1,74 @@
+/*
+ * 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.gravitino.listener.api.event;
+
+import java.util.Optional;
+import org.apache.gravitino.MetadataObject;
+import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.utils.NameIdentifierUtil;
+
+/** Represents an event triggered after role names are listed. */
+@DeveloperApi
+public class ListRoleNamesEvent extends RoleEvent {
+  private final Optional<MetadataObject> object;
+
+  /**
+   * Constructs a new {@code ListRoleNamesEvent} instance without a related 
metadata object.
+   *
+   * @param initiator the user who triggered the event.
+   * @param metalake the metalake name where the roles are listed.
+   */
+  public ListRoleNamesEvent(String initiator, String metalake) {
+    this(initiator, metalake, null);
+  }
+
+  /**
+   * Constructs a new {@code ListRoleNamesEvent} instance with the specified 
metadata object.
+   *
+   * @param initiator the user who triggered the event.
+   * @param metalake the metalake name where the roles are listed.
+   * @param object the {@code MetadataObject} related to the role names.
+   */
+  protected ListRoleNamesEvent(String initiator, String metalake, 
MetadataObject object) {
+    super(initiator, NameIdentifierUtil.ofMetalake(metalake));
+
+    this.object = Optional.ofNullable(object);
+  }
+
+  /**
+   * Returns the {@code MetadataObject} related to the role names.
+   *
+   * @return an {@code Optional} containing the {@code MetadataObject} if 
present, otherwise an
+   *     empty {@code Optional}.
+   */
+  public Optional<MetadataObject> object() {
+    return object;
+  }
+
+  /**
+   * Returns the operation type of this event.
+   *
+   * @return the operation type.
+   */
+  @Override
+  public OperationType operationType() {
+    return OperationType.LIST_ROLE_NAMES;
+  }
+}
diff --git 
a/core/src/main/java/org/apache/gravitino/listener/api/event/RevokePrivilegesPreEvent.java
 
b/core/src/main/java/org/apache/gravitino/listener/api/event/RevokePrivilegesEvent.java
similarity index 57%
copy from 
core/src/main/java/org/apache/gravitino/listener/api/event/RevokePrivilegesPreEvent.java
copy to 
core/src/main/java/org/apache/gravitino/listener/api/event/RevokePrivilegesEvent.java
index 260eb374f0..e7b37b559f 100644
--- 
a/core/src/main/java/org/apache/gravitino/listener/api/event/RevokePrivilegesPreEvent.java
+++ 
b/core/src/main/java/org/apache/gravitino/listener/api/event/RevokePrivilegesEvent.java
@@ -23,62 +23,60 @@ import java.util.Set;
 import org.apache.gravitino.MetadataObject;
 import org.apache.gravitino.annotation.DeveloperApi;
 import org.apache.gravitino.authorization.Privilege;
+import org.apache.gravitino.listener.api.info.RoleInfo;
 import org.apache.gravitino.utils.NameIdentifierUtil;
 
-/**
- * Represents an event generated before revoking a set of privileges from a 
role. This class
- * encapsulates the details of the privilege revocation event prior to its 
execution.
- */
+/** Represents an event triggered after privileges are revoked from a role. */
 @DeveloperApi
-public class RevokePrivilegesPreEvent extends RolePreEvent {
-  private final String roleName;
+public class RevokePrivilegesEvent extends RoleEvent {
+  private final RoleInfo revokedRoleInfo;
   private final MetadataObject object;
   private final Set<Privilege> privileges;
 
   /**
-   * Constructs a new {@link RevokePrivilegesPreEvent} instance with the 
specified initiator,
-   * identifier, role name, object, and privileges.
+   * Constructs a new {@code RevokePrivilegesEvent} instance.
    *
-   * @param initiator The user who initiated the event.
-   * @param metalake The name of the metalake.
-   * @param roleName The name of the role from which privileges will be 
revoked.
-   * @param object The {@link MetadataObject} instance related to the role.
-   * @param privileges The set of privileges to revoke from the role.
+   * @param initiator the user who initiated the event.
+   * @param metalake the metalake name where the event occurred.
+   * @param revokedRoleInfo the {@code RoleInfo} of the role from which 
privileges were revoked.
+   * @param object the {@code MetadataObject} associated with the role.
+   * @param privileges the set of privileges that were revoked.
    */
-  public RevokePrivilegesPreEvent(
+  public RevokePrivilegesEvent(
       String initiator,
       String metalake,
-      String roleName,
+      RoleInfo revokedRoleInfo,
       MetadataObject object,
       Set<Privilege> privileges) {
-    super(initiator, NameIdentifierUtil.ofRole(metalake, roleName));
-    this.roleName = roleName;
+    super(initiator, NameIdentifierUtil.ofRole(metalake, 
revokedRoleInfo.roleName()));
+
+    this.revokedRoleInfo = revokedRoleInfo;
     this.object = object;
     this.privileges = privileges;
   }
 
   /**
-   * Returns the name of the role.
+   * Returns the role information of the role from which privileges were 
revoked.
    *
-   * @return The name of the role from which privileges will be revoked.
+   * @return the {@code RoleInfo} instance.
    */
-  public String roleName() {
-    return roleName;
+  public RoleInfo revokedRoleInfo() {
+    return revokedRoleInfo;
   }
 
   /**
-   * Returns the {@link MetadataObject} instance related to the role.
+   * Returns the metadata object associated with the role.
    *
-   * @return The {@link MetadataObject} instance associated with the role.
+   * @return the {@code MetadataObject} instance.
    */
   public MetadataObject object() {
     return object;
   }
 
   /**
-   * Returns the set of privileges to revoke.
+   * Returns the set of privileges that were revoked.
    *
-   * @return The set of privileges to revoke from the role.
+   * @return a set of {@code Privilege} instances.
    */
   public Set<Privilege> privileges() {
     return privileges;
diff --git 
a/core/src/main/java/org/apache/gravitino/listener/api/event/RevokePrivilegesPreEvent.java
 
b/core/src/main/java/org/apache/gravitino/listener/api/event/RevokePrivilegesPreEvent.java
index 260eb374f0..adce8ef5ab 100644
--- 
a/core/src/main/java/org/apache/gravitino/listener/api/event/RevokePrivilegesPreEvent.java
+++ 
b/core/src/main/java/org/apache/gravitino/listener/api/event/RevokePrivilegesPreEvent.java
@@ -32,7 +32,7 @@ import org.apache.gravitino.utils.NameIdentifierUtil;
 @DeveloperApi
 public class RevokePrivilegesPreEvent extends RolePreEvent {
   private final String roleName;
-  private final MetadataObject object;
+  private final MetadataObject metadataObject;
   private final Set<Privilege> privileges;
 
   /**
@@ -42,18 +42,18 @@ public class RevokePrivilegesPreEvent extends RolePreEvent {
    * @param initiator The user who initiated the event.
    * @param metalake The name of the metalake.
    * @param roleName The name of the role from which privileges will be 
revoked.
-   * @param object The {@link MetadataObject} instance related to the role.
+   * @param metadataObject The {@link MetadataObject} instance related to the 
role.
    * @param privileges The set of privileges to revoke from the role.
    */
   public RevokePrivilegesPreEvent(
       String initiator,
       String metalake,
       String roleName,
-      MetadataObject object,
+      MetadataObject metadataObject,
       Set<Privilege> privileges) {
     super(initiator, NameIdentifierUtil.ofRole(metalake, roleName));
     this.roleName = roleName;
-    this.object = object;
+    this.metadataObject = metadataObject;
     this.privileges = privileges;
   }
 
@@ -72,7 +72,7 @@ public class RevokePrivilegesPreEvent extends RolePreEvent {
    * @return The {@link MetadataObject} instance associated with the role.
    */
   public MetadataObject object() {
-    return object;
+    return metadataObject;
   }
 
   /**
diff --git 
a/core/src/main/java/org/apache/gravitino/listener/api/event/RoleEvent.java 
b/core/src/main/java/org/apache/gravitino/listener/api/event/RoleEvent.java
new file mode 100644
index 0000000000..bdea7e5f74
--- /dev/null
+++ b/core/src/main/java/org/apache/gravitino/listener/api/event/RoleEvent.java
@@ -0,0 +1,50 @@
+/*
+ * 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.gravitino.listener.api.event;
+
+import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.annotation.DeveloperApi;
+
+/**
+ * Represents an abstract base class for events related to role operations. 
This class extends
+ * {@link Event} to provide a specific context for operations performed by 
roles. It captures
+ * essential information including the user performing the operation and the 
identifier of the role.
+ *
+ * <p>Concrete implementations of this class should provide additional details 
relevant to the
+ * specific type of role operation.
+ */
+@DeveloperApi
+public abstract class RoleEvent extends Event {
+  /**
+   * Constructs a new {@code RoleEvent} instance with the given initiator and 
identifier.
+   *
+   * @param initiator the user who triggered the event.
+   * @param identifier the identifier of the role affected by the event.
+   */
+  protected RoleEvent(String initiator, NameIdentifier identifier) {
+    super(initiator, identifier);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public OperationStatus operationStatus() {
+    return OperationStatus.SUCCESS;
+  }
+}
diff --git 
a/core/src/main/java/org/apache/gravitino/listener/api/info/RoleInfo.java 
b/core/src/main/java/org/apache/gravitino/listener/api/info/RoleInfo.java
new file mode 100644
index 0000000000..c89fd5233d
--- /dev/null
+++ b/core/src/main/java/org/apache/gravitino/listener/api/info/RoleInfo.java
@@ -0,0 +1,80 @@
+/*
+ * 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.gravitino.listener.api.info;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.authorization.Role;
+import org.apache.gravitino.authorization.SecurableObject;
+
+/** Provides read-only access to role information for event listeners. */
+@DeveloperApi
+public class RoleInfo {
+  private final String roleName;
+  private final Map<String, String> properties;
+  private final List<SecurableObject> securableObjects;
+
+  /**
+   * Constructs a new {@code RoleInfo} instance using the given {@code Role} 
object.
+   *
+   * @param roleObject the {@code Role} object providing role information.
+   */
+  public RoleInfo(Role roleObject) {
+    this.roleName = roleObject.name();
+    this.properties =
+        roleObject.properties() == null
+            ? ImmutableMap.of()
+            : ImmutableMap.copyOf(roleObject.properties());
+    this.securableObjects =
+        roleObject.securableObjects() == null
+            ? ImmutableList.of()
+            : ImmutableList.copyOf(roleObject.securableObjects());
+  }
+
+  /**
+   * Returns the role name.
+   *
+   * @return the role name.
+   */
+  public String roleName() {
+    return roleName;
+  }
+
+  /**
+   * Returns the properties associated with the role.
+   *
+   * @return a map containing the role's properties.
+   */
+  public Map<String, String> properties() {
+    return properties;
+  }
+
+  /**
+   * Returns the list of securable objects that belong to the role.
+   *
+   * @return The list of securable objects that belong to the role.
+   */
+  public List<SecurableObject> securableObjects() {
+    return securableObjects;
+  }
+}
diff --git 
a/core/src/test/java/org/apache/gravitino/listener/api/event/TestRoleEvent.java 
b/core/src/test/java/org/apache/gravitino/listener/api/event/TestRoleEvent.java
index e4220e037a..c4d63ffbfa 100644
--- 
a/core/src/test/java/org/apache/gravitino/listener/api/event/TestRoleEvent.java
+++ 
b/core/src/test/java/org/apache/gravitino/listener/api/event/TestRoleEvent.java
@@ -42,6 +42,7 @@ import org.apache.gravitino.authorization.User;
 import org.apache.gravitino.exceptions.GravitinoRuntimeException;
 import org.apache.gravitino.listener.DummyEventListener;
 import org.apache.gravitino.listener.EventBus;
+import org.apache.gravitino.listener.api.info.RoleInfo;
 import org.apache.gravitino.utils.NameIdentifierUtil;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
@@ -92,6 +93,16 @@ public class TestRoleEvent {
     System.out.println(failureDispatcher);
   }
 
+  @Test
+  void testRoleInfo() {
+    role = getMockRole(roleName, properties, securableObjects);
+    RoleInfo roleInfo = new RoleInfo(role);
+
+    Assertions.assertEquals(roleName, roleInfo.roleName());
+    Assertions.assertEquals(properties, roleInfo.properties());
+    Assertions.assertEquals(securableObjects, roleInfo.securableObjects());
+  }
+
   @Test
   void testCreateRole() {
     dispatcher.createRole(
@@ -111,6 +122,26 @@ public class TestRoleEvent {
     Assertions.assertEquals(securableObjects, 
createRolePreEvent.securableObjects());
   }
 
+  @Test
+  void testCreateRoleEvent() {
+    dispatcher.createRole(
+        METALAKE, roleName, ImmutableMap.of("comment", "test comment"), 
securableObjects);
+    Role roleObject = getMockRole(roleName, properties, securableObjects);
+
+    // validate event
+    Event event = dummyEventListener.popPostEvent();
+    Assertions.assertEquals(CreateRoleEvent.class, event.getClass());
+    Assertions.assertEquals(OperationStatus.SUCCESS, event.operationStatus());
+    Assertions.assertEquals(OperationType.CREATE_ROLE, event.operationType());
+
+    CreateRoleEvent createRoleEvent = (CreateRoleEvent) event;
+    Assertions.assertEquals(
+        NameIdentifierUtil.ofRole(METALAKE, roleName), 
createRoleEvent.identifier());
+    RoleInfo roleInfo = createRoleEvent.createdRoleInfo();
+
+    validateRoleInfo(roleInfo, roleObject);
+  }
+
   @Test
   void testDeleteRolePreEvent() {
     dispatcher.deleteRole(METALAKE, roleName);
@@ -127,6 +158,39 @@ public class TestRoleEvent {
     Assertions.assertEquals(roleName, deleteRolePreEvent.roleName());
   }
 
+  @Test
+  void testDeleteRoleEventWithExistIdentifier() {
+    dispatcher.deleteRole(METALAKE, roleName);
+
+    // validate event
+    Event event = dummyEventListener.popPostEvent();
+    Assertions.assertEquals(DeleteRoleEvent.class, event.getClass());
+    Assertions.assertEquals(OperationStatus.SUCCESS, event.operationStatus());
+    Assertions.assertEquals(OperationType.DELETE_ROLE, event.operationType());
+
+    DeleteRoleEvent deleteRoleEvent = (DeleteRoleEvent) event;
+    Assertions.assertEquals(
+        NameIdentifierUtil.ofRole(METALAKE, roleName), 
deleteRoleEvent.identifier());
+    Assertions.assertEquals(roleName, deleteRoleEvent.roleName());
+    Assertions.assertTrue(deleteRoleEvent.isExists());
+  }
+
+  @Test
+  void testDeleteRoleEventWithNotExistIdentifier() {
+    dispatcher.deleteRole(METALAKE, otherRoleName);
+
+    // validate event
+    Event event = dummyEventListener.popPostEvent();
+    Assertions.assertEquals(DeleteRoleEvent.class, event.getClass());
+    Assertions.assertEquals(OperationStatus.SUCCESS, event.operationStatus());
+    Assertions.assertEquals(OperationType.DELETE_ROLE, event.operationType());
+
+    DeleteRoleEvent deleteRoleEvent = (DeleteRoleEvent) event;
+    Assertions.assertEquals(
+        NameIdentifierUtil.ofRole(METALAKE, otherRoleName), 
deleteRoleEvent.identifier());
+    Assertions.assertEquals(otherRoleName, deleteRoleEvent.roleName());
+  }
+
   @Test
   void testGetRolePreEvent() {
     dispatcher.getRole(METALAKE, roleName);
@@ -144,7 +208,25 @@ public class TestRoleEvent {
   }
 
   @Test
-  void testListRolesEvent() {
+  void testGetRoleEvent() {
+    dispatcher.getRole(METALAKE, roleName);
+
+    // validate event
+    Event event = dummyEventListener.popPostEvent();
+    Assertions.assertEquals(GetRoleEvent.class, event.getClass());
+    Assertions.assertEquals(OperationStatus.SUCCESS, event.operationStatus());
+    Assertions.assertEquals(OperationType.GET_ROLE, event.operationType());
+
+    GetRoleEvent getRoleEvent = (GetRoleEvent) event;
+    Assertions.assertEquals(
+        NameIdentifierUtil.ofRole(METALAKE, roleName), 
getRoleEvent.identifier());
+    RoleInfo roleInfo = getRoleEvent.roleInfo();
+
+    validateRoleInfo(roleInfo, roleName, properties, securableObjects);
+  }
+
+  @Test
+  void testListRolesPreEvent() {
     dispatcher.listRoleNames(METALAKE);
 
     // validate pre-event
@@ -159,7 +241,22 @@ public class TestRoleEvent {
   }
 
   @Test
-  void testListRolesFromObject() {
+  void testListRolesEvent() {
+    dispatcher.listRoleNames(METALAKE);
+
+    // validate event
+    Event event = dummyEventListener.popPostEvent();
+    Assertions.assertEquals(ListRoleNamesEvent.class, event.getClass());
+    Assertions.assertEquals(OperationStatus.SUCCESS, event.operationStatus());
+    Assertions.assertEquals(OperationType.LIST_ROLE_NAMES, 
event.operationType());
+
+    ListRoleNamesEvent listRoleNamesEvent = (ListRoleNamesEvent) event;
+    Assertions.assertEquals(identifier, listRoleNamesEvent.identifier());
+    Assertions.assertFalse(listRoleNamesEvent.object().isPresent());
+  }
+
+  @Test
+  void testListRolesFromObjectPreEvent() {
     dispatcher.listRoleNamesByObject(METALAKE, securableObjects.get(0));
 
     // validate pre-event
@@ -174,6 +271,22 @@ public class TestRoleEvent {
     Assertions.assertEquals(securableObjects.get(0), 
listRoleNamesPreEvent.object().get());
   }
 
+  @Test
+  void testListRoleFromObjectEvent() {
+    dispatcher.listRoleNamesByObject(METALAKE, securableObjects.get(0));
+
+    // validate event
+    Event event = dummyEventListener.popPostEvent();
+    Assertions.assertEquals(ListRoleNamesEvent.class, event.getClass());
+    Assertions.assertEquals(OperationStatus.SUCCESS, event.operationStatus());
+    Assertions.assertEquals(OperationType.LIST_ROLE_NAMES, 
event.operationType());
+
+    ListRoleNamesEvent listRoleNamesEvent = (ListRoleNamesEvent) event;
+    Assertions.assertEquals(identifier, listRoleNamesEvent.identifier());
+    Assertions.assertTrue(listRoleNamesEvent.object().isPresent());
+    Assertions.assertEquals(securableObjects.get(0), 
listRoleNamesEvent.object().get());
+  }
+
   @Test
   void testGrantPrivilegesToRole() {
     dispatcher.grantPrivilegeToRole(METALAKE, roleName, metadataObject, 
privileges);
@@ -193,7 +306,24 @@ public class TestRoleEvent {
   }
 
   @Test
-  void testRevokePrivilegesFromRole() {
+  void testGrantPrivilegesToRoleEvent() {
+    dispatcher.grantPrivilegeToRole(METALAKE, roleName, metadataObject, 
privileges);
+
+    // validate event
+    Event event = dummyEventListener.popPostEvent();
+    Assertions.assertEquals(GrantPrivilegesEvent.class, event.getClass());
+    Assertions.assertEquals(OperationStatus.SUCCESS, event.operationStatus());
+    Assertions.assertEquals(OperationType.GRANT_PRIVILEGES, 
event.operationType());
+
+    GrantPrivilegesEvent grantPrivilegesEvent = (GrantPrivilegesEvent) event;
+    Assertions.assertEquals(
+        NameIdentifierUtil.ofRole(METALAKE, roleName), 
grantPrivilegesEvent.identifier());
+    RoleInfo roleInfo = grantPrivilegesEvent.grantedRoleInfo();
+    validateRoleInfo(roleInfo, roleName, properties, securableObjects);
+  }
+
+  @Test
+  void testRevokePrivilegesFromRolePreEvent() {
     dispatcher.revokePrivilegesFromRole(METALAKE, roleName, metadataObject, 
privileges);
 
     // validate pre-event
@@ -210,6 +340,23 @@ public class TestRoleEvent {
     Assertions.assertEquals(privileges, revokePrivilegesPreEvent.privileges());
   }
 
+  @Test
+  void testRevokePrivilegesFromRoleEvent() {
+    dispatcher.revokePrivilegesFromRole(METALAKE, roleName, metadataObject, 
privileges);
+
+    // validate event
+    Event event = dummyEventListener.popPostEvent();
+    Assertions.assertEquals(RevokePrivilegesEvent.class, event.getClass());
+    Assertions.assertEquals(OperationStatus.SUCCESS, event.operationStatus());
+    Assertions.assertEquals(OperationType.REVOKE_PRIVILEGES, 
event.operationType());
+
+    RevokePrivilegesEvent revokePrivilegesEvent = (RevokePrivilegesEvent) 
event;
+    Assertions.assertEquals(
+        NameIdentifierUtil.ofRole(METALAKE, roleName), 
revokePrivilegesEvent.identifier());
+    RoleInfo roleInfo = revokePrivilegesEvent.revokedRoleInfo();
+    validateRoleInfo(roleInfo, roleName, properties, securableObjects);
+  }
+
   private AccessControlEventDispatcher mockRoleDispatcher() {
     AccessControlEventDispatcher dispatcher = 
mock(AccessControlEventDispatcher.class);
     Group mockGroup = getMockGroup(groupName, ImmutableList.of(roleName, 
otherRoleName));
@@ -288,4 +435,20 @@ public class TestRoleEvent {
 
     return mockMetadataObject;
   }
+
+  private void validateRoleInfo(RoleInfo roleinfo, Role roleObject) {
+    Assertions.assertEquals(roleObject.name(), roleinfo.roleName());
+    Assertions.assertEquals(roleObject.properties(), roleinfo.properties());
+    Assertions.assertEquals(roleObject.securableObjects(), 
roleinfo.securableObjects());
+  }
+
+  private void validateRoleInfo(
+      RoleInfo roleinfo,
+      String roleName,
+      Map<String, String> properties,
+      List<SecurableObject> securableObjects) {
+    Assertions.assertEquals(roleName, roleinfo.roleName());
+    Assertions.assertEquals(properties, roleinfo.properties());
+    Assertions.assertEquals(securableObjects, roleinfo.securableObjects());
+  }
 }
diff --git a/docs/gravitino-server-config.md b/docs/gravitino-server-config.md
index db0d5f3132..de56789997 100644
--- a/docs/gravitino-server-config.md
+++ b/docs/gravitino-server-config.md
@@ -118,19 +118,20 @@ Gravitino triggers a pre-event before the operation, a 
post-event after the comp
 
 ##### Post-event
 
-| Operation type                      | Post-event                             
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
-|-------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 [...]
-| table operation                     | `CreateTableEvent`, `AlterTableEvent`, 
`DropTableEvent`, `LoadTableEvent`, `ListTableEvent`, `PurgeTableFailureEvent`, 
`CreateTableFailureEvent`, `AlterTableFailureEvent`, `DropTableFailureEvent`, 
`LoadTableFailureEvent`, `ListTableFailureEvent`, `PurgeTableFailureEvent`      
                                                                                
                                                                                
                [...]
-| fileset operation                   | `CreateFileSetEvent`, 
`AlterFileSetEvent`, `DropFileSetEvent`, `LoadFileSetEvent`, 
`ListFileSetEvent`, `CreateFileSetFailureEvent`, `AlterFileSetFailureEvent`, 
`DropFileSetFailureEvent`, `LoadFileSetFailureEvent`, `ListFileSetFailureEvent` 
                                                                                
                                                                                
                                                     [...]
-| topic operation                     | `CreateTopicEvent`, `AlterTopicEvent`, 
`DropTopicEvent`, `LoadTopicEvent`, `ListTopicEvent`, 
`CreateTopicFailureEvent`, `AlterTopicFailureEvent`, `DropTopicFailureEvent`, 
`LoadTopicFailureEvent`, `ListTopicFailureEvent`                                
                                                                                
                                                                                
                                          [...]
-| schema operation                    | `CreateSchemaEvent`, 
`AlterSchemaEvent`, `DropSchemaEvent`, `LoadSchemaEvent`, `ListSchemaEvent`, 
`CreateSchemaFailureEvent`, `AlterSchemaFailureEvent`, 
`DropSchemaFailureEvent`, `LoadSchemaFailureEvent`, `ListSchemaFailureEvent`    
                                                                                
                                                                                
                                                            [...]
-| catalog operation                   | `CreateCatalogEvent`, 
`AlterCatalogEvent`, `DropCatalogEvent`, `LoadCatalogEvent`, 
`ListCatalogEvent`, `CreateCatalogFailureEvent`, `AlterCatalogFailureEvent`, 
`DropCatalogFailureEvent`, `LoadCatalogFailureEvent`, `ListCatalogFailureEvent` 
                                                                                
                                                                                
                                                     [...]
-| metalake operation                  | `CreateMetalakeEvent`, 
`AlterMetalakeEvent`, `DropMetalakeEvent`, `LoadMetalakeEvent`, 
`ListMetalakeEvent`, `CreateMetalakeFailureEvent`, `AlterMetalakeFailureEvent`, 
`DropMetalakeFailureEvent`, `LoadMetalakeFailureEvent`, 
`ListMetalakeFailureEvent`                                                      
                                                                                
                                                                      [...]
-| Iceberg REST server table operation | `IcebergCreateTableEvent`, 
`IcebergUpdateTableEvent`, `IcebergDropTableEvent`, `IcebergLoadTableEvent`, 
`IcebergListTableEvent`, `IcebergTableExistsEvent`, `IcebergRenameTableEvent`, 
`IcebergCreateTableFailureEvent`, `IcebergUpdateTableFailureEvent`, 
`IcebergDropTableFailureEvent`, `IcebergLoadTableFailureEvent`, 
`IcebergListTableFailureEvent`, `IcebergRenameTableFailureEvent`, 
`IcebergTableExistsFailureEvent`                                        [...]
+| Operation type                      | Post-event                             
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
+|-------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 [...]
+| table operation                     | `CreateTableEvent`, `AlterTableEvent`, 
`DropTableEvent`, `LoadTableEvent`, `ListTableEvent`, `PurgeTableFailureEvent`, 
`CreateTableFailureEvent`, `AlterTableFailureEvent`, `DropTableFailureEvent`, 
`LoadTableFailureEvent`, `ListTableFailureEvent`, `PurgeTableFailureEvent`      
                                                                                
                                                                                
                [...]
+| fileset operation                   | `CreateFileSetEvent`, 
`AlterFileSetEvent`, `DropFileSetEvent`, `LoadFileSetEvent`, 
`ListFileSetEvent`, `CreateFileSetFailureEvent`, `AlterFileSetFailureEvent`, 
`DropFileSetFailureEvent`, `LoadFileSetFailureEvent`, `ListFileSetFailureEvent` 
                                                                                
                                                                                
                                                     [...]
+| topic operation                     | `CreateTopicEvent`, `AlterTopicEvent`, 
`DropTopicEvent`, `LoadTopicEvent`, `ListTopicEvent`, 
`CreateTopicFailureEvent`, `AlterTopicFailureEvent`, `DropTopicFailureEvent`, 
`LoadTopicFailureEvent`, `ListTopicFailureEvent`                                
                                                                                
                                                                                
                                          [...]
+| schema operation                    | `CreateSchemaEvent`, 
`AlterSchemaEvent`, `DropSchemaEvent`, `LoadSchemaEvent`, `ListSchemaEvent`, 
`CreateSchemaFailureEvent`, `AlterSchemaFailureEvent`, 
`DropSchemaFailureEvent`, `LoadSchemaFailureEvent`, `ListSchemaFailureEvent`    
                                                                                
                                                                                
                                                            [...]
+| catalog operation                   | `CreateCatalogEvent`, 
`AlterCatalogEvent`, `DropCatalogEvent`, `LoadCatalogEvent`, 
`ListCatalogEvent`, `CreateCatalogFailureEvent`, `AlterCatalogFailureEvent`, 
`DropCatalogFailureEvent`, `LoadCatalogFailureEvent`, `ListCatalogFailureEvent` 
                                                                                
                                                                                
                                                     [...]
+| metalake operation                  | `CreateMetalakeEvent`, 
`AlterMetalakeEvent`, `DropMetalakeEvent`, `LoadMetalakeEvent`, 
`ListMetalakeEvent`, `CreateMetalakeFailureEvent`, `AlterMetalakeFailureEvent`, 
`DropMetalakeFailureEvent`, `LoadMetalakeFailureEvent`, 
`ListMetalakeFailureEvent`                                                      
                                                                                
                                                                      [...]
+| Iceberg REST server table operation | `IcebergCreateTableEvent`, 
`IcebergUpdateTableEvent`, `IcebergDropTableEvent`, `IcebergLoadTableEvent`, 
`IcebergListTableEvent`, `IcebergTableExistsEvent`, `IcebergRenameTableEvent`, 
`IcebergCreateTableFailureEvent`, `IcebergUpdateTableFailureEvent`, 
`IcebergDropTableFailureEvent`, `IcebergLoadTableFailureEvent`, 
`IcebergListTableFailureEvent`, `IcebergRenameTableFailureEvent`, 
`IcebergTableExistsFailureEvent`                                        [...]
 | tag operation                       | `ListTagsEvent`, `ListTagsInfoEvent`, 
`CreateTagEvent`, `GetTagEvent`, `AlterTagEvent`, `DeleteTagEvent`, 
`ListMetadataObjectsForTagEvent`, `ListTagsForMetadataObjectEvent`, 
`ListTagsInfoForMetadataObjectEvent`, `AssociateTagsForMetadataObjectEvent`, 
`GetTagForMetadataObjectEvent`, `ListTagsFailureEvent`, 
`ListTagInfoFailureEvent`, `CreateTagFailureEvent`, `GetTagFailureEvent`, 
`AlterTagFailureEvent`, `DeleteTagFailureEvent`, `ListMetadataObjectsFo [...]
-| model operation                     | `DeleteModelEvent`,  
`DeleteModelVersionEvent`,  `GetModelEvent`, `GetModelVersionEvent`, 
`LinkModelVersionEvent`, `ListModelEvent`, `ListModelVersionsEvent`,  
`RegisterAndLinkModelEvent`, `RegisterModelEvent`,  `DeleteModelFailureEvent`, 
`DeleteModelVersionFailureEvent`, `GetModelFailureEvent`, 
`GetModelVersionFailureEvent`, `LinkModelVersionFailureEvent`, 
`ListModelFailureEvent`, `ListModelVersionFailureEvent`, 
`RegisterAndLinkModelFailureEvent`, [...]
-| user operation                     | `AddUserEvent`, `GetUserEvent`, 
`ListUserNamesEvent`, `ListUsersEvent`, `RemoveUserEvent`, 
`GrantUserRolesEvent`, `RevokeUserRolesEvent`, `AddUserFailureEvent`, 
`GetUserFailureEvent`, `GrantUserRolesFailureEvent`, 
`ListUserNamesFailureEvent`, `ListUsersFailureEvent`, `RemoveUserFailureEvent`, 
`RevokeUserRolesFailureEvent`                                                   
                                                                                
[...]
-| group operation                     | `AddGroupEvent`, `GetGroupEvent`, 
`ListGroupNamesEvent`, `ListGroupsEvent`, `RemoveGroupEvent`, 
`GrantGroupRolesEvent`, `RevokeGroupRolesEvent`, `AddGroupFailureEvent`, 
`GetGroupFailureEvent`, `GrantGroupRolesFailureEvent`, 
`ListGroupNamesFailureEvent`, `ListGroupsFailureEvent`, 
`RemoveGroupFailureEvent`, `RevokeGroupRolesFailureEvent`                       
                                                                                
             [...]
+| model operation                     | `DeleteModelEvent`,  
`DeleteModelVersionEvent`,  `GetModelEvent`, `GetModelVersionEvent`, 
`LinkModelVersionEvent`, `ListModelEvent`, `ListModelVersionsEvent`,  
`RegisterAndLinkModelEvent`, `RegisterModelEvent`,  `DeleteModelFailureEvent`, 
`DeleteModelVersionFailureEvent`, `GetModelFailureEvent`, 
`GetModelVersionFailureEvent`, `LinkModelVersionFailureEvent`, 
`ListModelFailureEvent`, `ListModelVersionFailureEvent`, 
`RegisterAndLinkModelFailureEvent`, [...]
+| user operation                      | `AddUserEvent`, `GetUserEvent`, 
`ListUserNamesEvent`, `ListUsersEvent`, `RemoveUserEvent`, 
`GrantUserRolesEvent`, `RevokeUserRolesEvent`, `AddUserFailureEvent`, 
`GetUserFailureEvent`, `GrantUserRolesFailureEvent`, 
`ListUserNamesFailureEvent`, `ListUsersFailureEvent`, `RemoveUserFailureEvent`, 
`RevokeUserRolesFailureEvent`                                                   
                                                                               
[...]
+| group operation                     | `AddGroupEvent`, `GetGroupEvent`, 
`ListGroupNamesEvent`, `ListGroupsEvent`, `RemoveGroupEvent`, 
`GrantGroupRolesEvent`, `RevokeGroupRolesEvent`, `AddGroupFailureEvent`, 
`GetGroupFailureEvent`, `GrantGroupRolesFailureEvent`, 
`ListGroupNamesFailureEvent`, `ListGroupsFailureEvent`, 
`RemoveGroupFailureEvent`, `RevokeGroupRolesFailureEvent`                       
                                                                                
             [...]
+| role operation                      | `CreateRoleEvent`, `DeleteRoleEvent`, 
`GetRoleEvent`, `GrantPrivilegesEvent`, `ListRoleNamesEvent`, 
`RevokePrivilegesEvent`                                                         
                                                                                
                                                                                
                                                                                
                                 [...]
 
 
 

Reply via email to