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

jshao 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 70a95b455 [#4675] improvement(core): make catalog property metadata 
automatically add (#4684)
70a95b455 is described below

commit 70a95b455de4e1c1f17438a823d82e183a26c9d1
Author: mchades <[email protected]>
AuthorDate: Tue Aug 27 13:41:44 2024 +0800

    [#4675] improvement(core): make catalog property metadata automatically add 
(#4684)
    
    ### What changes were proposed in this pull request?
    
    make catalog property metadata automatically add
    
    ### Why are the changes needed?
    
    catalog developer can now focus on the definition of catalog property
    metadata
    
    Fix: #4675
    
    ### Does this PR introduce _any_ user-facing change?
    no
    
    ### How was this patch tested?
    
    CI passed
---
 .../hadoop/HadoopCatalogPropertiesMetadata.java    |  1 -
 .../catalog/hive/HiveCatalogPropertiesMeta.java    |  1 -
 .../jdbc/JdbcCatalogPropertiesMetadata.java        |  1 -
 .../kafka/KafkaCatalogPropertiesMetadata.java      |  1 -
 .../iceberg/IcebergCatalogPropertiesMetadata.java  |  2 +-
 .../paimon/PaimonCatalogPropertiesMetadata.java    |  2 +-
 .../connector/BaseCatalogPropertiesMetadata.java   | 37 +++++++++++++++++++++-
 .../connector/BasePropertiesMetadata.java          |  8 ++---
 8 files changed, 42 insertions(+), 11 deletions(-)

diff --git 
a/catalogs/catalog-hadoop/src/main/java/org/apache/gravitino/catalog/hadoop/HadoopCatalogPropertiesMetadata.java
 
b/catalogs/catalog-hadoop/src/main/java/org/apache/gravitino/catalog/hadoop/HadoopCatalogPropertiesMetadata.java
index d33f0d6e6..9a68e2d55 100644
--- 
a/catalogs/catalog-hadoop/src/main/java/org/apache/gravitino/catalog/hadoop/HadoopCatalogPropertiesMetadata.java
+++ 
b/catalogs/catalog-hadoop/src/main/java/org/apache/gravitino/catalog/hadoop/HadoopCatalogPropertiesMetadata.java
@@ -44,7 +44,6 @@ public class HadoopCatalogPropertiesMetadata extends 
BaseCatalogPropertiesMetada
                   false /* immutable */,
                   null,
                   false /* hidden */))
-          .putAll(BASIC_CATALOG_PROPERTY_ENTRIES)
           // The following two are about authentication.
           .putAll(KerberosConfig.KERBEROS_PROPERTY_ENTRIES)
           .putAll(AuthenticationConfig.AUTHENTICATION_PROPERTY_ENTRIES)
diff --git 
a/catalogs/catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveCatalogPropertiesMeta.java
 
b/catalogs/catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveCatalogPropertiesMeta.java
index eba805db1..46d9cc80b 100644
--- 
a/catalogs/catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveCatalogPropertiesMeta.java
+++ 
b/catalogs/catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveCatalogPropertiesMeta.java
@@ -128,7 +128,6 @@ public class HiveCatalogPropertiesMeta extends 
BaseCatalogPropertiesMetadata {
                   DEFAULT_LIST_ALL_TABLES,
                   false /* hidden */,
                   false /* reserved */))
-          .putAll(BASIC_CATALOG_PROPERTY_ENTRIES)
           
.putAll(AuthorizationPropertiesMeta.RANGER_AUTHORIZATION_PROPERTY_ENTRIES)
           .build();
 
diff --git 
a/catalogs/catalog-jdbc-common/src/main/java/org/apache/gravitino/catalog/jdbc/JdbcCatalogPropertiesMetadata.java
 
b/catalogs/catalog-jdbc-common/src/main/java/org/apache/gravitino/catalog/jdbc/JdbcCatalogPropertiesMetadata.java
index ca0275beb..f8b6d5e7a 100644
--- 
a/catalogs/catalog-jdbc-common/src/main/java/org/apache/gravitino/catalog/jdbc/JdbcCatalogPropertiesMetadata.java
+++ 
b/catalogs/catalog-jdbc-common/src/main/java/org/apache/gravitino/catalog/jdbc/JdbcCatalogPropertiesMetadata.java
@@ -97,7 +97,6 @@ public class JdbcCatalogPropertiesMetadata extends 
BaseCatalogPropertiesMetadata
                 false /* reserved */));
     PROPERTIES_METADATA =
         ImmutableMap.<String, PropertyEntry<?>>builder()
