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 4aac9852b4 [#10537] improvement(core): Complete v2 audit operation 
mapping coverage (#10553)
4aac9852b4 is described below

commit 4aac9852b4cff6a4789625f08cda48b5c411da3e
Author: FANNG <[email protected]>
AuthorDate: Wed Apr 1 20:15:45 2026 +0800

    [#10537] improvement(core): Complete v2 audit operation mapping coverage 
(#10553)
    
    ### What changes were proposed in this pull request?
    
    Added explicit v2 audit mappings for all known `OperationType` values in
    `CompatibilityUtils`, expanded `AuditLog.Operation` with the concrete
    audit operation values needed by v2, and added tests to verify all known
    operation types map to a non-unknown audit operation.
    
    ### Why are the changes needed?
    
    The previous v2 compatibility mapping only covered part of the listener
    operation space. Many supported operations still fell back to
    `UNKNOWN_OPERATION`, which made audit output incomplete and
    inconsistent.
    
    Fix: #10537
    
    ### Does this PR introduce _any_ user-facing change?
    
    No. This change only completes internal audit operation mapping for v2
    audit compatibility.
    
    ### How was this patch tested?
    
    ```bash
    IT_SPARK_HOME=/Users/fanng/deploy/demo/spark-3.5.3-bin-hadoop3 \
    IT_SPARK_ARGS='--conf 
spark.jars=/Users/fanng/deploy/demo/jars/iceberg-spark-runtime-3.5_2.12-1.9.2.jar,/Users/fanng/deploy/demo/jars/iceberg-aws-bundle-1.9.2.jar
 --conf 
spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
 --conf spark.sql.catalog.rest=org.apache.iceberg.spark.SparkCatalog --conf 
spark.sql.catalog.rest.type=rest --conf 
spark.sql.catalog.rest.uri=http://127.0.0.1:9001/iceberg/ --conf 
spark.sql.catalog.rest.header.X-Iceberg-Access-Deleg [...]
    IT_TABLE_IDENTIFIER=rest.ab.a1 \
    GRAVITINO_ENV_IT=true \
    ./gradlew :core:test -PskipIT=true --tests 
'org.apache.gravitino.audit.v2.TestCompatibilityUtils'
    ```
    
    ---------
    
    Co-authored-by: fanng <[email protected]>
---
 .../java/org/apache/gravitino/audit/AuditLog.java  | 192 +++++++++++++++++++++
 .../gravitino/audit/v2/CompatibilityUtils.java     | 169 +++++++++++++-----
 .../gravitino/audit/v2/TestCompatibilityUtils.java | 137 +++++++++++++--
 3 files changed, 444 insertions(+), 54 deletions(-)

diff --git a/core/src/main/java/org/apache/gravitino/audit/AuditLog.java 
b/core/src/main/java/org/apache/gravitino/audit/AuditLog.java
index e1b77f5ecb..1d03be7d3e 100644
--- a/core/src/main/java/org/apache/gravitino/audit/AuditLog.java
+++ b/core/src/main/java/org/apache/gravitino/audit/AuditLog.java
@@ -237,6 +237,8 @@ public interface AuditLog {
 
     LIST_SCHEMA,
 
+    SCHEMA_EXISTS,
+
     CREATE_TABLE,
 
     ALTER_TABLE,
@@ -245,12 +247,26 @@ public interface AuditLog {
 
     LOAD_TABLE,
 
+    LOAD_TABLE_CREDENTIAL,
+
+    PLAN_TABLE_SCAN,
+
     PURGE_TABLE,
 
     LIST_TABLE,
 
+    RENAME_TABLE,
+
+    REGISTER_TABLE,
+
+    TABLE_EXISTS,
+
     PARTITION_EXIST,
 
+    ADD_PARTITION,
+
+    DROP_PARTITION,
+
     PURGE_PARTITION,
 
     LIST_PARTITION,
@@ -279,6 +295,182 @@ public interface AuditLog {
 
     LIST_FILESET,
 
+    LIST_FILESET_FILES,
+
+    CREATE_TAG,
+
+    GET_TAG,
+
+    GET_TAG_FOR_METADATA_OBJECT,
+
+    DELETE_TAG,
+
+    ALTER_TAG,
+
+    LIST_TAG,
+
+    ASSOCIATE_TAGS_FOR_METADATA_OBJECT,
+
+    LIST_TAGS_FOR_METADATA_OBJECT,
+
+    LIST_TAGS_INFO_FOR_METADATA_OBJECT,
+
+    LIST_METADATA_OBJECTS_FOR_TAG,
+
+    LIST_TAGS_INFO,
+
+    CREATE_VIEW,
+
+    ALTER_VIEW,
+
+    DROP_VIEW,
+
+    LOAD_VIEW,
+
+    VIEW_EXISTS,
+
+    RENAME_VIEW,
+
+    LIST_VIEW,
+
+    REGISTER_MODEL,
+
+    DELETE_MODEL,
+
+    GET_MODEL,
+
+    LIST_MODEL,
+
+    ALTER_MODEL,
+
+    LINK_MODEL_VERSION,
+
+    DELETE_MODEL_VERSION,
+
+    GET_MODEL_VERSION,
+
+    GET_MODEL_VERSION_URI,
+
+    LIST_MODEL_VERSIONS,
+
+    LIST_MODEL_VERSION_INFOS,
+
+    REGISTER_AND_LINK_MODEL_VERSION,
+
+    ALTER_MODEL_VERSION,
+
+    ADD_USER,
+
+    REMOVE_USER,
+
+    GET_USER,
+
+    LIST_USERS,
+
+    LIST_USER_NAMES,
+
+    GRANT_USER_ROLES,
+
+    REVOKE_USER_ROLES,
+
+    ADD_GROUP,
+
+    REMOVE_GROUP,
+
+    GET_GROUP,
+
+    LIST_GROUPS,
+
+    LIST_GROUP_NAMES,
+
+    GRANT_GROUP_ROLES,
+
+    REVOKE_GROUP_ROLES,
+
+    CREATE_ROLE,
+
+    DELETE_ROLE,
+
+    GET_ROLE,
+
+    LIST_ROLE_NAMES,
+
+    GRANT_PRIVILEGES,
+
+    REVOKE_PRIVILEGES,
+
+    OVERRIDE_PRIVILEGES,
+
+    GET_OWNER,
+
+    SET_OWNER,
+
+    LIST_JOB_TEMPLATES,
+
+    REGISTER_JOB_TEMPLATE,
+
+    GET_JOB_TEMPLATE,
+
+    ALTER_JOB_TEMPLATE,
+
+    DELETE_JOB_TEMPLATE,
+
+    LIST_JOBS,
+
+    RUN_JOB,
+
+    GET_JOB,
+
+    CANCEL_JOB,
+
+    LIST_STATISTICS,
+
+    LIST_PARTITION_STATISTICS,
+
+    DROP_STATISTICS,
+
+    DROP_PARTITION_STATISTICS,
+
+    UPDATE_STATISTICS,
+
+    UPDATE_PARTITION_STATISTICS,
+
+    CREATE_POLICY,
+
+    GET_POLICY,
+
+    ALTER_POLICY,
+
+    DELETE_POLICY,
+
+    ENABLE_POLICY,
+
+    DISABLE_POLICY,
+
+    LIST_POLICY,
+
+    LIST_POLICY_INFO,
+
+    LIST_METADATA_OBJECTS_FOR_POLICY,
+
+    LIST_POLICY_INFOS_FOR_METADATA_OBJECT,
+
+    ASSOCIATE_POLICIES_FOR_METADATA_OBJECT,
+
+    GET_POLICY_FOR_METADATA_OBJECT,
+
+    REGISTER_FUNCTION,
+
+    GET_FUNCTION,
+
+    ALTER_FUNCTION,
+
+    DROP_FUNCTION,
+
+    LIST_FUNCTION,
+
+    LIST_FUNCTION_INFOS,
+
     UNKNOWN_OPERATION;
 
     public static Operation fromEvent(Event event) {
diff --git 
a/core/src/main/java/org/apache/gravitino/audit/v2/CompatibilityUtils.java 
b/core/src/main/java/org/apache/gravitino/audit/v2/CompatibilityUtils.java
index 99c8911012..19f8211c11 100644
--- a/core/src/main/java/org/apache/gravitino/audit/v2/CompatibilityUtils.java
+++ b/core/src/main/java/org/apache/gravitino/audit/v2/CompatibilityUtils.java
@@ -27,9 +27,8 @@ import org.apache.gravitino.listener.api.event.OperationType;
 
 public class CompatibilityUtils {
 
-  private static ImmutableMap<OperationType, Operation> operationTypeMap =
+  private static final ImmutableMap<OperationType, Operation> 
OPERATION_TYPE_MAP =
       ImmutableMap.<OperationType, Operation>builder()
-          // Metalake operation
           .put(OperationType.CREATE_METALAKE, Operation.CREATE_METALAKE)
           .put(OperationType.ALTER_METALAKE, Operation.ALTER_METALAKE)
           .put(OperationType.DROP_METALAKE, Operation.DROP_METALAKE)
@@ -37,71 +36,159 @@ public class CompatibilityUtils {
           .put(OperationType.LIST_METALAKE, Operation.LIST_METALAKE)
           .put(OperationType.ENABLE_METALAKE, Operation.ENABLE_METALAKE)
           .put(OperationType.DISABLE_METALAKE, Operation.DISABLE_METALAKE)
-
-          // Catalog operation
           .put(OperationType.CREATE_CATALOG, Operation.CREATE_CATALOG)
-          .put(OperationType.ALTER_CATALOG, Operation.ALTER_CATALOG)
           .put(OperationType.DROP_CATALOG, Operation.DROP_CATALOG)
+          .put(OperationType.ALTER_CATALOG, Operation.ALTER_CATALOG)
           .put(OperationType.LOAD_CATALOG, Operation.LOAD_CATALOG)
           .put(OperationType.LIST_CATALOG, Operation.LIST_CATALOG)
           .put(OperationType.ENABLE_CATALOG, Operation.ENABLE_CATALOG)
           .put(OperationType.DISABLE_CATALOG, Operation.DISABLE_CATALOG)
-
-          // Schema operation
           .put(OperationType.CREATE_SCHEMA, Operation.CREATE_SCHEMA)
-          .put(OperationType.ALTER_SCHEMA, Operation.ALTER_SCHEMA)
           .put(OperationType.DROP_SCHEMA, Operation.DROP_SCHEMA)
+          .put(OperationType.ALTER_SCHEMA, Operation.ALTER_SCHEMA)
           .put(OperationType.LOAD_SCHEMA, Operation.LOAD_SCHEMA)
           .put(OperationType.LIST_SCHEMA, Operation.LIST_SCHEMA)
-          .put(OperationType.SCHEMA_EXISTS, Operation.UNKNOWN_OPERATION)
-
-          // Table operation
+          .put(OperationType.SCHEMA_EXISTS, Operation.SCHEMA_EXISTS)
           .put(OperationType.CREATE_TABLE, Operation.CREATE_TABLE)
-          .put(OperationType.ALTER_TABLE, Operation.ALTER_TABLE)
           .put(OperationType.DROP_TABLE, Operation.DROP_TABLE)
           .put(OperationType.PURGE_TABLE, Operation.PURGE_TABLE)
           .put(OperationType.LOAD_TABLE, Operation.LOAD_TABLE)
-          .put(OperationType.TABLE_EXISTS, Operation.UNKNOWN_OPERATION)
+          .put(OperationType.LOAD_TABLE_CREDENTIAL, 
Operation.LOAD_TABLE_CREDENTIAL)
+          .put(OperationType.PLAN_TABLE_SCAN, Operation.PLAN_TABLE_SCAN)
           .put(OperationType.LIST_TABLE, Operation.LIST_TABLE)
-          .put(OperationType.RENAME_TABLE, Operation.UNKNOWN_OPERATION)
-          .put(OperationType.REGISTER_TABLE, Operation.UNKNOWN_OPERATION)
-
-          // Partition operation
-          .put(OperationType.ADD_PARTITION, Operation.UNKNOWN_OPERATION)
-          .put(OperationType.DROP_PARTITION, Operation.UNKNOWN_OPERATION)
+          .put(OperationType.ALTER_TABLE, Operation.ALTER_TABLE)
+          .put(OperationType.RENAME_TABLE, Operation.RENAME_TABLE)
+          .put(OperationType.REGISTER_TABLE, Operation.REGISTER_TABLE)
+          .put(OperationType.TABLE_EXISTS, Operation.TABLE_EXISTS)
+          .put(OperationType.CREATE_TAG, Operation.CREATE_TAG)
+          .put(OperationType.GET_TAG, Operation.GET_TAG)
+          .put(OperationType.GET_TAG_FOR_METADATA_OBJECT, 
Operation.GET_TAG_FOR_METADATA_OBJECT)
+          .put(OperationType.DELETE_TAG, Operation.DELETE_TAG)
+          .put(OperationType.ALTER_TAG, Operation.ALTER_TAG)
+          .put(OperationType.LIST_TAG, Operation.LIST_TAG)
+          .put(
+              OperationType.ASSOCIATE_TAGS_FOR_METADATA_OBJECT,
+              Operation.ASSOCIATE_TAGS_FOR_METADATA_OBJECT)
+          .put(OperationType.LIST_TAGS_FOR_METADATA_OBJECT, 
Operation.LIST_TAGS_FOR_METADATA_OBJECT)
+          .put(
+              OperationType.LIST_TAGS_INFO_FOR_METADATA_OBJECT,
+              Operation.LIST_TAGS_INFO_FOR_METADATA_OBJECT)
+          .put(OperationType.LIST_METADATA_OBJECTS_FOR_TAG, 
Operation.LIST_METADATA_OBJECTS_FOR_TAG)
+          .put(OperationType.LIST_TAGS_INFO, Operation.LIST_TAGS_INFO)
+          .put(OperationType.DROP_FILESET, Operation.DROP_FILESET)
+          .put(OperationType.ALTER_FILESET, Operation.ALTER_FILESET)
+          .put(OperationType.CREATE_FILESET, Operation.CREATE_FILESET)
+          .put(OperationType.LIST_FILESET, Operation.LIST_FILESET)
+          .put(OperationType.LIST_FILESET_FILES, Operation.LIST_FILESET_FILES)
+          .put(OperationType.LOAD_FILESET, Operation.LOAD_FILESET)
+          .put(OperationType.GET_FILESET_LOCATION, Operation.GET_FILE_LOCATION)
+          .put(OperationType.ADD_PARTITION, Operation.ADD_PARTITION)
+          .put(OperationType.DROP_PARTITION, Operation.DROP_PARTITION)
           .put(OperationType.PURGE_PARTITION, Operation.PURGE_PARTITION)
-          .put(OperationType.LOAD_PARTITION, Operation.GET_PARTITION)
           .put(OperationType.PARTITION_EXISTS, Operation.PARTITION_EXIST)
+          .put(OperationType.LOAD_PARTITION, Operation.GET_PARTITION)
           .put(OperationType.LIST_PARTITION, Operation.LIST_PARTITION)
           .put(OperationType.LIST_PARTITION_NAMES, Operation.LIST_PARTITION)
-
-          // Fileset operation
-          .put(OperationType.CREATE_FILESET, Operation.CREATE_FILESET)
-          .put(OperationType.ALTER_FILESET, Operation.ALTER_FILESET)
-          .put(OperationType.DROP_FILESET, Operation.DROP_FILESET)
-          .put(OperationType.LOAD_FILESET, Operation.LOAD_FILESET)
-          .put(OperationType.LIST_FILESET, Operation.LIST_FILESET)
-          .put(OperationType.GET_FILESET_LOCATION, Operation.GET_FILE_LOCATION)
-
-          // Topic operation
           .put(OperationType.CREATE_TOPIC, Operation.CREATE_TOPIC)
           .put(OperationType.ALTER_TOPIC, Operation.ALTER_TOPIC)
           .put(OperationType.DROP_TOPIC, Operation.DROP_TOPIC)
-          .put(OperationType.LOAD_TOPIC, Operation.LOAD_TOPIC)
           .put(OperationType.LIST_TOPIC, Operation.LIST_TOPIC)
-
-          // View operation
-          .put(OperationType.CREATE_VIEW, Operation.UNKNOWN_OPERATION)
-          .put(OperationType.ALTER_VIEW, Operation.UNKNOWN_OPERATION)
-          .put(OperationType.DROP_VIEW, Operation.UNKNOWN_OPERATION)
-          .put(OperationType.LOAD_VIEW, Operation.UNKNOWN_OPERATION)
-          .put(OperationType.VIEW_EXISTS, Operation.UNKNOWN_OPERATION)
-          .put(OperationType.RENAME_VIEW, Operation.UNKNOWN_OPERATION)
-          .put(OperationType.LIST_VIEW, Operation.UNKNOWN_OPERATION)
+          .put(OperationType.LOAD_TOPIC, Operation.LOAD_TOPIC)
+          .put(OperationType.CREATE_VIEW, Operation.CREATE_VIEW)
+          .put(OperationType.ALTER_VIEW, Operation.ALTER_VIEW)
+          .put(OperationType.DROP_VIEW, Operation.DROP_VIEW)
+          .put(OperationType.LOAD_VIEW, Operation.LOAD_VIEW)
+          .put(OperationType.VIEW_EXISTS, Operation.VIEW_EXISTS)
+          .put(OperationType.RENAME_VIEW, Operation.RENAME_VIEW)
+          .put(OperationType.LIST_VIEW, Operation.LIST_VIEW)
+          .put(OperationType.REGISTER_MODEL, Operation.REGISTER_MODEL)
+          .put(OperationType.DELETE_MODEL, Operation.DELETE_MODEL)
+          .put(OperationType.GET_MODEL, Operation.GET_MODEL)
+          .put(OperationType.LIST_MODEL, Operation.LIST_MODEL)
+          .put(OperationType.ALTER_MODEL, Operation.ALTER_MODEL)
+          .put(OperationType.LINK_MODEL_VERSION, Operation.LINK_MODEL_VERSION)
+          .put(OperationType.DELETE_MODEL_VERSION, 
Operation.DELETE_MODEL_VERSION)
+          .put(OperationType.GET_MODEL_VERSION, Operation.GET_MODEL_VERSION)
+          .put(OperationType.GET_MODEL_VERSION_URI, 
Operation.GET_MODEL_VERSION_URI)
+          .put(OperationType.LIST_MODEL_VERSIONS, 
Operation.LIST_MODEL_VERSIONS)
+          .put(OperationType.LIST_MODEL_VERSION_INFOS, 
Operation.LIST_MODEL_VERSION_INFOS)
+          .put(
+              OperationType.REGISTER_AND_LINK_MODEL_VERSION,
+              Operation.REGISTER_AND_LINK_MODEL_VERSION)
+          .put(OperationType.ALTER_MODEL_VERSION, 
Operation.ALTER_MODEL_VERSION)
+          .put(OperationType.ADD_USER, Operation.ADD_USER)
+          .put(OperationType.REMOVE_USER, Operation.REMOVE_USER)
+          .put(OperationType.GET_USER, Operation.GET_USER)
+          .put(OperationType.LIST_USERS, Operation.LIST_USERS)
+          .put(OperationType.LIST_USER_NAMES, Operation.LIST_USER_NAMES)
+          .put(OperationType.GRANT_USER_ROLES, Operation.GRANT_USER_ROLES)
+          .put(OperationType.REVOKE_USER_ROLES, Operation.REVOKE_USER_ROLES)
+          .put(OperationType.ADD_GROUP, Operation.ADD_GROUP)
+          .put(OperationType.REMOVE_GROUP, Operation.REMOVE_GROUP)
+          .put(OperationType.GET_GROUP, Operation.GET_GROUP)
+          .put(OperationType.LIST_GROUPS, Operation.LIST_GROUPS)
+          .put(OperationType.LIST_GROUP_NAMES, Operation.LIST_GROUP_NAMES)
+          .put(OperationType.GRANT_GROUP_ROLES, Operation.GRANT_GROUP_ROLES)
+          .put(OperationType.REVOKE_GROUP_ROLES, Operation.REVOKE_GROUP_ROLES)
+          .put(OperationType.CREATE_ROLE, Operation.CREATE_ROLE)
+          .put(OperationType.DELETE_ROLE, Operation.DELETE_ROLE)
+          .put(OperationType.GET_ROLE, Operation.GET_ROLE)
+          .put(OperationType.LIST_ROLE_NAMES, Operation.LIST_ROLE_NAMES)
+          .put(OperationType.GRANT_PRIVILEGES, Operation.GRANT_PRIVILEGES)
+          .put(OperationType.REVOKE_PRIVILEGES, Operation.REVOKE_PRIVILEGES)
+          .put(OperationType.OVERRIDE_PRIVILEGES, 
Operation.OVERRIDE_PRIVILEGES)
+          .put(OperationType.GET_OWNER, Operation.GET_OWNER)
+          .put(OperationType.SET_OWNER, Operation.SET_OWNER)
+          .put(OperationType.LIST_JOB_TEMPLATES, Operation.LIST_JOB_TEMPLATES)
+          .put(OperationType.REGISTER_JOB_TEMPLATE, 
Operation.REGISTER_JOB_TEMPLATE)
+          .put(OperationType.GET_JOB_TEMPLATE, Operation.GET_JOB_TEMPLATE)
+          .put(OperationType.ALTER_JOB_TEMPLATE, Operation.ALTER_JOB_TEMPLATE)
+          .put(OperationType.DELETE_JOB_TEMPLATE, 
Operation.DELETE_JOB_TEMPLATE)
+          .put(OperationType.LIST_JOBS, Operation.LIST_JOBS)
+          .put(OperationType.RUN_JOB, Operation.RUN_JOB)
+          .put(OperationType.GET_JOB, Operation.GET_JOB)
+          .put(OperationType.CANCEL_JOB, Operation.CANCEL_JOB)
+          .put(OperationType.LIST_STATISTICS, Operation.LIST_STATISTICS)
+          .put(OperationType.LIST_PARTITION_STATISTICS, 
Operation.LIST_PARTITION_STATISTICS)
+          .put(OperationType.DROP_STATISTICS, Operation.DROP_STATISTICS)
+          .put(OperationType.DROP_PARTITION_STATISTICS, 
Operation.DROP_PARTITION_STATISTICS)
+          .put(OperationType.UPDATE_STATISTICS, Operation.UPDATE_STATISTICS)
+          .put(OperationType.UPDATE_PARTITION_STATISTICS, 
Operation.UPDATE_PARTITION_STATISTICS)
+          .put(OperationType.CREATE_POLICY, Operation.CREATE_POLICY)
+          .put(OperationType.GET_POLICY, Operation.GET_POLICY)
+          .put(OperationType.ALTER_POLICY, Operation.ALTER_POLICY)
+          .put(OperationType.DELETE_POLICY, Operation.DELETE_POLICY)
+          .put(OperationType.ENABLE_POLICY, Operation.ENABLE_POLICY)
+          .put(OperationType.DISABLE_POLICY, Operation.DISABLE_POLICY)
+          .put(OperationType.LIST_POLICY, Operation.LIST_POLICY)
+          .put(OperationType.LIST_POLICY_INFO, Operation.LIST_POLICY_INFO)
+          .put(
+              OperationType.LIST_METADATA_OBJECTS_FOR_POLICY,
+              Operation.LIST_METADATA_OBJECTS_FOR_POLICY)
+          .put(
+              OperationType.LIST_POLICY_INFOS_FOR_METADATA_OBJECT,
+              Operation.LIST_POLICY_INFOS_FOR_METADATA_OBJECT)
+          .put(
+              OperationType.ASSOCIATE_POLICIES_FOR_METADATA_OBJECT,
+              Operation.ASSOCIATE_POLICIES_FOR_METADATA_OBJECT)
+          .put(
+              OperationType.GET_POLICY_FOR_METADATA_OBJECT,
+              Operation.GET_POLICY_FOR_METADATA_OBJECT)
+          .put(OperationType.REGISTER_FUNCTION, Operation.REGISTER_FUNCTION)
+          .put(OperationType.GET_FUNCTION, Operation.GET_FUNCTION)
+          .put(OperationType.ALTER_FUNCTION, Operation.ALTER_FUNCTION)
+          .put(OperationType.DROP_FUNCTION, Operation.DROP_FUNCTION)
+          .put(OperationType.LIST_FUNCTION, Operation.LIST_FUNCTION)
+          .put(OperationType.LIST_FUNCTION_INFOS, 
Operation.LIST_FUNCTION_INFOS)
+          .put(OperationType.UNKNOWN, Operation.UNKNOWN_OPERATION)
           .build();
 
   static Operation toAuditLogOperation(OperationType operationType) {
-    return operationTypeMap.getOrDefault(operationType, 
Operation.UNKNOWN_OPERATION);
+    if (operationType == null) {
+      return Operation.UNKNOWN_OPERATION;
+    }
+
+    return OPERATION_TYPE_MAP.getOrDefault(operationType, 
Operation.UNKNOWN_OPERATION);
   }
 
   static Status toAuditLogStatus(OperationStatus operationStatus) {
diff --git 
a/core/src/test/java/org/apache/gravitino/audit/v2/TestCompatibilityUtils.java 
b/core/src/test/java/org/apache/gravitino/audit/v2/TestCompatibilityUtils.java
index 5ddf3c834d..6d7b778d8c 100644
--- 
a/core/src/test/java/org/apache/gravitino/audit/v2/TestCompatibilityUtils.java
+++ 
b/core/src/test/java/org/apache/gravitino/audit/v2/TestCompatibilityUtils.java
@@ -20,7 +20,9 @@
 package org.apache.gravitino.audit.v2;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
 
+import java.util.EnumSet;
 import org.apache.gravitino.audit.AuditLog.Operation;
 import org.apache.gravitino.audit.AuditLog.Status;
 import org.apache.gravitino.listener.api.event.OperationStatus;
@@ -52,18 +54,37 @@ public class TestCompatibilityUtils {
       {OperationType.DROP_SCHEMA, Operation.DROP_SCHEMA},
       {OperationType.LOAD_SCHEMA, Operation.LOAD_SCHEMA},
       {OperationType.LIST_SCHEMA, Operation.LIST_SCHEMA},
-      {OperationType.SCHEMA_EXISTS, Operation.UNKNOWN_OPERATION},
+      {OperationType.SCHEMA_EXISTS, Operation.SCHEMA_EXISTS},
       {OperationType.CREATE_TABLE, Operation.CREATE_TABLE},
       {OperationType.ALTER_TABLE, Operation.ALTER_TABLE},
       {OperationType.DROP_TABLE, Operation.DROP_TABLE},
       {OperationType.PURGE_TABLE, Operation.PURGE_TABLE},
       {OperationType.LOAD_TABLE, Operation.LOAD_TABLE},
-      {OperationType.TABLE_EXISTS, Operation.UNKNOWN_OPERATION},
+      {OperationType.LOAD_TABLE_CREDENTIAL, Operation.LOAD_TABLE_CREDENTIAL},
+      {OperationType.PLAN_TABLE_SCAN, Operation.PLAN_TABLE_SCAN},
+      {OperationType.TABLE_EXISTS, Operation.TABLE_EXISTS},
       {OperationType.LIST_TABLE, Operation.LIST_TABLE},
-      {OperationType.RENAME_TABLE, Operation.UNKNOWN_OPERATION},
-      {OperationType.REGISTER_TABLE, Operation.UNKNOWN_OPERATION},
-      {OperationType.ADD_PARTITION, Operation.UNKNOWN_OPERATION},
-      {OperationType.DROP_PARTITION, Operation.UNKNOWN_OPERATION},
+      {OperationType.RENAME_TABLE, Operation.RENAME_TABLE},
+      {OperationType.REGISTER_TABLE, Operation.REGISTER_TABLE},
+      {OperationType.CREATE_TAG, Operation.CREATE_TAG},
+      {OperationType.GET_TAG, Operation.GET_TAG},
+      {OperationType.GET_TAG_FOR_METADATA_OBJECT, 
Operation.GET_TAG_FOR_METADATA_OBJECT},
+      {OperationType.DELETE_TAG, Operation.DELETE_TAG},
+      {OperationType.ALTER_TAG, Operation.ALTER_TAG},
+      {OperationType.LIST_TAG, Operation.LIST_TAG},
+      {
+        OperationType.ASSOCIATE_TAGS_FOR_METADATA_OBJECT,
+        Operation.ASSOCIATE_TAGS_FOR_METADATA_OBJECT
+      },
+      {OperationType.LIST_TAGS_FOR_METADATA_OBJECT, 
Operation.LIST_TAGS_FOR_METADATA_OBJECT},
+      {
+        OperationType.LIST_TAGS_INFO_FOR_METADATA_OBJECT,
+        Operation.LIST_TAGS_INFO_FOR_METADATA_OBJECT
+      },
+      {OperationType.LIST_METADATA_OBJECTS_FOR_TAG, 
Operation.LIST_METADATA_OBJECTS_FOR_TAG},
+      {OperationType.LIST_TAGS_INFO, Operation.LIST_TAGS_INFO},
+      {OperationType.ADD_PARTITION, Operation.ADD_PARTITION},
+      {OperationType.DROP_PARTITION, Operation.DROP_PARTITION},
       {OperationType.PURGE_PARTITION, Operation.PURGE_PARTITION},
       {OperationType.LOAD_PARTITION, Operation.GET_PARTITION},
       {OperationType.PARTITION_EXISTS, Operation.PARTITION_EXIST},
@@ -74,19 +95,96 @@ public class TestCompatibilityUtils {
       {OperationType.DROP_FILESET, Operation.DROP_FILESET},
       {OperationType.LOAD_FILESET, Operation.LOAD_FILESET},
       {OperationType.LIST_FILESET, Operation.LIST_FILESET},
+      {OperationType.LIST_FILESET_FILES, Operation.LIST_FILESET_FILES},
       {OperationType.GET_FILESET_LOCATION, Operation.GET_FILE_LOCATION},
       {OperationType.CREATE_TOPIC, Operation.CREATE_TOPIC},
       {OperationType.ALTER_TOPIC, Operation.ALTER_TOPIC},
       {OperationType.DROP_TOPIC, Operation.DROP_TOPIC},
       {OperationType.LOAD_TOPIC, Operation.LOAD_TOPIC},
       {OperationType.LIST_TOPIC, Operation.LIST_TOPIC},
-      {OperationType.CREATE_VIEW, Operation.UNKNOWN_OPERATION},
-      {OperationType.ALTER_VIEW, Operation.UNKNOWN_OPERATION},
-      {OperationType.DROP_VIEW, Operation.UNKNOWN_OPERATION},
-      {OperationType.LOAD_VIEW, Operation.UNKNOWN_OPERATION},
-      {OperationType.VIEW_EXISTS, Operation.UNKNOWN_OPERATION},
-      {OperationType.RENAME_VIEW, Operation.UNKNOWN_OPERATION},
-      {OperationType.LIST_VIEW, Operation.UNKNOWN_OPERATION},
+      {OperationType.CREATE_VIEW, Operation.CREATE_VIEW},
+      {OperationType.ALTER_VIEW, Operation.ALTER_VIEW},
+      {OperationType.DROP_VIEW, Operation.DROP_VIEW},
+      {OperationType.LOAD_VIEW, Operation.LOAD_VIEW},
+      {OperationType.VIEW_EXISTS, Operation.VIEW_EXISTS},
+      {OperationType.RENAME_VIEW, Operation.RENAME_VIEW},
+      {OperationType.LIST_VIEW, Operation.LIST_VIEW},
+      {OperationType.REGISTER_MODEL, Operation.REGISTER_MODEL},
+      {OperationType.DELETE_MODEL, Operation.DELETE_MODEL},
+      {OperationType.GET_MODEL, Operation.GET_MODEL},
+      {OperationType.LIST_MODEL, Operation.LIST_MODEL},
+      {OperationType.ALTER_MODEL, Operation.ALTER_MODEL},
+      {OperationType.LINK_MODEL_VERSION, Operation.LINK_MODEL_VERSION},
+      {OperationType.DELETE_MODEL_VERSION, Operation.DELETE_MODEL_VERSION},
+      {OperationType.GET_MODEL_VERSION, Operation.GET_MODEL_VERSION},
+      {OperationType.GET_MODEL_VERSION_URI, Operation.GET_MODEL_VERSION_URI},
+      {OperationType.LIST_MODEL_VERSIONS, Operation.LIST_MODEL_VERSIONS},
+      {OperationType.LIST_MODEL_VERSION_INFOS, 
Operation.LIST_MODEL_VERSION_INFOS},
+      {OperationType.REGISTER_AND_LINK_MODEL_VERSION, 
Operation.REGISTER_AND_LINK_MODEL_VERSION},
+      {OperationType.ALTER_MODEL_VERSION, Operation.ALTER_MODEL_VERSION},
+      {OperationType.ADD_USER, Operation.ADD_USER},
+      {OperationType.REMOVE_USER, Operation.REMOVE_USER},
+      {OperationType.GET_USER, Operation.GET_USER},
+      {OperationType.LIST_USERS, Operation.LIST_USERS},
+      {OperationType.LIST_USER_NAMES, Operation.LIST_USER_NAMES},
+      {OperationType.GRANT_USER_ROLES, Operation.GRANT_USER_ROLES},
+      {OperationType.REVOKE_USER_ROLES, Operation.REVOKE_USER_ROLES},
+      {OperationType.ADD_GROUP, Operation.ADD_GROUP},
+      {OperationType.REMOVE_GROUP, Operation.REMOVE_GROUP},
+      {OperationType.GET_GROUP, Operation.GET_GROUP},
+      {OperationType.LIST_GROUPS, Operation.LIST_GROUPS},
+      {OperationType.LIST_GROUP_NAMES, Operation.LIST_GROUP_NAMES},
+      {OperationType.GRANT_GROUP_ROLES, Operation.GRANT_GROUP_ROLES},
+      {OperationType.REVOKE_GROUP_ROLES, Operation.REVOKE_GROUP_ROLES},
+      {OperationType.CREATE_ROLE, Operation.CREATE_ROLE},
+      {OperationType.DELETE_ROLE, Operation.DELETE_ROLE},
+      {OperationType.GET_ROLE, Operation.GET_ROLE},
+      {OperationType.LIST_ROLE_NAMES, Operation.LIST_ROLE_NAMES},
+      {OperationType.GRANT_PRIVILEGES, Operation.GRANT_PRIVILEGES},
+      {OperationType.REVOKE_PRIVILEGES, Operation.REVOKE_PRIVILEGES},
+      {OperationType.OVERRIDE_PRIVILEGES, Operation.OVERRIDE_PRIVILEGES},
+      {OperationType.GET_OWNER, Operation.GET_OWNER},
+      {OperationType.SET_OWNER, Operation.SET_OWNER},
+      {OperationType.LIST_JOB_TEMPLATES, Operation.LIST_JOB_TEMPLATES},
+      {OperationType.REGISTER_JOB_TEMPLATE, Operation.REGISTER_JOB_TEMPLATE},
+      {OperationType.GET_JOB_TEMPLATE, Operation.GET_JOB_TEMPLATE},
+      {OperationType.ALTER_JOB_TEMPLATE, Operation.ALTER_JOB_TEMPLATE},
+      {OperationType.DELETE_JOB_TEMPLATE, Operation.DELETE_JOB_TEMPLATE},
+      {OperationType.LIST_JOBS, Operation.LIST_JOBS},
+      {OperationType.RUN_JOB, Operation.RUN_JOB},
+      {OperationType.GET_JOB, Operation.GET_JOB},
+      {OperationType.CANCEL_JOB, Operation.CANCEL_JOB},
+      {OperationType.LIST_STATISTICS, Operation.LIST_STATISTICS},
+      {OperationType.LIST_PARTITION_STATISTICS, 
Operation.LIST_PARTITION_STATISTICS},
+      {OperationType.DROP_STATISTICS, Operation.DROP_STATISTICS},
+      {OperationType.DROP_PARTITION_STATISTICS, 
Operation.DROP_PARTITION_STATISTICS},
+      {OperationType.UPDATE_STATISTICS, Operation.UPDATE_STATISTICS},
+      {OperationType.UPDATE_PARTITION_STATISTICS, 
Operation.UPDATE_PARTITION_STATISTICS},
+      {OperationType.CREATE_POLICY, Operation.CREATE_POLICY},
+      {OperationType.GET_POLICY, Operation.GET_POLICY},
+      {OperationType.ALTER_POLICY, Operation.ALTER_POLICY},
+      {OperationType.DELETE_POLICY, Operation.DELETE_POLICY},
+      {OperationType.ENABLE_POLICY, Operation.ENABLE_POLICY},
+      {OperationType.DISABLE_POLICY, Operation.DISABLE_POLICY},
+      {OperationType.LIST_POLICY, Operation.LIST_POLICY},
+      {OperationType.LIST_POLICY_INFO, Operation.LIST_POLICY_INFO},
+      {OperationType.LIST_METADATA_OBJECTS_FOR_POLICY, 
Operation.LIST_METADATA_OBJECTS_FOR_POLICY},
+      {
+        OperationType.LIST_POLICY_INFOS_FOR_METADATA_OBJECT,
+        Operation.LIST_POLICY_INFOS_FOR_METADATA_OBJECT
+      },
+      {
+        OperationType.ASSOCIATE_POLICIES_FOR_METADATA_OBJECT,
+        Operation.ASSOCIATE_POLICIES_FOR_METADATA_OBJECT
+      },
+      {OperationType.GET_POLICY_FOR_METADATA_OBJECT, 
Operation.GET_POLICY_FOR_METADATA_OBJECT},
+      {OperationType.REGISTER_FUNCTION, Operation.REGISTER_FUNCTION},
+      {OperationType.GET_FUNCTION, Operation.GET_FUNCTION},
+      {OperationType.ALTER_FUNCTION, Operation.ALTER_FUNCTION},
+      {OperationType.DROP_FUNCTION, Operation.DROP_FUNCTION},
+      {OperationType.LIST_FUNCTION, Operation.LIST_FUNCTION},
+      {OperationType.LIST_FUNCTION_INFOS, Operation.LIST_FUNCTION_INFOS},
+      {OperationType.UNKNOWN, Operation.UNKNOWN_OPERATION},
       {null, Operation.UNKNOWN_OPERATION}
     };
 
@@ -98,6 +196,19 @@ public class TestCompatibilityUtils {
     }
   }
 
+  @Test
+  public void testAllKnownOperationTypesMapToConcreteAuditOperation() {
+    EnumSet<OperationType> operationTypes = EnumSet.allOf(OperationType.class);
+    operationTypes.remove(OperationType.UNKNOWN);
+
+    for (OperationType operationType : operationTypes) {
+      assertNotEquals(
+          Operation.UNKNOWN_OPERATION,
+          CompatibilityUtils.toAuditLogOperation(operationType),
+          "OperationType should map to a concrete audit operation: " + 
operationType);
+    }
+  }
+
   @Test
   void testOperationStatus() {
     Assertions.assertEquals(

Reply via email to