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