diff --git a/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/EclipseLinkPolarisMetaStoreManagerFactory.java b/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/EclipseLinkPolarisMetaStoreManagerFactory.java index 16c1bb8f44..de121d8565 100644 --- a/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/EclipseLinkPolarisMetaStoreManagerFactory.java +++ b/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/EclipseLinkPolarisMetaStoreManagerFactory.java @@ -68,6 +68,7 @@ protected TransactionalPersistence createMetaStoreSession( @Nullable RootCredentialsSet rootCredentialsSet, @Nonnull PolarisDiagnostics diagnostics) { return new PolarisEclipseLinkMetaStoreSessionImpl( + diagnostics, store, storageIntegrationProvider, realmContext, diff --git a/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java b/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java index 1d708cce6f..9929c2da3e 100644 --- a/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java +++ b/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java @@ -39,6 +39,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import org.apache.polaris.core.PolarisCallContext; +import org.apache.polaris.core.PolarisDiagnostics; import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.EntityNameLookupRecord; import org.apache.polaris.core.entity.LocationBasedEntity; @@ -106,12 +107,14 @@ public class PolarisEclipseLinkMetaStoreSessionImpl extends AbstractTransactiona * @param persistenceUnitName Optional persistence-unit name in confFile. Default to 'polaris'. */ public PolarisEclipseLinkMetaStoreSessionImpl( + @Nonnull PolarisDiagnostics diagnostics, @Nonnull PolarisEclipseLinkStore store, @Nonnull PolarisStorageIntegrationProvider storageIntegrationProvider, @Nonnull RealmContext realmContext, @Nullable String confFile, @Nullable String persistenceUnitName, @Nonnull PrincipalSecretsGenerator secretsGenerator) { + super(diagnostics); LOGGER.debug( "Creating EclipseLink Meta Store Session for realm {}", realmContext.getRealmIdentifier()); emf = createEntityManagerFactory(realmContext, confFile, persistenceUnitName); @@ -159,7 +162,7 @@ static void clearEntityManagerFactories() { @Override public T runInTransaction( @Nonnull PolarisCallContext callCtx, @Nonnull Supplier transactionCode) { - callCtx.getDiagServices().check(localSession.get() == null, "cannot nest transaction"); + getDiagnostics().check(localSession.get() == null, "cannot nest transaction"); try (EntityManager session = emf.createEntityManager()) { localSession.set(session); @@ -206,7 +209,7 @@ public T runInTransaction( @Override public void runActionInTransaction( @Nonnull PolarisCallContext callCtx, @Nonnull Runnable transactionCode) { - callCtx.getDiagServices().check(localSession.get() == null, "cannot nest transaction"); + getDiagnostics().check(localSession.get() == null, "cannot nest transaction"); try (EntityManager session = emf.createEntityManager()) { localSession.set(session); @@ -560,8 +563,7 @@ public int lookupEntityGrantRecordsVersionInCurrentTxn( this.store.lookupPrincipalSecrets(localSession.get(), clientId)); // should be found - callCtx - .getDiagServices() + getDiagnostics() .checkNotNull( principalSecrets, "cannot_find_secrets", @@ -570,8 +572,7 @@ public int lookupEntityGrantRecordsVersionInCurrentTxn( principalId); // ensure principal id is matching - callCtx - .getDiagServices() + getDiagnostics() .check( principalId == principalSecrets.getPrincipalId(), "principal_id_mismatch", @@ -601,8 +602,7 @@ public void deletePrincipalSecretsInCurrentTxn( this.store.lookupPrincipalSecrets(localSession.get(), clientId); // should be found - callCtx - .getDiagServices() + getDiagnostics() .checkNotNull( principalSecrets, "cannot_find_secrets", @@ -611,8 +611,7 @@ public void deletePrincipalSecretsInCurrentTxn( principalId); // ensure principal id is matching - callCtx - .getDiagServices() + getDiagnostics() .check( principalId == principalSecrets.getPrincipalId(), "principal_id_mismatch", @@ -642,7 +641,7 @@ PolarisStorageIntegration createStorageIntegrationInCurrentTxn( PolarisStorageIntegration loadPolarisStorageIntegrationInCurrentTxn( @Nonnull PolarisCallContext callCtx, @Nonnull PolarisBaseEntity entity) { PolarisStorageConfigurationInfo storageConfig = - BaseMetaStoreManager.extractStorageConfiguration(callCtx.getDiagServices(), entity); + BaseMetaStoreManager.extractStorageConfiguration(getDiagnostics(), entity); return storageIntegrationProvider.getStorageIntegrationForConfig(storageConfig); } diff --git a/persistence/eclipselink/src/test/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreManagerTest.java b/persistence/eclipselink/src/test/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreManagerTest.java index d2cb37fecd..ab768ba839 100644 --- a/persistence/eclipselink/src/test/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreManagerTest.java +++ b/persistence/eclipselink/src/test/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreManagerTest.java @@ -86,7 +86,7 @@ protected PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { RealmContext realmContext = () -> "realm"; PolarisEclipseLinkMetaStoreSessionImpl session = new PolarisEclipseLinkMetaStoreSessionImpl( - store, Mockito.mock(), realmContext, null, "polaris", RANDOM_SECRETS); + diagServices, store, Mockito.mock(), realmContext, null, "polaris", RANDOM_SECRETS); TransactionalMetaStoreManagerImpl metaStoreManager = new TransactionalMetaStoreManagerImpl(clock, diagServices); PolarisCallContext callCtx = new PolarisCallContext(realmContext, session, diagServices); @@ -104,7 +104,13 @@ void testCreateStoreSession(String confFile, boolean success) { try { var session = new PolarisEclipseLinkMetaStoreSessionImpl( - store, Mockito.mock(), () -> "realm", confFile, "polaris", RANDOM_SECRETS); + diagServices, + store, + Mockito.mock(), + () -> "realm", + confFile, + "polaris", + RANDOM_SECRETS); assertNotNull(session); assertTrue(success); } catch (Exception e) { diff --git a/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/AbstractTransactionalPersistence.java b/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/AbstractTransactionalPersistence.java index 774c8e6ae9..138b3f4a75 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/AbstractTransactionalPersistence.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/AbstractTransactionalPersistence.java @@ -25,6 +25,7 @@ import java.util.function.Function; import java.util.function.Predicate; import org.apache.polaris.core.PolarisCallContext; +import org.apache.polaris.core.PolarisDiagnostics; import org.apache.polaris.core.entity.EntityNameLookupRecord; import org.apache.polaris.core.entity.PolarisBaseEntity; import org.apache.polaris.core.entity.PolarisChangeTrackingVersions; @@ -51,6 +52,17 @@ * the BasePersistence methods in terms of lower-level methods that subclasses must implement. */ public abstract class AbstractTransactionalPersistence implements TransactionalPersistence { + + private final PolarisDiagnostics diagnostics; + + protected AbstractTransactionalPersistence(PolarisDiagnostics diagnostics) { + this.diagnostics = diagnostics; + } + + protected PolarisDiagnostics getDiagnostics() { + return diagnostics; + } + // // New abstract methods specific to this slice-based transactional persistence that subclasses // must implement to inherit implementations of lookup/write/delete @@ -210,8 +222,7 @@ public void writeEntities( @Nonnull List entities, @Nullable List originalEntities) { if (originalEntities != null) { - callCtx - .getDiagServices() + getDiagnostics() .check( entities.size() == originalEntities.size(), "mismatched_entities_and_original_entities_size", @@ -580,8 +591,7 @@ public void writeEntitiesInCurrentTxn( @Nonnull List entities, @Nullable List originalEntities) { if (originalEntities != null) { - callCtx - .getDiagServices() + getDiagnostics() .check( entities.size() == originalEntities.size(), "mismatched_entities_and_original_entities_size", @@ -643,8 +653,7 @@ public PolarisBaseEntity lookupEntityByNameInCurrentTxn( entityActiveRecord.getCatalogId(), entityActiveRecord.getId(), entityActiveRecord.getTypeCode()); - callCtx - .getDiagServices() + getDiagnostics() .checkNotNull( entity, "unexpected_not_found_entity", "entityActiveRecord={}", entityActiveRecord); diff --git a/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TreeMapTransactionalPersistenceImpl.java b/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TreeMapTransactionalPersistenceImpl.java index cd71a6079f..7fdd94b9a7 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TreeMapTransactionalPersistenceImpl.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TreeMapTransactionalPersistenceImpl.java @@ -29,6 +29,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import org.apache.polaris.core.PolarisCallContext; +import org.apache.polaris.core.PolarisDiagnostics; import org.apache.polaris.core.entity.EntityNameLookupRecord; import org.apache.polaris.core.entity.LocationBasedEntity; import org.apache.polaris.core.entity.PolarisBaseEntity; @@ -62,11 +63,11 @@ public class TreeMapTransactionalPersistenceImpl extends AbstractTransactionalPe private final PrincipalSecretsGenerator secretsGenerator; public TreeMapTransactionalPersistenceImpl( + @Nonnull PolarisDiagnostics diagnostics, @Nonnull TreeMapMetaStore store, @Nonnull PolarisStorageIntegrationProvider storageIntegrationProvider, @Nonnull PrincipalSecretsGenerator secretsGenerator) { - - // init store + super(diagnostics); this.store = store; this.storageIntegrationProvider = storageIntegrationProvider; this.secretsGenerator = secretsGenerator; @@ -78,7 +79,7 @@ public T runInTransaction( @Nonnull PolarisCallContext callCtx, @Nonnull Supplier transactionCode) { // run transaction on our underlying store - return store.runInTransaction(callCtx.getDiagServices(), transactionCode); + return store.runInTransaction(getDiagnostics(), transactionCode); } /** {@inheritDoc} */ @@ -87,7 +88,7 @@ public void runActionInTransaction( @Nonnull PolarisCallContext callCtx, @Nonnull Runnable transactionCode) { // run transaction on our underlying store - store.runActionInTransaction(callCtx.getDiagServices(), transactionCode); + store.runActionInTransaction(getDiagnostics(), transactionCode); } /** {@inheritDoc} */ @@ -95,7 +96,7 @@ public void runActionInTransaction( public T runInReadTransaction( @Nonnull PolarisCallContext callCtx, @Nonnull Supplier transactionCode) { // run transaction on our underlying store - return store.runInReadTransaction(callCtx.getDiagServices(), transactionCode); + return store.runInReadTransaction(getDiagnostics(), transactionCode); } /** {@inheritDoc} */ @@ -104,7 +105,7 @@ public void runActionInReadTransaction( @Nonnull PolarisCallContext callCtx, @Nonnull Runnable transactionCode) { // run transaction on our underlying store - store.runActionInReadTransaction(callCtx.getDiagServices(), transactionCode); + store.runActionInReadTransaction(getDiagnostics(), transactionCode); } /** @@ -462,8 +463,7 @@ public int lookupEntityGrantRecordsVersionInCurrentTxn( PolarisPrincipalSecrets principalSecrets = this.store.getSlicePrincipalSecrets().read(clientId); // should be found - callCtx - .getDiagServices() + getDiagnostics() .checkNotNull( principalSecrets, "cannot_find_secrets", @@ -472,8 +472,7 @@ public int lookupEntityGrantRecordsVersionInCurrentTxn( principalId); // ensure principal id is matching - callCtx - .getDiagServices() + getDiagnostics() .check( principalId == principalSecrets.getPrincipalId(), "principal_id_mismatch", @@ -502,8 +501,7 @@ public void deletePrincipalSecretsInCurrentTxn( PolarisPrincipalSecrets principalSecrets = this.store.getSlicePrincipalSecrets().read(clientId); // should be found - callCtx - .getDiagServices() + getDiagnostics() .checkNotNull( principalSecrets, "cannot_find_secrets", @@ -512,8 +510,7 @@ public void deletePrincipalSecretsInCurrentTxn( principalId); // ensure principal id is matching - callCtx - .getDiagServices() + getDiagnostics() .check( principalId == principalSecrets.getPrincipalId(), "principal_id_mismatch", @@ -543,7 +540,7 @@ PolarisStorageIntegration createStorageIntegrationInCurrentTxn( PolarisStorageIntegration loadPolarisStorageIntegrationInCurrentTxn( @Nonnull PolarisCallContext callCtx, @Nonnull PolarisBaseEntity entity) { PolarisStorageConfigurationInfo storageConfig = - BaseMetaStoreManager.extractStorageConfiguration(callCtx.getDiagServices(), entity); + BaseMetaStoreManager.extractStorageConfiguration(getDiagnostics(), entity); return storageIntegrationProvider.getStorageIntegrationForConfig(storageConfig); } diff --git a/polaris-core/src/test/java/org/apache/polaris/core/persistence/PolarisTreeMapAtomicOperationMetaStoreManagerTest.java b/polaris-core/src/test/java/org/apache/polaris/core/persistence/PolarisTreeMapAtomicOperationMetaStoreManagerTest.java index ee103ab103..0b1035668f 100644 --- a/polaris-core/src/test/java/org/apache/polaris/core/persistence/PolarisTreeMapAtomicOperationMetaStoreManagerTest.java +++ b/polaris-core/src/test/java/org/apache/polaris/core/persistence/PolarisTreeMapAtomicOperationMetaStoreManagerTest.java @@ -33,12 +33,11 @@ public class PolarisTreeMapAtomicOperationMetaStoreManagerTest public PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { PolarisDiagnostics diagServices = new PolarisDefaultDiagServiceImpl(); TreeMapMetaStore store = new TreeMapMetaStore(diagServices); + TreeMapTransactionalPersistenceImpl metaStore = + new TreeMapTransactionalPersistenceImpl( + diagServices, store, Mockito.mock(), RANDOM_SECRETS); AtomicOperationMetaStoreManager metaStoreManager = new AtomicOperationMetaStoreManager(clock); - PolarisCallContext callCtx = - new PolarisCallContext( - () -> "testRealm", - new TreeMapTransactionalPersistenceImpl(store, Mockito.mock(), RANDOM_SECRETS), - diagServices); + PolarisCallContext callCtx = new PolarisCallContext(() -> "testRealm", metaStore, diagServices); return new PolarisTestMetaStoreManager(metaStoreManager, callCtx); } } diff --git a/polaris-core/src/test/java/org/apache/polaris/core/persistence/PolarisTreeMapMetaStoreManagerTest.java b/polaris-core/src/test/java/org/apache/polaris/core/persistence/PolarisTreeMapMetaStoreManagerTest.java index d1d3b8de02..a07f7be994 100644 --- a/polaris-core/src/test/java/org/apache/polaris/core/persistence/PolarisTreeMapMetaStoreManagerTest.java +++ b/polaris-core/src/test/java/org/apache/polaris/core/persistence/PolarisTreeMapMetaStoreManagerTest.java @@ -33,13 +33,12 @@ public class PolarisTreeMapMetaStoreManagerTest extends BasePolarisMetaStoreMana public PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { PolarisDiagnostics diagServices = new PolarisDefaultDiagServiceImpl(); TreeMapMetaStore store = new TreeMapMetaStore(diagServices); + TreeMapTransactionalPersistenceImpl metaStore = + new TreeMapTransactionalPersistenceImpl( + diagServices, store, Mockito.mock(), RANDOM_SECRETS); TransactionalMetaStoreManagerImpl metaStoreManager = new TransactionalMetaStoreManagerImpl(clock, diagServices); - PolarisCallContext callCtx = - new PolarisCallContext( - () -> "testRealm", - new TreeMapTransactionalPersistenceImpl(store, Mockito.mock(), RANDOM_SECRETS), - diagServices); + PolarisCallContext callCtx = new PolarisCallContext(() -> "testRealm", metaStore, diagServices); return new PolarisTestMetaStoreManager(metaStoreManager, callCtx); } } diff --git a/polaris-core/src/test/java/org/apache/polaris/core/persistence/ResolverTest.java b/polaris-core/src/test/java/org/apache/polaris/core/persistence/ResolverTest.java index 37e66499ba..e0add4fea1 100644 --- a/polaris-core/src/test/java/org/apache/polaris/core/persistence/ResolverTest.java +++ b/polaris-core/src/test/java/org/apache/polaris/core/persistence/ResolverTest.java @@ -41,7 +41,8 @@ protected PolarisCallContext callCtx() { if (callCtx == null) { TreeMapMetaStore store = new TreeMapMetaStore(diagServices); TreeMapTransactionalPersistenceImpl metaStore = - new TreeMapTransactionalPersistenceImpl(store, Mockito.mock(), RANDOM_SECRETS); + new TreeMapTransactionalPersistenceImpl( + diagServices, store, Mockito.mock(), RANDOM_SECRETS); callCtx = new PolarisCallContext(() -> "testRealm", metaStore, diagServices); } return callCtx; diff --git a/polaris-core/src/test/java/org/apache/polaris/core/persistence/cache/InMemoryEntityCacheTest.java b/polaris-core/src/test/java/org/apache/polaris/core/persistence/cache/InMemoryEntityCacheTest.java index 628a4b2912..fa8437fa0b 100644 --- a/polaris-core/src/test/java/org/apache/polaris/core/persistence/cache/InMemoryEntityCacheTest.java +++ b/polaris-core/src/test/java/org/apache/polaris/core/persistence/cache/InMemoryEntityCacheTest.java @@ -79,7 +79,8 @@ public InMemoryEntityCacheTest() { diagServices = new PolarisDefaultDiagServiceImpl(); TreeMapMetaStore store = new TreeMapMetaStore(diagServices); TransactionalPersistence metaStore = - new TreeMapTransactionalPersistenceImpl(store, Mockito.mock(), RANDOM_SECRETS); + new TreeMapTransactionalPersistenceImpl( + diagServices, store, Mockito.mock(), RANDOM_SECRETS); metaStoreManager = new TransactionalMetaStoreManagerImpl(Clock.systemUTC(), diagServices); callCtx = new PolarisCallContext(() -> "testRealm", metaStore, diagServices); 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 07b233228b..a8e97133bb 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 @@ -63,7 +63,8 @@ public StorageCredentialCacheTest() { TreeMapMetaStore store = new TreeMapMetaStore(diagServices); // to interact with the metastore TransactionalPersistence metaStore = - new TreeMapTransactionalPersistenceImpl(store, Mockito.mock(), RANDOM_SECRETS); + new TreeMapTransactionalPersistenceImpl( + diagServices, store, Mockito.mock(), RANDOM_SECRETS); callCtx = new PolarisCallContext(() -> "testRealm", metaStore, diagServices); storageCredentialCacheConfig = () -> 10_000; metaStoreManager = Mockito.mock(PolarisMetaStoreManager.class); diff --git a/runtime/service/src/main/java/org/apache/polaris/service/persistence/InMemoryPolarisMetaStoreManagerFactory.java b/runtime/service/src/main/java/org/apache/polaris/service/persistence/InMemoryPolarisMetaStoreManagerFactory.java index fb846aef52..3e8b6e538b 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/persistence/InMemoryPolarisMetaStoreManagerFactory.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/persistence/InMemoryPolarisMetaStoreManagerFactory.java @@ -73,7 +73,7 @@ protected TransactionalPersistence createMetaStoreSession( @Nullable RootCredentialsSet rootCredentialsSet, @Nonnull PolarisDiagnostics diagnostics) { return new TreeMapTransactionalPersistenceImpl( - store, storageIntegration, secretsGenerator(realmContext, rootCredentialsSet)); + diagnostics, store, storageIntegration, secretsGenerator(realmContext, rootCredentialsSet)); } @Override