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 9ecf29be1 Use PolarisImmutable for StorageCredentialCacheKey (#2029)
9ecf29be1 is described below

commit 9ecf29be1906d77aad3f0b4961327a38ace2c496
Author: Christopher Lambert <xn...@gmx.de>
AuthorDate: Tue Jul 15 18:43:08 2025 +0200

    Use PolarisImmutable for StorageCredentialCacheKey (#2029)
    
    * remove unused entityId from StorageCredentialCacheKey
    
    * convert StorageCredentialCacheKey to immutables
---
 .../core/storage/cache/StorageCredentialCache.java |  12 +--
 .../storage/cache/StorageCredentialCacheKey.java   | 113 +++++----------------
 .../storage/cache/StorageCredentialCacheTest.java  |   2 +-
 3 files changed, 30 insertions(+), 97 deletions(-)

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 14b696389..44b41afb3 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
@@ -112,7 +112,7 @@ public class StorageCredentialCache {
           .fail("entity_type_not_suppported_to_scope_creds", "type={}", 
polarisEntity.getType());
     }
     StorageCredentialCacheKey key =
-        new StorageCredentialCacheKey(
+        StorageCredentialCacheKey.of(
             callCtx.getRealmContext().getRealmIdentifier(),
             polarisEntity,
             allowListOperation,
@@ -125,12 +125,12 @@ public class StorageCredentialCache {
           ScopedCredentialsResult scopedCredentialsResult =
               credentialVendor.getSubscopedCredsForEntity(
                   callCtx,
-                  k.getCatalogId(),
-                  k.getEntityId(),
+                  k.catalogId(),
+                  polarisEntity.getId(),
                   polarisEntity.getType(),
-                  k.isAllowedListAction(),
-                  k.getAllowedReadLocations(),
-                  k.getAllowedWriteLocations());
+                  k.allowedListAction(),
+                  k.allowedReadLocations(),
+                  k.allowedWriteLocations());
           if (scopedCredentialsResult.isSuccess()) {
             long maxCacheDurationMs = 
maxCacheDurationMs(callCtx.getRealmConfig());
             return new StorageCredentialCacheEntry(scopedCredentialsResult, 
maxCacheDurationMs);
diff --git 
a/polaris-core/src/main/java/org/apache/polaris/core/storage/cache/StorageCredentialCacheKey.java
 
b/polaris-core/src/main/java/org/apache/polaris/core/storage/cache/StorageCredentialCacheKey.java
index 26c2115d9..79eba7d1d 100644
--- 
a/polaris-core/src/main/java/org/apache/polaris/core/storage/cache/StorageCredentialCacheKey.java
+++ 
b/polaris-core/src/main/java/org/apache/polaris/core/storage/cache/StorageCredentialCacheKey.java
@@ -18,118 +18,51 @@
  */
 package org.apache.polaris.core.storage.cache;
 
-import java.util.Objects;
+import jakarta.annotation.Nullable;
 import java.util.Set;
 import org.apache.polaris.core.entity.PolarisEntity;
 import org.apache.polaris.core.entity.PolarisEntityConstants;
+import org.apache.polaris.immutables.PolarisImmutable;
+import org.immutables.value.Value;
 
-public class StorageCredentialCacheKey {
+@PolarisImmutable
+public interface StorageCredentialCacheKey {
 
-  private final String realmId;
-  private final long catalogId;
+  @Value.Parameter(order = 1)
+  String realmId();
 
-  /** The serialized string of the storage config. */
-  private final String storageConfigSerializedStr;
+  @Value.Parameter(order = 2)
+  long catalogId();
 
-  /**
-   * The entity id is passed to be used to fetch subscoped creds, but is not 
used to do hash/equals
-   * as part of the cache key.
-   */
-  private final long entityId;
+  @Value.Parameter(order = 3)
+  @Nullable
+  String storageConfigSerializedStr();
 
-  private final boolean allowedListAction;
-  private final Set<String> allowedReadLocations;
+  @Value.Parameter(order = 4)
+  boolean allowedListAction();
 
-  private final Set<String> allowedWriteLocations;
+  @Value.Parameter(order = 5)
+  Set<String> allowedReadLocations();
 
-  public StorageCredentialCacheKey(
+  @Value.Parameter(order = 6)
+  Set<String> allowedWriteLocations();
+
+  static StorageCredentialCacheKey of(
       String realmId,
       PolarisEntity entity,
       boolean allowedListAction,
       Set<String> allowedReadLocations,
       Set<String> allowedWriteLocations) {
-    this.realmId = realmId;
-    this.catalogId = entity.getCatalogId();
-    this.storageConfigSerializedStr =
+    String storageConfigSerializedStr =
         entity
             .getInternalPropertiesAsMap()
             .get(PolarisEntityConstants.getStorageConfigInfoPropertyName());
-    this.entityId = entity.getId();
-    this.allowedListAction = allowedListAction;
-    this.allowedReadLocations = allowedReadLocations;
-    this.allowedWriteLocations = allowedWriteLocations;
-  }
-
-  public String getRealmId() {
-    return realmId;
-  }
-
-  public long getCatalogId() {
-    return catalogId;
-  }
-
-  public String getStorageConfigSerializedStr() {
-    return storageConfigSerializedStr;
-  }
-
-  public long getEntityId() {
-    return entityId;
-  }
-
-  public boolean isAllowedListAction() {
-    return allowedListAction;
-  }
-
-  public Set<String> getAllowedReadLocations() {
-    return allowedReadLocations;
-  }
-
-  public Set<String> getAllowedWriteLocations() {
-    return allowedWriteLocations;
-  }
-
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) return true;
-    if (o == null || getClass() != o.getClass()) return false;
-    StorageCredentialCacheKey cacheKey = (StorageCredentialCacheKey) o;
-    return Objects.equals(realmId, cacheKey.getRealmId())
-        && catalogId == cacheKey.getCatalogId()
-        && Objects.equals(storageConfigSerializedStr, 
cacheKey.getStorageConfigSerializedStr())
-        && allowedListAction == cacheKey.allowedListAction
-        && Objects.equals(allowedReadLocations, cacheKey.allowedReadLocations)
-        && Objects.equals(allowedWriteLocations, 
cacheKey.allowedWriteLocations);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(
+    return ImmutableStorageCredentialCacheKey.of(
         realmId,
-        catalogId,
+        entity.getCatalogId(),
         storageConfigSerializedStr,
         allowedListAction,
         allowedReadLocations,
         allowedWriteLocations);
   }
-
-  @Override
-  public String toString() {
-    return "StorageCredentialCacheKey{"
-        + "realmId="
-        + realmId
-        + ", catalogId="
-        + catalogId
-        + ", storageConfigSerializedStr='"
-        + storageConfigSerializedStr
-        + '\''
-        + ", entityId="
-        + entityId
-        + ", allowedListAction="
-        + allowedListAction
-        + ", allowedReadLocations="
-        + allowedReadLocations
-        + ", allowedWriteLocations="
-        + allowedWriteLocations
-        + '}';
-  }
 }
diff --git 
a/polaris-core/src/test/java/org/apache/polaris/core/storage/cache/StorageCredentialCacheTest.java
 
b/polaris-core/src/test/java/org/apache/polaris/core/storage/cache/StorageCredentialCacheTest.java
index 1460b71cf..bf1cf1fcf 100644
--- 
a/polaris-core/src/test/java/org/apache/polaris/core/storage/cache/StorageCredentialCacheTest.java
+++ 
b/polaris-core/src/test/java/org/apache/polaris/core/storage/cache/StorageCredentialCacheTest.java
@@ -176,7 +176,7 @@ public class StorageCredentialCacheTest {
             1, 2, PolarisEntityType.CATALOG, 
PolarisEntitySubType.ICEBERG_TABLE, 0, "name");
     PolarisEntity polarisEntity = new PolarisEntity(baseEntity);
     StorageCredentialCacheKey cacheKey =
-        new StorageCredentialCacheKey(
+        StorageCredentialCacheKey.of(
             callCtx.getRealmContext().getRealmIdentifier(),
             polarisEntity,
             true,

Reply via email to