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

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


The following commit(s) were added to refs/heads/main by this push:
     new 15f23cae8 Make PolarisConfiguration member variables private (#2007)
15f23cae8 is described below

commit 15f23cae8e678f8a13c20c5012919565288525a0
Author: Pooja Nilangekar <poo...@umd.edu>
AuthorDate: Fri Jul 11 09:40:14 2025 -0400

    Make PolarisConfiguration member variables private (#2007)
    
    * Make PolarisConfiguration members private
    
    * Make methods final
---
 .../polaris/core/config/FeatureConfiguration.java  |  4 ++--
 .../polaris/core/config/PolarisConfiguration.java  | 26 ++++++++++++++++------
 .../core/config/PolarisConfigurationStore.java     | 14 ++++++------
 .../core/storage/cache/StorageCredentialCache.java |  4 ++--
 .../storage/PolarisConfigurationStoreTest.java     |  6 ++---
 .../quarkus/config/ProductionReadinessChecks.java  | 20 ++++++++---------
 .../quarkus/admin/PolarisOverlappingTableTest.java |  4 ++--
 .../quarkus/catalog/IcebergCatalogTest.java        |  2 +-
 .../service/catalog/iceberg/IcebergCatalog.java    | 18 +++++++--------
 .../polaris/service/catalog/io/FileIOUtil.java     |  4 ++--
 10 files changed, 57 insertions(+), 45 deletions(-)

diff --git 
a/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java
 
b/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java
index 59de973be..d8ec61320 100644
--- 
a/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java
+++ 
b/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java
@@ -55,7 +55,7 @@ public class FeatureConfiguration<T> extends 
PolarisConfiguration<T> {
             .getConfigurationStore()
             .getConfiguration(callContext.getRealmContext(), featureConfig);
     if (!enabled) {
-      throw new UnsupportedOperationException("Feature not enabled: " + 
featureConfig.key);
+      throw new UnsupportedOperationException("Feature not enabled: " + 
featureConfig.key());
     }
   }
 
@@ -211,7 +211,7 @@ public class FeatureConfiguration<T> extends 
PolarisConfiguration<T> {
           .key("STORAGE_CREDENTIAL_CACHE_DURATION_SECONDS")
           .description(
               "How long to store storage credentials in the local cache. This 
should be less than "
-                  + STORAGE_CREDENTIAL_DURATION_SECONDS.key)
+                  + STORAGE_CREDENTIAL_DURATION_SECONDS.key())
           .defaultValue(30 * 60) // 30 minutes
           .buildFeatureConfiguration();
 
diff --git 
a/polaris-core/src/main/java/org/apache/polaris/core/config/PolarisConfiguration.java
 
b/polaris-core/src/main/java/org/apache/polaris/core/config/PolarisConfiguration.java
index 31ae18795..f9cf8192f 100644
--- 
a/polaris-core/src/main/java/org/apache/polaris/core/config/PolarisConfiguration.java
+++ 
b/polaris-core/src/main/java/org/apache/polaris/core/config/PolarisConfiguration.java
@@ -39,9 +39,9 @@ public abstract class PolarisConfiguration<T> {
 
   private static final List<PolarisConfiguration<?>> allConfigurations = new 
ArrayList<>();
 
-  public final String key;
-  public final String description;
-  public final T defaultValue;
+  private final String key;
+  private final String description;
+  private final T defaultValue;
   private final Optional<String> catalogConfigImpl;
   private final Optional<String> catalogConfigUnsafeImpl;
   private final Class<T> typ;
@@ -98,22 +98,22 @@ public abstract class PolarisConfiguration<T> {
     this.typ = (Class<T>) defaultValue.getClass();
   }
 
-  public boolean hasCatalogConfig() {
+  public final boolean hasCatalogConfig() {
     return catalogConfigImpl.isPresent();
   }
 
-  public String catalogConfig() {
+  public final String catalogConfig() {
     return catalogConfigImpl.orElseThrow(
         () ->
             new IllegalStateException(
                 "Attempted to read a catalog config key from a configuration 
that doesn't have one."));
   }
 
-  public boolean hasCatalogConfigUnsafe() {
+  public final boolean hasCatalogConfigUnsafe() {
     return catalogConfigUnsafeImpl.isPresent();
   }
 
-  public String catalogConfigUnsafe() {
+  public final String catalogConfigUnsafe() {
     return catalogConfigUnsafeImpl.orElseThrow(
         () ->
             new IllegalStateException(
@@ -124,6 +124,18 @@ public abstract class PolarisConfiguration<T> {
     return this.typ.cast(value);
   }
 
+  public final String key() {
+    return key;
+  }
+
+  public final String description() {
+    return description;
+  }
+
+  public final T defaultValue() {
+    return defaultValue;
+  }
+
   public static class Builder<T> {
     private String key;
     private String description;
diff --git 
a/polaris-core/src/main/java/org/apache/polaris/core/config/PolarisConfigurationStore.java
 
b/polaris-core/src/main/java/org/apache/polaris/core/config/PolarisConfigurationStore.java
index 4923d97ee..1e2a1928d 100644
--- 
a/polaris-core/src/main/java/org/apache/polaris/core/config/PolarisConfigurationStore.java
+++ 
b/polaris-core/src/main/java/org/apache/polaris/core/config/PolarisConfigurationStore.java
@@ -71,18 +71,18 @@ public interface PolarisConfigurationStore {
    */
   private <T> @Nonnull T tryCast(PolarisConfiguration<T> config, Object value) 
{
     if (value == null) {
-      return config.defaultValue;
+      return config.defaultValue();
     }
 
-    if (config.defaultValue instanceof Boolean) {
+    if (config.defaultValue() instanceof Boolean) {
       return config.cast(Boolean.valueOf(String.valueOf(value)));
-    } else if (config.defaultValue instanceof Integer) {
+    } else if (config.defaultValue() instanceof Integer) {
       return config.cast(Integer.valueOf(String.valueOf(value)));
-    } else if (config.defaultValue instanceof Long) {
+    } else if (config.defaultValue() instanceof Long) {
       return config.cast(Long.valueOf(String.valueOf(value)));
-    } else if (config.defaultValue instanceof Double) {
+    } else if (config.defaultValue() instanceof Double) {
       return config.cast(Double.valueOf(String.valueOf(value)));
-    } else if (config.defaultValue instanceof List<?>) {
+    } else if (config.defaultValue() instanceof List<?>) {
       return config.cast(new ArrayList<>((List<?>) value));
     } else {
       return config.cast(value);
@@ -99,7 +99,7 @@ public interface PolarisConfigurationStore {
    */
   default <T> @Nonnull T getConfiguration(
       @Nonnull RealmContext realmContext, PolarisConfiguration<T> config) {
-    T result = getConfiguration(realmContext, config.key, config.defaultValue);
+    T result = getConfiguration(realmContext, config.key(), 
config.defaultValue());
     return tryCast(config, result);
   }
 
diff --git 
a/polaris-core/src/main/java/org/apache/polaris/core/storage/cache/StorageCredentialCache.java
 
b/polaris-core/src/main/java/org/apache/polaris/core/storage/cache/StorageCredentialCache.java
index 36f666db0..e3a7a4f13 100644
--- 
a/polaris-core/src/main/java/org/apache/polaris/core/storage/cache/StorageCredentialCache.java
+++ 
b/polaris-core/src/main/java/org/apache/polaris/core/storage/cache/StorageCredentialCache.java
@@ -91,8 +91,8 @@ public class StorageCredentialCache {
       throw new IllegalArgumentException(
           String.format(
               "%s should be less than %s",
-              
FeatureConfiguration.STORAGE_CREDENTIAL_CACHE_DURATION_SECONDS.key,
-              FeatureConfiguration.STORAGE_CREDENTIAL_DURATION_SECONDS.key));
+              
FeatureConfiguration.STORAGE_CREDENTIAL_CACHE_DURATION_SECONDS.key(),
+              FeatureConfiguration.STORAGE_CREDENTIAL_DURATION_SECONDS.key()));
     } else {
       return cacheDurationSeconds * 1000L;
     }
diff --git 
a/polaris-core/src/test/java/org/apache/polaris/service/storage/PolarisConfigurationStoreTest.java
 
b/polaris-core/src/test/java/org/apache/polaris/service/storage/PolarisConfigurationStoreTest.java
index 4b190d3d1..612b8716b 100644
--- 
a/polaris-core/src/test/java/org/apache/polaris/service/storage/PolarisConfigurationStoreTest.java
+++ 
b/polaris-core/src/test/java/org/apache/polaris/service/storage/PolarisConfigurationStoreTest.java
@@ -56,8 +56,8 @@ public class PolarisConfigurationStoreTest {
           @Override
           public <T> @Nullable T getConfiguration(@Nonnull RealmContext ctx, 
String configName) {
             for (PolarisConfiguration<?> c : configs) {
-              if (c.key.equals(configName)) {
-                return (T) String.valueOf(c.defaultValue);
+              if (c.key().equals(configName)) {
+                return (T) String.valueOf(c.defaultValue());
               }
             }
 
@@ -71,7 +71,7 @@ public class PolarisConfigurationStoreTest {
     // Ensure that we can fetch all the configs and that the value is what we 
expect, which
     // is the config's default value based on how we've implemented 
PolarisConfigurationStore above.
     for (PolarisConfiguration<?> c : configs) {
-      Assertions.assertEquals(c.defaultValue, 
store.getConfiguration(testRealmContext, c));
+      Assertions.assertEquals(c.defaultValue(), 
store.getConfiguration(testRealmContext, c));
     }
   }
 
diff --git 
a/runtime/service/src/main/java/org/apache/polaris/service/quarkus/config/ProductionReadinessChecks.java
 
b/runtime/service/src/main/java/org/apache/polaris/service/quarkus/config/ProductionReadinessChecks.java
index ef2c1813e..4205ef4cf 100644
--- 
a/runtime/service/src/main/java/org/apache/polaris/service/quarkus/config/ProductionReadinessChecks.java
+++ 
b/runtime/service/src/main/java/org/apache/polaris/service/quarkus/config/ProductionReadinessChecks.java
@@ -217,26 +217,26 @@ public class ProductionReadinessChecks {
     var insecure = FeatureConfiguration.ALLOW_INSECURE_STORAGE_TYPES;
 
     var errors = new ArrayList<Error>();
-    if 
(Boolean.parseBoolean(featureConfiguration.defaults().get(insecure.key))) {
+    if 
(Boolean.parseBoolean(featureConfiguration.defaults().get(insecure.key()))) {
       errors.add(
           Error.ofSevere(
               "Must not enable a configuration that exposes known and severe 
security risks: "
-                  + insecure.description,
-              format("polaris.features.\"%s\"", insecure.key)));
+                  + insecure.description(),
+              format("polaris.features.\"%s\"", insecure.key())));
     }
 
     featureConfiguration
         .realmOverrides()
         .forEach(
             (realmId, overrides) -> {
-              if 
(Boolean.parseBoolean(overrides.overrides().get(insecure.key))) {
+              if 
(Boolean.parseBoolean(overrides.overrides().get(insecure.key()))) {
                 errors.add(
                     Error.ofSevere(
                         "Must not enable a configuration that exposes known 
and severe security risks: "
-                            + insecure.description,
+                            + insecure.description(),
                         format(
                             
"polaris.features.realm-overrides.\"%s\".overrides.\"%s\"",
-                            realmId, insecure.key)));
+                            realmId, insecure.key())));
               }
             });
 
@@ -245,7 +245,7 @@ public class ProductionReadinessChecks {
     var defaults = featureConfiguration.parseDefaults(mapper);
     var realmOverrides = featureConfiguration.parseRealmOverrides(mapper);
     @SuppressWarnings("unchecked")
-    var supported = (List<String>) defaults.getOrDefault(storageTypes.key, 
List.of());
+    var supported = (List<String>) defaults.getOrDefault(storageTypes.key(), 
List.of());
     supported.stream()
         .filter(n -> !IcebergPropertiesValidation.safeStorageType(n))
         .forEach(
@@ -255,11 +255,11 @@ public class ProductionReadinessChecks {
                         format(
                             "The storage type '%s' is considered insecure and 
exposes the service to severe security risks!",
                             t),
-                        format("polaris.features.\"%s\"", storageTypes.key))));
+                        format("polaris.features.\"%s\"", 
storageTypes.key()))));
     realmOverrides.forEach(
         (realmId, overrides) -> {
           @SuppressWarnings("unchecked")
-          var s = (List<String>) overrides.getOrDefault(storageTypes.key, 
List.of());
+          var s = (List<String>) overrides.getOrDefault(storageTypes.key(), 
List.of());
           s.stream()
               .filter(n -> !IcebergPropertiesValidation.safeStorageType(n))
               .forEach(
@@ -271,7 +271,7 @@ public class ProductionReadinessChecks {
                                   t),
                               format(
                                   
"polaris.features.realm-overrides.\"%s\".overrides.\"%s\"",
-                                  realmId, storageTypes.key))));
+                                  realmId, storageTypes.key()))));
         });
     return errors.isEmpty()
         ? ProductionReadinessCheck.OK
diff --git 
a/runtime/service/src/test/java/org/apache/polaris/service/quarkus/admin/PolarisOverlappingTableTest.java
 
b/runtime/service/src/test/java/org/apache/polaris/service/quarkus/admin/PolarisOverlappingTableTest.java
index a658b8e88..2245bb9e9 100644
--- 
a/runtime/service/src/test/java/org/apache/polaris/service/quarkus/admin/PolarisOverlappingTableTest.java
+++ 
b/runtime/service/src/test/java/org/apache/polaris/service/quarkus/admin/PolarisOverlappingTableTest.java
@@ -340,7 +340,7 @@ public class PolarisOverlappingTableTest {
             "true",
             "SUPPORTED_CATALOG_STORAGE_TYPES",
             List.of("FILE", "S3"),
-            OPTIMIZED_SIBLING_CHECK.key,
+            OPTIMIZED_SIBLING_CHECK.key(),
             "false");
 
     TestServices services =
@@ -369,7 +369,7 @@ public class PolarisOverlappingTableTest {
             "true",
             "SUPPORTED_CATALOG_STORAGE_TYPES",
             List.of("FILE", "S3"),
-            OPTIMIZED_SIBLING_CHECK.key,
+            OPTIMIZED_SIBLING_CHECK.key(),
             "true");
     Map<String, String> hashedAndOverlapButNoOptimizedCatalog =
         Map.of(
diff --git 
a/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogTest.java
 
b/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogTest.java
index a5f4f9080..8534e18ea 100644
--- 
a/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogTest.java
+++ 
b/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogTest.java
@@ -1956,7 +1956,7 @@ public abstract class IcebergCatalogTest extends 
CatalogTests<IcebergCatalog> {
     // Attempt to drop the table:
     Assertions.assertThatThrownBy(() -> noPurgeCatalog.dropTable(TABLE, true))
         .isInstanceOf(ForbiddenException.class)
-        
.hasMessageContaining(FeatureConfiguration.DROP_WITH_PURGE_ENABLED.key);
+        
.hasMessageContaining(FeatureConfiguration.DROP_WITH_PURGE_ENABLED.key());
   }
 
   private TableMetadata createSampleTableMetadata(String tableLocation) {
diff --git 
a/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalog.java
 
b/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalog.java
index e1b317a91..5c0e6b18d 100644
--- 
a/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalog.java
+++ 
b/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalog.java
@@ -949,8 +949,8 @@ public class IcebergCatalog extends BaseMetastoreViewCatalog
       throw new IllegalStateException(
           String.format(
               "The configuration %s is enabled, but %s is not enabled",
-              
FeatureConfiguration.DEFAULT_LOCATION_OBJECT_STORAGE_PREFIX_ENABLED.key,
-              FeatureConfiguration.ALLOW_UNSTRUCTURED_TABLE_LOCATION.key));
+              
FeatureConfiguration.DEFAULT_LOCATION_OBJECT_STORAGE_PREFIX_ENABLED.key(),
+              FeatureConfiguration.ALLOW_UNSTRUCTURED_TABLE_LOCATION.key()));
     } else if (!allowTableLocationOverlap) {
       // TODO consider doing this check any time ALLOW_EXTERNAL_TABLE_LOCATION 
is enabled, not just
       // here
@@ -961,17 +961,17 @@ public class IcebergCatalog extends 
BaseMetastoreViewCatalog
                     + " performed, but only within each namespace. However, %s 
is enabled, which indicates"
                     + " that tables may be created outside of their parent 
namespace. This is not a safe"
                     + " combination of configurations.",
-                FeatureConfiguration.ALLOW_TABLE_LOCATION_OVERLAP.key,
-                FeatureConfiguration.OPTIMIZED_SIBLING_CHECK.key,
-                FeatureConfiguration.ALLOW_UNSTRUCTURED_TABLE_LOCATION.key));
+                FeatureConfiguration.ALLOW_TABLE_LOCATION_OVERLAP.key(),
+                FeatureConfiguration.OPTIMIZED_SIBLING_CHECK.key(),
+                FeatureConfiguration.ALLOW_UNSTRUCTURED_TABLE_LOCATION.key()));
       } else if (!loggedPrefixOverlapWarning.getAndSet(true)) {
         LOGGER.warn(
             "A table is being created with {} and {} enabled, but with {} 
disabled. "
                 + "This is a safe combination of configurations which may 
prevent table overlap, but only if the "
                 + "underlying persistence actually implements %s. Exercise 
caution.",
-            
FeatureConfiguration.DEFAULT_LOCATION_OBJECT_STORAGE_PREFIX_ENABLED.key,
-            FeatureConfiguration.OPTIMIZED_SIBLING_CHECK.key,
-            FeatureConfiguration.ALLOW_TABLE_LOCATION_OVERLAP.key);
+            
FeatureConfiguration.DEFAULT_LOCATION_OBJECT_STORAGE_PREFIX_ENABLED.key(),
+            FeatureConfiguration.OPTIMIZED_SIBLING_CHECK.key(),
+            FeatureConfiguration.ALLOW_TABLE_LOCATION_OVERLAP.key());
       }
       return buildPrefixedLocation(tableIdentifier);
     } else {
@@ -2460,7 +2460,7 @@ public class IcebergCatalog extends 
BaseMetastoreViewCatalog
                 "Unable to purge entity: %s. To enable this feature, set the 
Polaris configuration %s "
                     + "or the catalog configuration %s",
                 identifier.name(),
-                FeatureConfiguration.DROP_WITH_PURGE_ENABLED.key,
+                FeatureConfiguration.DROP_WITH_PURGE_ENABLED.key(),
                 FeatureConfiguration.DROP_WITH_PURGE_ENABLED.catalogConfig()));
       }
     }
diff --git 
a/service/common/src/main/java/org/apache/polaris/service/catalog/io/FileIOUtil.java
 
b/service/common/src/main/java/org/apache/polaris/service/catalog/io/FileIOUtil.java
index 0e6211076..db3771b96 100644
--- 
a/service/common/src/main/java/org/apache/polaris/service/catalog/io/FileIOUtil.java
+++ 
b/service/common/src/main/java/org/apache/polaris/service/catalog/io/FileIOUtil.java
@@ -88,8 +88,8 @@ public class FileIOUtil {
     boolean skipCredentialSubscopingIndirection =
         configurationStore.getConfiguration(
             callContext.getRealmContext(),
-            FeatureConfiguration.SKIP_CREDENTIAL_SUBSCOPING_INDIRECTION.key,
-            
FeatureConfiguration.SKIP_CREDENTIAL_SUBSCOPING_INDIRECTION.defaultValue);
+            FeatureConfiguration.SKIP_CREDENTIAL_SUBSCOPING_INDIRECTION.key(),
+            
FeatureConfiguration.SKIP_CREDENTIAL_SUBSCOPING_INDIRECTION.defaultValue());
     if (skipCredentialSubscopingIndirection) {
       LOGGER
           .atDebug()

Reply via email to