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

dhuo pushed a commit to branch persistence-poc
in repository https://gitbox.apache.org/repos/asf/polaris.git

commit 7d8942f8e30769be920778ab60496ebd6eeb4869
Author: Dennis Huo <[email protected]>
AuthorDate: Tue Feb 25 03:15:50 2025 +0000

    Restructure persistence class hierarchy and remove vestigial interfaces
    
    Extract a basic abstract base class BaseMetaStoreManager which can
    hold shared logic between implementations of PolarisMetaStoreManager
---
 .../PolarisEclipseLinkMetaStoreSessionImpl.java    |  4 +-
 .../core/persistence/BaseMetaStoreManager.java     | 48 ++++++++++++++++++++++
 .../persistence/PolarisMetaStoreManagerImpl.java   | 26 ++----------
 .../PolarisTreeMapMetaStoreSessionImpl.java        |  2 +-
 .../storage/cache/StorageCredentialCacheTest.java  |  3 +-
 .../service/catalog/io/DefaultFileIOFactory.java   |  3 --
 .../context/DefaultCallContextResolver.java        |  4 ++
 7 files changed, 59 insertions(+), 31 deletions(-)

diff --git 
a/extension/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java
 
b/extension/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java
index 7950075c..04787d51 100644
--- 
a/extension/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java
+++ 
b/extension/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java
@@ -49,7 +49,7 @@ import org.apache.polaris.core.entity.PolarisEntityType;
 import org.apache.polaris.core.entity.PolarisGrantRecord;
 import org.apache.polaris.core.entity.PolarisPrincipalSecrets;
 import org.apache.polaris.core.exceptions.AlreadyExistsException;
-import org.apache.polaris.core.persistence.PolarisMetaStoreManagerImpl;
+import org.apache.polaris.core.persistence.BaseMetaStoreManager;
 import org.apache.polaris.core.persistence.PolarisMetaStoreSession;
 import org.apache.polaris.core.persistence.PrincipalSecretsGenerator;
 import org.apache.polaris.core.persistence.RetryOnConcurrencyException;
@@ -674,7 +674,7 @@ public class PolarisEclipseLinkMetaStoreSessionImpl 
implements PolarisMetaStoreS
       PolarisStorageIntegration<T> loadPolarisStorageIntegration(
           @Nonnull PolarisCallContext callCtx, @Nonnull PolarisBaseEntity 
entity) {
     PolarisStorageConfigurationInfo storageConfig =
-        PolarisMetaStoreManagerImpl.readStorageConfiguration(callCtx, entity);
+        BaseMetaStoreManager.extractStorageConfiguration(callCtx, entity);
     return 
storageIntegrationProvider.getStorageIntegrationForConfig(storageConfig);
   }
 
diff --git 
a/polaris-core/src/main/java/org/apache/polaris/core/persistence/BaseMetaStoreManager.java
 
b/polaris-core/src/main/java/org/apache/polaris/core/persistence/BaseMetaStoreManager.java
new file mode 100644
index 00000000..c27ee1b3
--- /dev/null
+++ 
b/polaris-core/src/main/java/org/apache/polaris/core/persistence/BaseMetaStoreManager.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.polaris.core.persistence;
+
+import jakarta.annotation.Nonnull;
+import java.util.Map;
+import org.apache.polaris.core.PolarisCallContext;
+import org.apache.polaris.core.entity.PolarisBaseEntity;
+import org.apache.polaris.core.entity.PolarisEntityConstants;
+import org.apache.polaris.core.storage.PolarisStorageConfigurationInfo;
+
+public abstract class BaseMetaStoreManager implements PolarisMetaStoreManager {
+  public static PolarisStorageConfigurationInfo extractStorageConfiguration(
+      @Nonnull PolarisCallContext callCtx, PolarisBaseEntity reloadedEntity) {
+    Map<String, String> propMap =
+        PolarisObjectMapperUtil.deserializeProperties(
+            callCtx, reloadedEntity.getInternalProperties());
+    String storageConfigInfoStr =
+        propMap.get(PolarisEntityConstants.getStorageConfigInfoPropertyName());
+
+    callCtx
+        .getDiagServices()
+        .check(
+            storageConfigInfoStr != null,
+            "missing_storage_configuration_info",
+            "catalogId={}, entityId={}",
+            reloadedEntity.getCatalogId(),
+            reloadedEntity.getId());
+    return PolarisStorageConfigurationInfo.deserialize(
+        callCtx.getDiagServices(), storageConfigInfoStr);
+  }
+}
diff --git 
a/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManagerImpl.java
 