-            .putAll(BASIC_CATALOG_PROPERTY_ENTRIES)
             .putAll(Maps.uniqueIndex(propertyEntries, PropertyEntry::getName))
             .build();
   }
diff --git 
a/catalogs/catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogPropertiesMetadata.java
 
b/catalogs/catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogPropertiesMetadata.java
index 00193a37a..bb16f803b 100644
--- 
a/catalogs/catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogPropertiesMetadata.java
+++ 
b/catalogs/catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogPropertiesMetadata.java
@@ -39,7 +39,6 @@ public class KafkaCatalogPropertiesMetadata extends 
BaseCatalogPropertiesMetadat
                       + "comma-separating them",
                   false /* immutable */,
                   false /* hidden */))
-          .putAll(BASIC_CATALOG_PROPERTY_ENTRIES)
           .build();
 
   @Override
diff --git 
a/catalogs/catalog-lakehouse-iceberg/src/main/java/org/apache/gravitino/catalog/lakehouse/iceberg/IcebergCatalogPropertiesMetadata.java
 
b/catalogs/catalog-lakehouse-iceberg/src/main/java/org/apache/gravitino/catalog/lakehouse/iceberg/IcebergCatalogPropertiesMetadata.java
index 49fb7ae72..3f8345fd0 100644
--- 
a/catalogs/catalog-lakehouse-iceberg/src/main/java/org/apache/gravitino/catalog/lakehouse/iceberg/IcebergCatalogPropertiesMetadata.java
+++ 
b/catalogs/catalog-lakehouse-iceberg/src/main/java/org/apache/gravitino/catalog/lakehouse/iceberg/IcebergCatalogPropertiesMetadata.java
@@ -95,7 +95,7 @@ public class IcebergCatalogPropertiesMetadata extends 
BaseCatalogPropertiesMetad
                 false /* immutable */,
                 null /* defaultValue */,
                 true /* hidden */));
-    HashMap<String, PropertyEntry<?>> result = 
Maps.newHashMap(BASIC_CATALOG_PROPERTY_ENTRIES);
+    HashMap<String, PropertyEntry<?>> result = Maps.newHashMap();
     result.putAll(Maps.uniqueIndex(propertyEntries, PropertyEntry::getName));
     result.putAll(KerberosConfig.KERBEROS_PROPERTY_ENTRIES);
     result.putAll(AuthenticationConfig.AUTHENTICATION_PROPERTY_ENTRIES);
diff --git 
a/catalogs/catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/PaimonCatalogPropertiesMetadata.java
 
b/catalogs/catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/PaimonCatalogPropertiesMetadata.java
index 7292a0254..9b7d45c77 100644
--- 
a/catalogs/catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/PaimonCatalogPropertiesMetadata.java
+++ 
b/catalogs/catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/PaimonCatalogPropertiesMetadata.java
@@ -84,7 +84,7 @@ public class PaimonCatalogPropertiesMetadata extends 
BaseCatalogPropertiesMetada
                 false /* immutable */,
                 null /* defaultValue */,
                 false /* hidden */));
-    HashMap<String, PropertyEntry<?>> result = 
Maps.newHashMap(BASIC_CATALOG_PROPERTY_ENTRIES);
+    HashMap<String, PropertyEntry<?>> result = Maps.newHashMap();
     result.putAll(Maps.uniqueIndex(propertyEntries, PropertyEntry::getName));
     result.putAll(KerberosConfig.KERBEROS_PROPERTY_ENTRIES);
     result.putAll(AuthenticationConfig.AUTHENTICATION_PROPERTY_ENTRIES);
diff --git 
a/core/src/main/java/org/apache/gravitino/connector/BaseCatalogPropertiesMetadata.java
 
