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 8de31cdb3 [#5094] Fix(catalog-lakehouse-paimon): make some table 
properties from reserved to immutable (#5095)
8de31cdb3 is described below

commit 8de31cdb3cc74a82144c0899a6636a70d6588b66
Author: cai can <94670132+caica...@users.noreply.github.com>
AuthorDate: Fri Oct 11 18:52:50 2024 -0700

    [#5094] Fix(catalog-lakehouse-paimon): make some table properties from 
reserved to immutable (#5095)
    
    ### What changes were proposed in this pull request?
    
    make some table properties from reserved to immutable.
    
    ```
    merge-engine
    sequence.field
    rowkind.field
    ```
    
    ### Why are the changes needed?
    
    these table properties are immutable in Paimon.
    
    Fix: https://github.com/apache/gravitino/issues/5094
    
    ### Does this PR introduce _any_ user-facing change?
    updated related doc.
    
    ### How was this patch tested?
    modified UT.
    
    Co-authored-by: caican <cai...@xiaomi.com>
---
 .../paimon/PaimonTablePropertiesMetadata.java      | 10 ++-
 .../lakehouse/paimon/TestGravitinoPaimonTable.java | 73 +++++++++++++---------
 docs/lakehouse-paimon-catalog.md                   |  9 ++-
 3 files changed, 59 insertions(+), 33 deletions(-)

diff --git 
a/catalogs/catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/PaimonTablePropertiesMetadata.java
 
b/catalogs/catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/PaimonTablePropertiesMetadata.java
index 1c57e5b2c..671dd9d66 100644
--- 
a/catalogs/catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/PaimonTablePropertiesMetadata.java
+++ 
b/catalogs/catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/PaimonTablePropertiesMetadata.java
@@ -18,6 +18,7 @@
  */
 package org.apache.gravitino.catalog.lakehouse.paimon;
 
+import static 
org.apache.gravitino.connector.PropertyEntry.stringImmutablePropertyEntry;
 import static 
org.apache.gravitino.connector.PropertyEntry.stringReservedPropertyEntry;
 
 import com.google.common.collect.ImmutableList;
@@ -51,9 +52,12 @@ public class PaimonTablePropertiesMetadata extends 
BasePropertiesMetadata {
             stringReservedPropertyEntry(COMMENT, "The table comment", true),
             stringReservedPropertyEntry(OWNER, "The table owner", false),
             stringReservedPropertyEntry(BUCKET_KEY, "The table bucket key", 
false),
-            stringReservedPropertyEntry(MERGE_ENGINE, "The table merge 
engine", false),
-            stringReservedPropertyEntry(SEQUENCE_FIELD, "The table sequence 
field", false),
-            stringReservedPropertyEntry(ROWKIND_FIELD, "The table rowkind 
field", false),
+            stringImmutablePropertyEntry(
+                MERGE_ENGINE, "The table merge engine", false, null, false, 
false),
+            stringImmutablePropertyEntry(
+                SEQUENCE_FIELD, "The table sequence field", false, null, 
false, false),
+            stringImmutablePropertyEntry(
+                ROWKIND_FIELD, "The table rowkind field", false, null, false, 
false),
             stringReservedPropertyEntry(PRIMARY_KEY, "The table primary key", 
false),
             stringReservedPropertyEntry(PARTITION, "The table partition", 
false));
     PROPERTIES_METADATA = Maps.uniqueIndex(propertyEntries, 
PropertyEntry::getName);
diff --git 
a/catalogs/catalog-lakehouse-paimon/src/test/java/org/apache/gravitino/catalog/lakehouse/paimon/TestGravitinoPaimonTable.java
 
b/catalogs/catalog-lakehouse-paimon/src/test/java/org/apache/gravitino/catalog/lakehouse/paimon/TestGravitinoPaimonTable.java
index 05e36219d..466ecb345 100644
--- 
a/catalogs/catalog-lakehouse-paimon/src/test/java/org/apache/gravitino/catalog/lakehouse/paimon/TestGravitinoPaimonTable.java
+++ 
b/catalogs/catalog-lakehouse-paimon/src/test/java/org/apache/gravitino/catalog/lakehouse/paimon/TestGravitinoPaimonTable.java
@@ -382,16 +382,41 @@ public class TestGravitinoPaimonTable {
     try (PaimonCatalogOperations ops = new PaimonCatalogOperations()) {
       ops.initialize(
           initBackendCatalogProperties(), entity.toCatalogInfo(), 
PAIMON_PROPERTIES_METADATA);
-      Map<String, String> map = Maps.newHashMap();
-      map.put(PaimonTablePropertiesMetadata.COMMENT, "test");
-      map.put(PaimonTablePropertiesMetadata.OWNER, "test");
-      map.put(PaimonTablePropertiesMetadata.BUCKET_KEY, "test");
-      map.put(PaimonTablePropertiesMetadata.MERGE_ENGINE, "test");
-      map.put(PaimonTablePropertiesMetadata.SEQUENCE_FIELD, "test");
-      map.put(PaimonTablePropertiesMetadata.ROWKIND_FIELD, "test");
-      map.put(PaimonTablePropertiesMetadata.PRIMARY_KEY, "test");
-      map.put(PaimonTablePropertiesMetadata.PARTITION, "test");
-      for (Map.Entry<String, String> entry : map.entrySet()) {
+      HashMap<String, String> reservedProps =
+          new HashMap<String, String>() {
+            {
+              put(PaimonTablePropertiesMetadata.COMMENT, "test");
+              put(PaimonTablePropertiesMetadata.OWNER, "test");
+              put(PaimonTablePropertiesMetadata.BUCKET_KEY, "test");
+              put(PaimonTablePropertiesMetadata.PRIMARY_KEY, "test");
+              put(PaimonTablePropertiesMetadata.PARTITION, "test");
+            }
+          };
+      Assertions.assertThrows(
+          IllegalArgumentException.class,
+          () ->
+              PropertiesMetadataHelpers.validatePropertyForCreate(
+                  paimonCatalog.tablePropertiesMetadata(), reservedProps));
+      Assertions.assertThrows(
+          IllegalArgumentException.class,
+          () ->
+              PropertiesMetadataHelpers.validatePropertyForAlter(
+                  paimonCatalog.tablePropertiesMetadata(), reservedProps, 
Collections.emptyMap()));
+      Assertions.assertThrows(
+          IllegalArgumentException.class,
+          () ->
+              PropertiesMetadataHelpers.validatePropertyForAlter(
+                  paimonCatalog.tablePropertiesMetadata(), 
Collections.emptyMap(), reservedProps));
+
+      Map<String, String> immutableProps =
+          new HashMap<String, String>() {
+            {
+              put(PaimonTablePropertiesMetadata.MERGE_ENGINE, "test");
+              put(PaimonTablePropertiesMetadata.SEQUENCE_FIELD, "test");
+              put(PaimonTablePropertiesMetadata.ROWKIND_FIELD, "test");
+            }
+          };
+      for (Map.Entry<String, String> entry : immutableProps.entrySet()) {
         HashMap<String, String> properties =
             new HashMap<String, String>() {
               {
@@ -399,26 +424,18 @@ public class TestGravitinoPaimonTable {
               }
             };
         PropertiesMetadata metadata = paimonCatalog.tablePropertiesMetadata();
+        Assertions.assertDoesNotThrow(
+            () -> 
PropertiesMetadataHelpers.validatePropertyForCreate(metadata, properties));
         Assertions.assertThrows(
             IllegalArgumentException.class,
-            () -> 
PropertiesMetadataHelpers.validatePropertyForCreate(metadata, properties));
-      }
-
-      map = Maps.newHashMap();
-      map.put("key1", "val1");
-      map.put("key2", "val2");
-      for (Map.Entry<String, String> entry : map.entrySet()) {
-        HashMap<String, String> properties =
-            new HashMap<String, String>() {
-              {
-                put(entry.getKey(), entry.getValue());
-              }
-            };
-        PropertiesMetadata metadata = paimonCatalog.tablePropertiesMetadata();
-        Assertions.assertDoesNotThrow(
-            () -> {
-              PropertiesMetadataHelpers.validatePropertyForCreate(metadata, 
properties);
-            });
+            () ->
+                PropertiesMetadataHelpers.validatePropertyForAlter(
+                    metadata, properties, Collections.emptyMap()));
+        Assertions.assertThrows(
+            IllegalArgumentException.class,
+            () ->
+                PropertiesMetadataHelpers.validatePropertyForAlter(
+                    metadata, Collections.emptyMap(), properties));
       }
     }
   }
diff --git a/docs/lakehouse-paimon-catalog.md b/docs/lakehouse-paimon-catalog.md
index b9c2772bc..2a8226668 100644
--- a/docs/lakehouse-paimon-catalog.md
+++ b/docs/lakehouse-paimon-catalog.md
@@ -175,11 +175,16 @@ The Gravitino server doesn't allow passing the following 
reserved fields.
 | `comment`                          | The table comment.                      
                     |
 | `owner`                            | The table owner.                        
                     |
 | `bucket-key`                       | The table bucket-key.                   
                     |
+| `primary-key`                      | The table primary-key.                  
                     |
+| `partition`                        | The table partition.                    
                     |
+
+The Gravitino server doesn't allow the following immutable fields to be 
modified, but allows them to be specified when creating a new table.
+
+| Configuration item                 | Description                             
                     |
+|------------------------------------|--------------------------------------------------------------|
 | `merge-engine`                     | The table merge-engine.                 
                     |
 | `sequence.field`                   | The table sequence.field.               
                     |
 | `rowkind.field`                    | The table rowkind.field.                
                     |
-| `primary-key`                      | The table primary-key.                  
                     |
-| `partition`                        | The table partition.                    
                     |
 
 ### Table operations
 

Reply via email to