b/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManagerImpl.java
index 98fd7789..6214d0f0 100644
--- 
a/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManagerImpl.java
+++ 
b/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManagerImpl.java
@@ -63,7 +63,7 @@ import org.slf4j.LoggerFactory;
  * and retrieve all Polaris metadata
  */
 @SuppressFBWarnings("NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE")
-public class PolarisMetaStoreManagerImpl implements PolarisMetaStoreManager {
+public class PolarisMetaStoreManagerImpl extends BaseMetaStoreManager {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(PolarisMetaStoreManagerImpl.class);
 
   /** mapper, allows to serialize/deserialize properties to/from JSON */
@@ -2107,7 +2107,7 @@ public class PolarisMetaStoreManagerImpl implements 
PolarisMetaStoreManager {
             entityId);
 
     PolarisStorageConfigurationInfo storageConfigurationInfo =
-        readStorageConfiguration(callCtx, reloadedEntity.getEntity());
+        BaseMetaStoreManager.extractStorageConfiguration(callCtx, 
reloadedEntity.getEntity());
     try {
       EnumMap<PolarisCredentialProperty, String> creds =
           storageIntegration.getSubscopedCreds(
@@ -2159,7 +2159,7 @@ public class PolarisMetaStoreManagerImpl implements 
PolarisMetaStoreManager {
 
     // validate access
     PolarisStorageConfigurationInfo storageConfigurationInfo =
-        readStorageConfiguration(callCtx, reloadedEntity.getEntity());
+        BaseMetaStoreManager.extractStorageConfiguration(callCtx, 
reloadedEntity.getEntity());
     Map<String, String> validateLocationAccess =
         storageIntegration
             .validateAccessToLocations(storageConfigurationInfo, actions, 
locations)
@@ -2174,26 +2174,6 @@ public class PolarisMetaStoreManagerImpl implements 
PolarisMetaStoreManager {
     return new ValidateAccessResult(validateLocationAccess);
   }
 
-  public static PolarisStorageConfigurationInfo readStorageConfiguration(
-      @Nonnull PolarisCallContext callCtx, PolarisBaseEntity reloadedEntity) {
-    Map<String, String> propMap =
-        PolarisObjectMapperUtil.deserializeProperties(
-            callCtx, reloadedEntity.getInternalProperties());
-    String storageConfigInfoStr =
-        propMap.get(PolarisEntityConstants.getStorageConfigInfoPropertyName());
-
-    callCtx
-        .getDiagServices()
-        .check(
-            storageConfigInfoStr != null,
-            "missing_storage_configuration_info",
-            "catalogId={}, entityId={}",
-            reloadedEntity.getCatalogId(),
-            reloadedEntity.getId());
-    return PolarisStorageConfigurationInfo.deserialize(
-        callCtx.getDiagServices(), storageConfigInfoStr);
-  }
-
   /**
    * Get the internal property map for an entity
    *
diff --git 
a/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisTreeMapMetaStoreSessionImpl.java
 
b/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisTreeMapMetaStoreSessionImpl.java
index bea20541..6516b7b7 100644
--- 
a/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisTreeMapMetaStoreSessionImpl.java
+++ 
b/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisTreeMapMetaStoreSessionImpl.java
@@ -565,7 +565,7 @@ public class PolarisTreeMapMetaStoreSessionImpl implements 
PolarisMetaStoreSessi
       PolarisStorageIntegration<T> loadPolarisStorageIntegration(
           @Nonnull PolarisCallContext callCtx, @Nonnull PolarisBaseEntity 
entity) {
     PolarisStorageConfigurationInfo storageConfig =
-        PolarisMetaStoreManagerImpl.readStorageConfiguration(callCtx, entity);
+        BaseMetaStoreManager.extractStorageConfiguration(callCtx, entity);
     return 
storageIntegrationProvider.getStorageIntegrationForConfig(storageConfig);
   }
 
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 d19bc41c..a4f7c693 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
@@ -39,7 +39,6 @@ import org.apache.polaris.core.entity.PolarisEntitySubType;
 import org.apache.polaris.core.entity.PolarisEntityType;
 import org.apache.polaris.core.persistence.BaseResult;
 import org.apache.polaris.core.persistence.PolarisMetaStoreManager;
-import org.apache.polaris.core.persistence.PolarisMetaStoreManagerImpl;
 import org.apache.polaris.core.persistence.PolarisMetaStoreSession;
 import org.apache.polaris.core.persistence.PolarisObjectMapperUtil;
 import org.apache.polaris.core.persistence.PolarisTreeMapMetaStoreSessionImpl;
@@ -70,7 +69,7 @@ public class StorageCredentialCacheTest {
     PolarisMetaStoreSession metaStore =
         new PolarisTreeMapMetaStoreSessionImpl(store, Mockito.mock(), 
RANDOM_SECRETS);
     callCtx = new PolarisCallContext(metaStore, diagServices);
-    metaStoreManager = Mockito.mock(PolarisMetaStoreManagerImpl.class);
+    metaStoreManager = Mockito.mock(PolarisMetaStoreManager.class);
     storageCredentialCache = new StorageCredentialCache();
   }
 
diff --git 
a/service/common/src/main/java/org/apache/polaris/service/catalog/io/DefaultFileIOFactory.java
 
b/service/common/src/main/java/org/apache/polaris/service/catalog/io/DefaultFileIOFactory.java
index 2c9b928c..48d9a280 100644
--- 
a/service/common/src/main/java/org/apache/polaris/service/catalog/io/DefaultFileIOFactory.java
+++ 
b/service/common/src/main/java/org/apache/polaris/service/catalog/io/DefaultFileIOFactory.java
@@ -37,7 +37,6 @@ import org.apache.polaris.core.context.RealmContext;
 import org.apache.polaris.core.entity.PolarisEntity;
 import org.apache.polaris.core.persistence.MetaStoreManagerFactory;
 import org.apache.polaris.core.persistence.PolarisEntityManager;
-import org.apache.polaris.core.persistence.PolarisMetaStoreSession;
 import org.apache.polaris.core.persistence.PolarisResolvedPathWrapper;
 import org.apache.polaris.core.storage.PolarisCredentialVendor;
 import org.apache.polaris.core.storage.PolarisStorageActions;
@@ -83,8 +82,6 @@ public class DefaultFileIOFactory implements FileIOFactory {
         realmEntityManagerFactory.getOrCreateEntityManager(realmContext);
     PolarisCredentialVendor credentialVendor =
         metaStoreManagerFactory.getOrCreateMetaStoreManager(realmContext);
-    PolarisMetaStoreSession metaStoreSession =
-        metaStoreManagerFactory.getOrCreateSessionSupplier(realmContext).get();
 
     // Get subcoped creds
     properties = new HashMap<>(properties);
diff --git 
a/service/common/src/main/java/org/apache/polaris/service/context/DefaultCallContextResolver.java
 
b/service/common/src/main/java/org/apache/polaris/service/context/DefaultCallContextResolver.java
index ff394972..985e57d8 100644
--- 
a/service/common/src/main/java/org/apache/polaris/service/context/DefaultCallContextResolver.java
+++ 
b/service/common/src/main/java/org/apache/polaris/service/context/DefaultCallContextResolver.java
@@ -60,6 +60,10 @@ public class DefaultCallContextResolver implements 
CallContextResolver {
         .addKeyValue("headers", headers)
         .log("Resolving CallContext");
 
+    // TODO: Once we have non-transactional-database persistence stores, this 
should be
+    // pushed down for the metaStoreManagerFactory to inject Transactional-DB 
specific things
+    // (including the MetaStoreSession" into the PolarisCallContext. The 
non-transactional
+    // factories would then inject something else instead if needed.
     PolarisMetaStoreSession metaStoreSession =
         metaStoreManagerFactory.getOrCreateSessionSupplier(realmContext).get();
     PolarisCallContext polarisContext =

Reply via email to