b/core/src/main/java/org/apache/gravitino/connector/BaseCatalogPropertiesMetadata.java
index 9241f92a8..b667b6dc7 100644
--- 
a/core/src/main/java/org/apache/gravitino/connector/BaseCatalogPropertiesMetadata.java
+++ 
b/core/src/main/java/org/apache/gravitino/connector/BaseCatalogPropertiesMetadata.java
@@ -23,7 +23,9 @@ import static org.apache.gravitino.Catalog.CLOUD_NAME;
 import static org.apache.gravitino.Catalog.CLOUD_REGION_CODE;
 import static org.apache.gravitino.Catalog.PROPERTY_PACKAGE;
 
+import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import java.util.Map;
 import org.apache.gravitino.Catalog;
@@ -31,7 +33,9 @@ import org.apache.gravitino.annotation.Evolving;
 
 @Evolving
 public abstract class BaseCatalogPropertiesMetadata extends 
BasePropertiesMetadata {
-  protected static final Map<String, PropertyEntry<?>> 
BASIC_CATALOG_PROPERTY_ENTRIES =
+
+  // The basic property entries for catalog entities
+  private static final Map<String, PropertyEntry<?>> 
BASIC_CATALOG_PROPERTY_ENTRIES =
       Maps.uniqueIndex(
           ImmutableList.of(
               PropertyEntry.stringImmutablePropertyEntry(
@@ -71,4 +75,35 @@ public abstract class BaseCatalogPropertiesMetadata extends 
BasePropertiesMetada
                   null /* The default value does not work because if the user 
does not set it, this property will not be displayed */,
                   false /* hidden */)),
           PropertyEntry::getName);
+
+  @Override
+  public Map<String, PropertyEntry<?>> propertyEntries() {
+    if (propertyEntries == null) {
+      synchronized (this) {
+        if (propertyEntries == null) {
+          ImmutableMap.Builder<String, PropertyEntry<?>> builder = 
ImmutableMap.builder();
+          Map<String, PropertyEntry<?>> properties = specificPropertyEntries();
+          builder.putAll(properties);
+
+          // put the basic property entries
+          BASIC_PROPERTY_ENTRIES.forEach(
+              (name, entry) -> {
+                Preconditions.checkArgument(
+                    !properties.containsKey(name), "Property metadata already 
exists: " + name);
+                builder.put(name, entry);
+              });
+
+          // put the basic catalog property entries
+          BASIC_CATALOG_PROPERTY_ENTRIES.forEach(
+              (name, entry) -> {
+                Preconditions.checkArgument(
+                    !properties.containsKey(name), "Property metadata already 
exists: " + name);
+                builder.put(name, entry);
+              });
+          propertyEntries = builder.build();
+        }
+      }
+    }
+    return propertyEntries;
+  }
 }
diff --git 
a/core/src/main/java/org/apache/gravitino/connector/BasePropertiesMetadata.java 
b/core/src/main/java/org/apache/gravitino/connector/BasePropertiesMetadata.java
index 6bd10eb97..79c8c742a 100644
--- 
a/core/src/main/java/org/apache/gravitino/connector/BasePropertiesMetadata.java
+++ 
b/core/src/main/java/org/apache/gravitino/connector/BasePropertiesMetadata.java
@@ -35,15 +35,15 @@ import org.apache.gravitino.annotation.Evolving;
  *
  * <p>Note: For catalog related properties metadata, use {@link 
BaseCatalogPropertiesMetadata}.
  *
- * <p>This class defines two reserved properties metadata for Gravitino use 
only. Developers should
- * not override these properties.
+ * <p>This class defines reserved properties metadata for Gravitino use only. 
Developers should not
+ * override these properties.
  */
 @Evolving
 public abstract class BasePropertiesMetadata implements PropertiesMetadata {
 
-  private static final Map<String, PropertyEntry<?>> BASIC_PROPERTY_ENTRIES;
+  protected static final Map<String, PropertyEntry<?>> BASIC_PROPERTY_ENTRIES;
 
-  private volatile Map<String, PropertyEntry<?>> propertyEntries;
+  protected volatile Map<String, PropertyEntry<?>> propertyEntries;
 
   static {
     // basicPropertyEntries is shared by all entities

Reply via email to