From be96b8b49662ce00fb07dc7af0a485d6914276b6 Mon Sep 17 00:00:00 2001 From: Yun Zou Date: Mon, 2 Jun 2025 22:17:54 -0700 Subject: [PATCH 1/6] update load --- ...olarisEclipseLinkMetaStoreManagerTest.java | 4 +- ...anagerWithJdbcBasePersistenceImplTest.java | 3 +- .../config/PolarisConfigurationStore.java | 43 ------------------- .../AtomicOperationMetaStoreManager.java | 8 +++- .../persistence/PolarisMetaStoreManager.java | 6 ++- .../TransactionWorkspaceMetaStoreManager.java | 6 ++- .../TransactionalMetaStoreManagerImpl.java | 12 ++++-- ...apAtomicOperationMetaStoreManagerTest.java | 5 ++- .../PolarisTreeMapMetaStoreManagerTest.java | 5 ++- .../core/persistence/ResolverTest.java | 4 +- .../cache/InMemoryEntityCacheTest.java | 5 ++- .../PolarisConfigurationStoreTest.java | 12 ++---- .../BasePolarisMetaStoreManagerTest.java | 29 ++++++++++--- .../PolarisTestMetaStoreManager.java | 16 ++++++- .../quarkus/catalog/IcebergCatalogTest.java | 2 +- .../config/DefaultConfigurationStoreTest.java | 39 +++++------------ .../task/TableCleanupTaskHandlerTest.java | 24 ++++++++--- .../config/DefaultConfigurationStore.java | 15 ------- .../service/catalog/io/FileIOFactoryTest.java | 6 ++- 19 files changed, 121 insertions(+), 123 deletions(-) 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 55607981e9..37eb83f41e 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 @@ -83,6 +83,7 @@ static void prepareConfFiles(@TempDir Path archiveDir) throws IOException { @Override protected PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { + RealmContext realmContext = () -> "realm"; PolarisDiagnostics diagServices = new PolarisDefaultDiagServiceImpl(); PolarisEclipseLinkStore store = new PolarisEclipseLinkStore(diagServices); RealmContext realmContext = () -> "realm"; @@ -96,7 +97,8 @@ protected PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { session, diagServices, new PolarisConfigurationStore() {}, - timeSource.withZone(ZoneId.systemDefault()))); + timeSource.withZone(ZoneId.systemDefault())), + realmContext); } @ParameterizedTest diff --git a/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/AtomicMetastoreManagerWithJdbcBasePersistenceImplTest.java b/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/AtomicMetastoreManagerWithJdbcBasePersistenceImplTest.java index 1df5d6d5f0..1e4f7db7c9 100644 --- a/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/AtomicMetastoreManagerWithJdbcBasePersistenceImplTest.java +++ b/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/AtomicMetastoreManagerWithJdbcBasePersistenceImplTest.java @@ -71,7 +71,8 @@ protected PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { basePersistence, diagServices, new PolarisConfigurationStore() {}, - timeSource.withZone(ZoneId.systemDefault()))); + timeSource.withZone(ZoneId.systemDefault())), + realmContext); } private static class H2JdbcConfiguration implements RelationalJdbcConfiguration { 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 7b44e9396a..d7661041d2 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 @@ -24,7 +24,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import org.apache.polaris.core.PolarisCallContext; import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.CatalogEntity; import org.slf4j.Logger; @@ -37,48 +36,6 @@ public interface PolarisConfigurationStore { Logger LOGGER = LoggerFactory.getLogger(PolarisConfigurationStore.class); - /** - * Retrieve the current value for a configuration key. May be null if not set. - * - *

This function will be deprecated, it can not be called outside of active request scope, such - * as background tasks (TaskExecutor). Please use the function getConfiguration(RealmContext - * realmContext, String configName) to get the configuration value in a more robust way. TODO: - * Remove this function and replace the usage with the function takes realm. Github issue - * https://github.com/apache/polaris/issues/1775 - * - * @param ctx the current call context - * @param configName the name of the configuration key to check - * @return the current value set for the configuration key or null if not set - * @param the type of the configuration value - */ - @Deprecated - default @Nullable T getConfiguration(PolarisCallContext ctx, String configName) { - return null; - } - - /** - * Retrieve the current value for a configuration key. If not set, return the non-null default - * value. - * - *

This function will be deprecated, it can not be called outside of active request scope, such - * as background tasks (TaskExecutor). Please use the function getConfiguration(RealmContext - * realmContext, String configName, T defaultValue) to get the configuration value in a more - * robust way. TODO: Remove this function and replace the usage with the function takes realm. - * Github issue https://github.com/apache/polaris/issues/1775 - * - * @param ctx the current call context - * @param configName the name of the configuration key to check - * @param defaultValue the default value if the configuration key has no value - * @return the current value or the supplied default value - */ - @Deprecated - default @Nonnull T getConfiguration( - PolarisCallContext ctx, String configName, @Nonnull T defaultValue) { - Preconditions.checkNotNull(defaultValue, "Cannot pass null as a default value"); - T configValue = getConfiguration(ctx, configName); - return configValue != null ? configValue : defaultValue; - } - /** * Retrieve the current value for a configuration key for a given realm. May be null if not set. * diff --git a/polaris-core/src/main/java/org/apache/polaris/core/persistence/AtomicOperationMetaStoreManager.java b/polaris-core/src/main/java/org/apache/polaris/core/persistence/AtomicOperationMetaStoreManager.java index 92ccc6eed5..6e6ea6ff4d 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/persistence/AtomicOperationMetaStoreManager.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/persistence/AtomicOperationMetaStoreManager.java @@ -32,6 +32,7 @@ import java.util.function.Function; import java.util.stream.Collectors; import org.apache.polaris.core.PolarisCallContext; +import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.AsyncTaskType; import org.apache.polaris.core.entity.EntityNameLookupRecord; import org.apache.polaris.core.entity.PolarisBaseEntity; @@ -1500,7 +1501,10 @@ private void revokeGrantRecord( @Override public @Nonnull EntitiesResult loadTasks( - @Nonnull PolarisCallContext callCtx, String executorId, PageToken pageToken) { + @Nonnull PolarisCallContext callCtx, + @Nonnull RealmContext realmCtx, + String executorId, + PageToken pageToken) { BasePersistence ms = callCtx.getMetaStore(); // find all available tasks @@ -1517,7 +1521,7 @@ private void revokeGrantRecord( callCtx .getConfigurationStore() .getConfiguration( - callCtx, + realmCtx, PolarisTaskConstants.TASK_TIMEOUT_MILLIS_CONFIG, PolarisTaskConstants.TASK_TIMEOUT_MILLIS); return taskState == null diff --git a/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManager.java b/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManager.java index 2a20ad5c1e..72ded325a0 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManager.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManager.java @@ -25,6 +25,7 @@ import org.apache.polaris.core.PolarisCallContext; import org.apache.polaris.core.auth.PolarisGrantManager; import org.apache.polaris.core.auth.PolarisSecretsManager; +import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.PolarisBaseEntity; import org.apache.polaris.core.entity.PolarisEntity; import org.apache.polaris.core.entity.PolarisEntityCore; @@ -307,7 +308,10 @@ EntityResult loadEntity( */ @Nonnull EntitiesResult loadTasks( - @Nonnull PolarisCallContext callCtx, String executorId, PageToken pageToken); + @Nonnull PolarisCallContext callCtx, + @Nonnull RealmContext realmCtx, + String executorId, + PageToken pageToken); /** * Load change tracking information for a set of entities in one single shot and return for each diff --git a/polaris-core/src/main/java/org/apache/polaris/core/persistence/TransactionWorkspaceMetaStoreManager.java b/polaris-core/src/main/java/org/apache/polaris/core/persistence/TransactionWorkspaceMetaStoreManager.java index b7ba47e83e..4de50755c8 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/persistence/TransactionWorkspaceMetaStoreManager.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/persistence/TransactionWorkspaceMetaStoreManager.java @@ -26,6 +26,7 @@ import java.util.Map; import java.util.Set; import org.apache.polaris.core.PolarisCallContext; +import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.PolarisBaseEntity; import org.apache.polaris.core.entity.PolarisEntity; import org.apache.polaris.core.entity.PolarisEntityCore; @@ -322,7 +323,10 @@ public EntityResult loadEntity( @Override public EntitiesResult loadTasks( - @Nonnull PolarisCallContext callCtx, String executorId, PageToken pageToken) { + @Nonnull PolarisCallContext callCtx, + @Nonnull RealmContext realmCtx, + String executorId, + PageToken pageToken) { callCtx.getDiagServices().fail("illegal_method_in_transaction_workspace", "loadTasks"); return null; } diff --git a/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TransactionalMetaStoreManagerImpl.java b/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TransactionalMetaStoreManagerImpl.java index 0224dec493..a6467e1754 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TransactionalMetaStoreManagerImpl.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TransactionalMetaStoreManagerImpl.java @@ -33,6 +33,7 @@ import java.util.function.Function; import java.util.stream.Collectors; import org.apache.polaris.core.PolarisCallContext; +import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.AsyncTaskType; import org.apache.polaris.core.entity.EntityNameLookupRecord; import org.apache.polaris.core.entity.PolarisBaseEntity; @@ -1938,6 +1939,7 @@ private PolarisEntityResolver resolveSecurableToRoleGrant( /** Refer to {@link #loadTasks(PolarisCallContext, String, PageToken)} */ private @Nonnull EntitiesResult loadTasks( @Nonnull PolarisCallContext callCtx, + @Nonnull RealmContext realmCtx, @Nonnull TransactionalPersistence ms, String executorId, PageToken pageToken) { @@ -1956,7 +1958,7 @@ private PolarisEntityResolver resolveSecurableToRoleGrant( callCtx .getConfigurationStore() .getConfiguration( - callCtx, + realmCtx, PolarisTaskConstants.TASK_TIMEOUT_MILLIS_CONFIG, PolarisTaskConstants.TASK_TIMEOUT_MILLIS); return taskState == null @@ -2003,9 +2005,13 @@ private PolarisEntityResolver resolveSecurableToRoleGrant( @Override public @Nonnull EntitiesResult loadTasks( - @Nonnull PolarisCallContext callCtx, String executorId, PageToken pageToken) { + @Nonnull PolarisCallContext callCtx, + @Nonnull RealmContext realmCtx, + String executorId, + PageToken pageToken) { TransactionalPersistence ms = ((TransactionalPersistence) callCtx.getMetaStore()); - return ms.runInTransaction(callCtx, () -> this.loadTasks(callCtx, ms, executorId, pageToken)); + return ms.runInTransaction( + callCtx, () -> this.loadTasks(callCtx, realmCtx, ms, executorId, pageToken)); } /** {@inheritDoc} */ 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 f89615cf10..dfb1c3a7d5 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 @@ -25,6 +25,7 @@ import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; import org.apache.polaris.core.PolarisDiagnostics; import org.apache.polaris.core.config.PolarisConfigurationStore; +import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.persistence.transactional.TreeMapMetaStore; import org.apache.polaris.core.persistence.transactional.TreeMapTransactionalPersistenceImpl; import org.mockito.Mockito; @@ -43,6 +44,8 @@ public PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { new PolarisConfigurationStore() {}, timeSource.withZone(ZoneId.systemDefault())); - return new PolarisTestMetaStoreManager(new AtomicOperationMetaStoreManager(), callCtx); + RealmContext realmCtx = () -> "testRealm"; + return new PolarisTestMetaStoreManager( + new AtomicOperationMetaStoreManager(), callCtx, realmCtx); } } 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 49a2bfcc00..454626a4b3 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 @@ -25,6 +25,7 @@ import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; import org.apache.polaris.core.PolarisDiagnostics; import org.apache.polaris.core.config.PolarisConfigurationStore; +import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.persistence.transactional.TransactionalMetaStoreManagerImpl; import org.apache.polaris.core.persistence.transactional.TreeMapMetaStore; import org.apache.polaris.core.persistence.transactional.TreeMapTransactionalPersistenceImpl; @@ -43,6 +44,8 @@ public PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { new PolarisConfigurationStore() {}, timeSource.withZone(ZoneId.systemDefault())); - return new PolarisTestMetaStoreManager(new TransactionalMetaStoreManagerImpl(), callCtx); + RealmContext realmCtx = () -> "testRealm"; + return new PolarisTestMetaStoreManager( + new TransactionalMetaStoreManagerImpl(), callCtx, realmCtx); } } 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 d72a199ae7..d5dcb282d3 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 @@ -22,6 +22,7 @@ import org.apache.polaris.core.PolarisCallContext; import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; +import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.persistence.transactional.TransactionalMetaStoreManagerImpl; import org.apache.polaris.core.persistence.transactional.TreeMapMetaStore; import org.apache.polaris.core.persistence.transactional.TreeMapTransactionalPersistenceImpl; @@ -57,7 +58,8 @@ protected PolarisMetaStoreManager metaStoreManager() { protected PolarisTestMetaStoreManager tm() { if (tm == null) { // bootstrap the mata store with our test schema - tm = new PolarisTestMetaStoreManager(metaStoreManager(), callCtx()); + RealmContext realmCtx = () -> "testRealm"; + tm = new PolarisTestMetaStoreManager(metaStoreManager(), callCtx(), realmCtx); } return tm; } 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 1d0564be9e..492172f8d9 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 @@ -26,6 +26,7 @@ import org.apache.polaris.core.PolarisCallContext; import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; import org.apache.polaris.core.PolarisDiagnostics; +import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.PolarisBaseEntity; import org.apache.polaris.core.entity.PolarisEntity; import org.apache.polaris.core.entity.PolarisEntitySubType; @@ -94,8 +95,10 @@ public InMemoryEntityCacheTest() { callCtx = new PolarisCallContext(() -> "testRealm", metaStore, diagServices); metaStoreManager = new TransactionalMetaStoreManagerImpl(); + RealmContext realmContext = () -> "testRealm"; + // bootstrap the mata store with our test schema - tm = new PolarisTestMetaStoreManager(metaStoreManager, callCtx); + tm = new PolarisTestMetaStoreManager(metaStoreManager, callCtx, realmContext); tm.testCreateTestCatalog(); } 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 f95b13f9a8..963bb64193 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 @@ -175,13 +175,9 @@ public void testEntityOverrides() { .addProperty("legacy-key4", "entity-legacy4") .build(); - Assertions.assertEquals( - "test-default1", store.getConfiguration(testRealmContext, entity, cfg.apply(1))); - Assertions.assertEquals( - "config-value2", store.getConfiguration(testRealmContext, entity, cfg.apply(2))); - Assertions.assertEquals( - "entity-new3", store.getConfiguration(testRealmContext, entity, cfg.apply(3))); - Assertions.assertEquals( - "entity-legacy4", store.getConfiguration(testRealmContext, entity, cfg.apply(4))); + Assertions.assertEquals("test-default1", store.getConfiguration(null, entity, cfg.apply(1))); + Assertions.assertEquals("config-value2", store.getConfiguration(null, entity, cfg.apply(2))); + Assertions.assertEquals("entity-new3", store.getConfiguration(null, entity, cfg.apply(3))); + Assertions.assertEquals("entity-legacy4", store.getConfiguration(null, entity, cfg.apply(4))); } } diff --git a/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/BasePolarisMetaStoreManagerTest.java b/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/BasePolarisMetaStoreManagerTest.java index cc1305c9fb..418cd8995a 100644 --- a/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/BasePolarisMetaStoreManagerTest.java +++ b/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/BasePolarisMetaStoreManagerTest.java @@ -36,6 +36,7 @@ import java.util.stream.Stream; import org.apache.polaris.core.PolarisCallContext; import org.apache.polaris.core.context.CallContext; +import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.AsyncTaskType; import org.apache.polaris.core.entity.EntityNameLookupRecord; import org.apache.polaris.core.entity.PolarisBaseEntity; @@ -291,8 +292,11 @@ protected void testLoadTasks() { String executorId = "testExecutor_abc"; PolarisMetaStoreManager metaStoreManager = polarisTestMetaStoreManager.polarisMetaStoreManager; PolarisCallContext callCtx = polarisTestMetaStoreManager.polarisCallContext; + RealmContext realmCtx = polarisTestMetaStoreManager.realmContext; List taskList = - metaStoreManager.loadTasks(callCtx, executorId, PageToken.fromLimit(5)).getEntities(); + metaStoreManager + .loadTasks(callCtx, realmCtx, executorId, PageToken.fromLimit(5)) + .getEntities(); Assertions.assertThat(taskList) .isNotNull() .isNotEmpty() @@ -312,7 +316,9 @@ protected void testLoadTasks() { // grab a second round of tasks. Assert that none of the original 5 are in the list List newTaskList = - metaStoreManager.loadTasks(callCtx, executorId, PageToken.fromLimit(5)).getEntities(); + metaStoreManager + .loadTasks(callCtx, realmCtx, executorId, PageToken.fromLimit(5)) + .getEntities(); Assertions.assertThat(newTaskList) .isNotNull() .isNotEmpty() @@ -326,7 +332,9 @@ protected void testLoadTasks() { // only 10 tasks are unassigned. Requesting 20, we should only receive those 10 List lastTen = - metaStoreManager.loadTasks(callCtx, executorId, PageToken.fromLimit(20)).getEntities(); + metaStoreManager + .loadTasks(callCtx, realmCtx, executorId, PageToken.fromLimit(20)) + .getEntities(); Assertions.assertThat(lastTen) .isNotNull() @@ -340,7 +348,9 @@ protected void testLoadTasks() { .collect(Collectors.toSet()); List emtpyList = - metaStoreManager.loadTasks(callCtx, executorId, PageToken.fromLimit(20)).getEntities(); + metaStoreManager + .loadTasks(callCtx, realmCtx, executorId, PageToken.fromLimit(20)) + .getEntities(); Assertions.assertThat(emtpyList).isNotNull().isEmpty(); @@ -348,7 +358,9 @@ protected void testLoadTasks() { // all the tasks are unassigned. Fetch them all List allTasks = - metaStoreManager.loadTasks(callCtx, executorId, PageToken.fromLimit(20)).getEntities(); + metaStoreManager + .loadTasks(callCtx, realmCtx, executorId, PageToken.fromLimit(20)) + .getEntities(); Assertions.assertThat(allTasks) .isNotNull() @@ -363,7 +375,9 @@ protected void testLoadTasks() { timeSource.add(Duration.ofMinutes(10)); List finalList = - metaStoreManager.loadTasks(callCtx, executorId, PageToken.fromLimit(20)).getEntities(); + metaStoreManager + .loadTasks(callCtx, realmCtx, executorId, PageToken.fromLimit(20)) + .getEntities(); Assertions.assertThat(finalList).isNotNull().isEmpty(); } @@ -376,6 +390,7 @@ protected void testLoadTasksInParallel() throws Exception { } PolarisMetaStoreManager metaStoreManager = polarisTestMetaStoreManager.polarisMetaStoreManager; PolarisCallContext callCtx = polarisTestMetaStoreManager.polarisCallContext; + RealmContext realmCtx = polarisTestMetaStoreManager.realmContext; List>> futureList = new ArrayList<>(); ExecutorService executorService = Executors.newCachedThreadPool(); try { @@ -393,7 +408,7 @@ protected void testLoadTasksInParallel() throws Exception { try { taskList = metaStoreManager - .loadTasks(callCtx, executorId, PageToken.fromLimit(5)) + .loadTasks(callCtx, realmCtx, executorId, PageToken.fromLimit(5)) .getEntities(); taskList.stream().map(PolarisBaseEntity::getName).forEach(taskNames::add); } catch (RetryOnConcurrencyException e) { diff --git a/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/PolarisTestMetaStoreManager.java b/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/PolarisTestMetaStoreManager.java index 7d90ab23da..c90c382f0f 100644 --- a/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/PolarisTestMetaStoreManager.java +++ b/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/PolarisTestMetaStoreManager.java @@ -29,6 +29,7 @@ import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import org.apache.polaris.core.PolarisCallContext; +import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.EntityNameLookupRecord; import org.apache.polaris.core.entity.PolarisBaseEntity; import org.apache.polaris.core.entity.PolarisChangeTrackingVersions; @@ -64,6 +65,8 @@ public class PolarisTestMetaStoreManager { // call context final PolarisCallContext polarisCallContext; + final RealmContext realmContext; + // call metastore manager final PolarisMetaStoreManager polarisMetaStoreManager; @@ -78,8 +81,15 @@ public class PolarisTestMetaStoreManager { // initialize the test public PolarisTestMetaStoreManager( - PolarisMetaStoreManager polarisMetaStoreManager, PolarisCallContext polarisCallContext) { - this(polarisMetaStoreManager, polarisCallContext, System.currentTimeMillis(), true); + PolarisMetaStoreManager polarisMetaStoreManager, + PolarisCallContext polarisCallContext, + RealmContext realmContext) { + this( + polarisMetaStoreManager, + polarisCallContext, + realmContext, + System.currentTimeMillis(), + true); // bootstrap the Polaris service polarisMetaStoreManager.purge(polarisCallContext); @@ -89,10 +99,12 @@ public PolarisTestMetaStoreManager( public PolarisTestMetaStoreManager( PolarisMetaStoreManager polarisMetaStoreManager, PolarisCallContext polarisCallContext, + RealmContext realmContext, long testStartTime, boolean supportsChangeTracking) { this.testStartTime = testStartTime; this.polarisCallContext = polarisCallContext; + this.realmContext = realmContext; this.polarisMetaStoreManager = polarisMetaStoreManager; this.supportsChangeTracking = supportsChangeTracking; this.doRetry = false; diff --git a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogTest.java b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogTest.java index 2b4c4205c9..16b41f4939 100644 --- a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogTest.java +++ b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogTest.java @@ -1533,7 +1533,7 @@ public void testDropTableWithPurge() { .rejects(TABLE); List tasks = metaStoreManager - .loadTasks(polarisContext, "testExecutor", PageToken.fromLimit(1)) + .loadTasks(polarisContext, () -> realmName, "testExecutor", PageToken.fromLimit(1)) .getEntities(); Assertions.assertThat(tasks).hasSize(1); TaskEntity taskEntity = TaskEntity.of(tasks.get(0)); diff --git a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/config/DefaultConfigurationStoreTest.java b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/config/DefaultConfigurationStoreTest.java index 5ee7f65f9c..54c96f814f 100644 --- a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/config/DefaultConfigurationStoreTest.java +++ b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/config/DefaultConfigurationStoreTest.java @@ -20,7 +20,6 @@ import static org.assertj.core.api.Assertions.assertThat; -import io.quarkus.test.junit.QuarkusMock; import io.quarkus.test.junit.QuarkusTest; import io.quarkus.test.junit.QuarkusTestProfile; import io.quarkus.test.junit.TestProfile; @@ -98,51 +97,40 @@ public void before(TestInfo testInfo) { Clock.systemDefaultZone()); } - @Test - public void testGetConfigurationWithNoRealmContext() { - Assertions.assertThatThrownBy( - () -> configurationStore.getConfiguration(polarisContext, "missingKeyWithoutDefault")) - .isInstanceOf(IllegalStateException.class); - } - @Test public void testGetConfiguration() { - QuarkusMock.installMockForType(realmContext, RealmContext.class); - Object value = configurationStore.getConfiguration(polarisContext, "missingKeyWithoutDefault"); + Object value = configurationStore.getConfiguration(realmContext, "missingKeyWithoutDefault"); assertThat(value).isNull(); Object defaultValue = - configurationStore.getConfiguration( - polarisContext, "missingKeyWithDefault", "defaultValue"); + configurationStore.getConfiguration(realmContext, "missingKeyWithDefault", "defaultValue"); assertThat(defaultValue).isEqualTo("defaultValue"); // the falseByDefaultKey is set to false for all realms in Profile.getConfigOverrides - assertThat((Boolean) configurationStore.getConfiguration(polarisContext, falseByDefaultKey)) + assertThat((Boolean) configurationStore.getConfiguration(realmContext, falseByDefaultKey)) .isFalse(); // the trueByDefaultKey is set to true for all realms in Profile.getConfigOverrides - assertThat((Boolean) configurationStore.getConfiguration(polarisContext, trueByDefaultKey)) + assertThat((Boolean) configurationStore.getConfiguration(realmContext, trueByDefaultKey)) .isTrue(); } @Test public void testGetRealmConfiguration() { // check the realmOne configuration - QuarkusMock.installMockForType(realmOneContext, RealmContext.class); // the falseByDefaultKey is set to `false` for all realms, but overwrite with value `true` for // realmOne. - assertThat((Boolean) configurationStore.getConfiguration(polarisContext, falseByDefaultKey)) + assertThat((Boolean) configurationStore.getConfiguration(realmOneContext, falseByDefaultKey)) .isTrue(); // the trueByDefaultKey is set to `false` for all realms, no overwrite for realmOne - assertThat((Boolean) configurationStore.getConfiguration(polarisContext, trueByDefaultKey)) + assertThat((Boolean) configurationStore.getConfiguration(realmOneContext, trueByDefaultKey)) .isTrue(); // check the realmTwo configuration - QuarkusMock.installMockForType(realmTwoContext, RealmContext.class); // the falseByDefaultKey is set to `false` for all realms, no overwrite for realmTwo - assertThat((Boolean) configurationStore.getConfiguration(polarisContext, falseByDefaultKey)) + assertThat((Boolean) configurationStore.getConfiguration(realmTwoContext, falseByDefaultKey)) .isFalse(); // the trueByDefaultKey is set to `false` for all realms, and overwrite with value `false` for // realmTwo - assertThat((Boolean) configurationStore.getConfiguration(polarisContext, trueByDefaultKey)) + assertThat((Boolean) configurationStore.getConfiguration(realmTwoContext, trueByDefaultKey)) .isFalse(); } @@ -167,20 +155,17 @@ void testGetConfigurationWithRealm() { @Test public void testInjectedConfigurationStore() { - QuarkusMock.installMockForType(realmContext, RealmContext.class); // the default value for trueByDefaultKey is `true` boolean featureDefaultValue = - configurationStore.getConfiguration(polarisContext, trueByDefaultKey); + configurationStore.getConfiguration(realmContext, trueByDefaultKey); assertThat(featureDefaultValue).isTrue(); - QuarkusMock.installMockForType(realmTwoContext, RealmContext.class); // the value for falseByDefaultKey is `false`, and no realm override for realmTwo - boolean realmTwoValue = configurationStore.getConfiguration(polarisContext, falseByDefaultKey); + boolean realmTwoValue = configurationStore.getConfiguration(realmTwoContext, falseByDefaultKey); assertThat(realmTwoValue).isFalse(); // Now, realmOne override falseByDefaultKey to `True` - QuarkusMock.installMockForType(realmOneContext, RealmContext.class); - boolean realmOneValue = configurationStore.getConfiguration(polarisContext, falseByDefaultKey); + boolean realmOneValue = configurationStore.getConfiguration(realmOneContext, falseByDefaultKey); assertThat(realmOneValue).isTrue(); assertThat(configurationStore).isInstanceOf(DefaultConfigurationStore.class); @@ -188,7 +173,6 @@ public void testInjectedConfigurationStore() { @Test public void testInjectedFeaturesConfiguration() { - QuarkusMock.installMockForType(realmContext, RealmContext.class); assertThat(featuresConfiguration).isInstanceOf(QuarkusResolvedFeaturesConfiguration.class); assertThat(featuresConfiguration.defaults()) @@ -209,7 +193,6 @@ public void testInjectedFeaturesConfiguration() { @Test public void testRegisterAndUseFeatureConfigurations() { - QuarkusMock.installMockForType(realmContext, RealmContext.class); String prefix = "testRegisterAndUseFeatureConfigurations"; FeatureConfiguration safeConfig = diff --git a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/task/TableCleanupTaskHandlerTest.java b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/task/TableCleanupTaskHandlerTest.java index 5c968f7e88..2789b8ea9b 100644 --- a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/task/TableCleanupTaskHandlerTest.java +++ b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/task/TableCleanupTaskHandlerTest.java @@ -157,7 +157,11 @@ public void testTableCleanup() throws IOException { assertThat( metaStoreManagerFactory .getOrCreateMetaStoreManager(realmContext) - .loadTasks(callContext.getPolarisCallContext(), "test", PageToken.fromLimit(2)) + .loadTasks( + callContext.getPolarisCallContext(), + realmContext, + "test", + PageToken.fromLimit(2)) .getEntities()) .hasSize(2) .satisfiesExactlyInAnyOrder( @@ -237,7 +241,11 @@ public void close() { assertThat( metaStoreManagerFactory .getOrCreateMetaStoreManager(realmContext) - .loadTasks(callContext.getPolarisCallContext(), "test", PageToken.fromLimit(5)) + .loadTasks( + callContext.getPolarisCallContext(), + realmContext, + "test", + PageToken.fromLimit(5)) .getEntities()) .hasSize(2); } @@ -298,7 +306,11 @@ public void close() { assertThat( metaStoreManagerFactory .getOrCreateMetaStoreManager(realmContext) - .loadTasks(callContext.getPolarisCallContext(), "test", PageToken.fromLimit(5)) + .loadTasks( + callContext.getPolarisCallContext(), + realmContext, + "test", + PageToken.fromLimit(5)) .getEntities()) .hasSize(4) .satisfiesExactlyInAnyOrder( @@ -418,7 +430,8 @@ public void testTableCleanupMultipleSnapshots() throws IOException { List entities = metaStoreManagerFactory .getOrCreateMetaStoreManager(realmContext) - .loadTasks(callContext.getPolarisCallContext(), "test", PageToken.fromLimit(5)) + .loadTasks( + callContext.getPolarisCallContext(), realmContext, "test", PageToken.fromLimit(5)) .getEntities(); List manifestCleanupTasks = @@ -592,7 +605,8 @@ public void testTableCleanupMultipleMetadata() throws IOException { List entities = metaStoreManagerFactory .getOrCreateMetaStoreManager(callContext.getRealmContext()) - .loadTasks(callContext.getPolarisCallContext(), "test", PageToken.fromLimit(6)) + .loadTasks( + callContext.getPolarisCallContext(), realmContext, "test", PageToken.fromLimit(6)) .getEntities(); List manifestCleanupTasks = diff --git a/service/common/src/main/java/org/apache/polaris/service/config/DefaultConfigurationStore.java b/service/common/src/main/java/org/apache/polaris/service/config/DefaultConfigurationStore.java index 8928291e82..02d7a2f223 100644 --- a/service/common/src/main/java/org/apache/polaris/service/config/DefaultConfigurationStore.java +++ b/service/common/src/main/java/org/apache/polaris/service/config/DefaultConfigurationStore.java @@ -22,11 +22,9 @@ import jakarta.annotation.Nonnull; import jakarta.annotation.Nullable; import jakarta.enterprise.context.ApplicationScoped; -import jakarta.enterprise.inject.Instance; import jakarta.inject.Inject; import java.util.Map; import java.util.Optional; -import org.apache.polaris.core.PolarisCallContext; import org.apache.polaris.core.config.PolarisConfigurationStore; import org.apache.polaris.core.context.RealmContext; import org.slf4j.Logger; @@ -38,7 +36,6 @@ public class DefaultConfigurationStore implements PolarisConfigurationStore { private final Map defaults; private final Map> realmOverrides; - @Inject private Instance realmContextInstance; // FIXME the whole PolarisConfigurationStore + PolarisConfiguration needs to be refactored // to become a proper Quarkus configuration object @@ -61,18 +58,6 @@ public DefaultConfigurationStore( return confgValue; } - @Override - public @Nullable T getConfiguration(@Nonnull PolarisCallContext ctx, String configName) { - if (realmContextInstance.isResolvable()) { - RealmContext realmContext = realmContextInstance.get(); - return getConfiguration(realmContext, configName); - } else { - LOGGER.debug( - "No RealmContext is injected when lookup value for configuration {} ", configName); - return getDefaultConfiguration(configName); - } - } - private @Nullable T getDefaultConfiguration(String configName) { @SuppressWarnings("unchecked") T confgValue = (T) defaults.get(configName); diff --git a/service/common/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java b/service/common/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java index 0303ecb57d..9f5d27f9f9 100644 --- a/service/common/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java +++ b/service/common/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java @@ -189,7 +189,11 @@ public void testLoadFileIOForCleanupTask() { testServices .metaStoreManagerFactory() .getOrCreateMetaStoreManager(realmContext) - .loadTasks(callContext.getPolarisCallContext(), "testExecutor", PageToken.fromLimit(1)) + .loadTasks( + callContext.getPolarisCallContext(), + realmContext, + "testExecutor", + PageToken.fromLimit(1)) .getEntities(); Assertions.assertThat(tasks).hasSize(1); TaskEntity taskEntity = TaskEntity.of(tasks.get(0)); From 4f1dfb4fe214b25ed59f2ba09ac35d1a560259e3 Mon Sep 17 00:00:00 2001 From: Yun Zou Date: Tue, 3 Jun 2025 11:42:17 -0700 Subject: [PATCH 2/6] address feedback --- .../core/config/PolarisConfigurationStore.java | 6 +++--- .../storage/InMemoryStorageIntegrationTest.java | 3 ++- .../storage/PolarisConfigurationStoreTest.java | 5 +++-- .../config/DefaultConfigurationStoreTest.java | 16 +++------------- 4 files changed, 11 insertions(+), 19 deletions(-) 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 d7661041d2..4923d97eea 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 @@ -59,7 +59,7 @@ public interface PolarisConfigurationStore { * @param the type of the configuration value */ default @Nonnull T getConfiguration( - RealmContext realmContext, String configName, @Nonnull T defaultValue) { + @Nonnull RealmContext realmContext, String configName, @Nonnull T defaultValue) { Preconditions.checkNotNull(defaultValue, "Cannot pass null as a default value"); T configValue = getConfiguration(realmContext, configName); return configValue != null ? configValue : defaultValue; @@ -98,7 +98,7 @@ public interface PolarisConfigurationStore { * @param the type of the configuration value */ default @Nonnull T getConfiguration( - RealmContext realmContext, PolarisConfiguration config) { + @Nonnull RealmContext realmContext, PolarisConfiguration config) { T result = getConfiguration(realmContext, config.key, config.defaultValue); return tryCast(config, result); } @@ -114,7 +114,7 @@ public interface PolarisConfigurationStore { * @param the type of the configuration value */ default @Nonnull T getConfiguration( - RealmContext realmContext, + @Nonnull RealmContext realmContext, @Nonnull CatalogEntity catalogEntity, PolarisConfiguration config) { if (config.hasCatalogConfig() || config.hasCatalogConfigUnsafe()) { diff --git a/polaris-core/src/test/java/org/apache/polaris/core/storage/InMemoryStorageIntegrationTest.java b/polaris-core/src/test/java/org/apache/polaris/core/storage/InMemoryStorageIntegrationTest.java index cd23177ad4..a4e58860de 100644 --- a/polaris-core/src/test/java/org/apache/polaris/core/storage/InMemoryStorageIntegrationTest.java +++ b/polaris-core/src/test/java/org/apache/polaris/core/storage/InMemoryStorageIntegrationTest.java @@ -102,7 +102,8 @@ public void testValidateAccessToLocationsWithWildcard() { new PolarisConfigurationStore() { @SuppressWarnings("unchecked") @Override - public @Nullable T getConfiguration(RealmContext ctx, String configName) { + public @Nullable T getConfiguration( + @Nonnull RealmContext ctx, String configName) { return (T) config.get(configName); } }, 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 963bb64193..fa577864bf 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 @@ -18,6 +18,7 @@ */ package org.apache.polaris.service.storage; +import jakarta.annotation.Nonnull; import jakarta.annotation.Nullable; import java.util.List; import java.util.Map; @@ -53,7 +54,7 @@ public void testConfigsCanBeCastedFromString() { */ @SuppressWarnings("unchecked") @Override - public @Nullable T getConfiguration(RealmContext ctx, String configName) { + public @Nullable T getConfiguration(@Nonnull RealmContext ctx, String configName) { for (PolarisConfiguration c : configs) { if (c.key.equals(configName)) { return (T) String.valueOf(c.defaultValue); @@ -84,7 +85,7 @@ public void testInvalidCastThrowsException() { new PolarisConfigurationStore() { @SuppressWarnings("unchecked") @Override - public T getConfiguration(RealmContext ctx, String configName) { + public T getConfiguration(@Nonnull RealmContext ctx, String configName) { return (T) "abc123"; } }; diff --git a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/config/DefaultConfigurationStoreTest.java b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/config/DefaultConfigurationStoreTest.java index 54c96f814f..816ccc6b8b 100644 --- a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/config/DefaultConfigurationStoreTest.java +++ b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/config/DefaultConfigurationStoreTest.java @@ -72,12 +72,9 @@ public Map getConfigOverrides() { } } - private PolarisCallContext polarisContext; private RealmContext realmContext; - @Inject MetaStoreManagerFactory managerFactory; @Inject PolarisConfigurationStore configurationStore; - @Inject PolarisDiagnostics diagServices; @Inject FeaturesConfiguration featuresConfiguration; @BeforeEach @@ -88,13 +85,6 @@ public void before(TestInfo testInfo) { testInfo.getTestMethod().map(java.lang.reflect.Method::getName).orElse("test"), System.nanoTime()); realmContext = () -> realmName; - polarisContext = - new PolarisCallContext( - realmContext, - managerFactory.getOrCreateSessionSupplier(realmContext).get(), - diagServices, - configurationStore, - Clock.systemDefaultZone()); } @Test @@ -156,16 +146,16 @@ void testGetConfigurationWithRealm() { @Test public void testInjectedConfigurationStore() { // the default value for trueByDefaultKey is `true` - boolean featureDefaultValue = + Boolean featureDefaultValue = configurationStore.getConfiguration(realmContext, trueByDefaultKey); assertThat(featureDefaultValue).isTrue(); // the value for falseByDefaultKey is `false`, and no realm override for realmTwo - boolean realmTwoValue = configurationStore.getConfiguration(realmTwoContext, falseByDefaultKey); + Boolean realmTwoValue = configurationStore.getConfiguration(realmTwoContext, falseByDefaultKey); assertThat(realmTwoValue).isFalse(); // Now, realmOne override falseByDefaultKey to `True` - boolean realmOneValue = configurationStore.getConfiguration(realmOneContext, falseByDefaultKey); + Boolean realmOneValue = configurationStore.getConfiguration(realmOneContext, falseByDefaultKey); assertThat(realmOneValue).isTrue(); assertThat(configurationStore).isInstanceOf(DefaultConfigurationStore.class); From 1a9161c23da1d59ed239993465bb32f40920112e Mon Sep 17 00:00:00 2001 From: Yun Zou Date: Wed, 4 Jun 2025 00:20:59 -0700 Subject: [PATCH 3/6] use callContext instead of realmContext --- ...olarisEclipseLinkMetaStoreManagerTest.java | 9 +- ...anagerWithJdbcBasePersistenceImplTest.java | 9 +- .../AtomicOperationMetaStoreManager.java | 27 +- .../persistence/PolarisMetaStoreManager.java | 8 +- .../TransactionWorkspaceMetaStoreManager.java | 12 +- .../TransactionalMetaStoreManagerImpl.java | 36 +-- ...apAtomicOperationMetaStoreManagerTest.java | 4 +- .../PolarisTreeMapMetaStoreManagerTest.java | 5 +- .../core/persistence/ResolverTest.java | 3 +- .../cache/InMemoryEntityCacheTest.java | 3 +- .../BasePolarisMetaStoreManagerTest.java | 29 +- .../PolarisTestMetaStoreManager.java | 263 +++++++++--------- .../quarkus/catalog/IcebergCatalogTest.java | 5 +- .../config/DefaultConfigurationStoreTest.java | 4 - .../task/TableCleanupTaskHandlerTest.java | 24 +- .../service/catalog/io/FileIOFactoryTest.java | 15 +- 16 files changed, 221 insertions(+), 235 deletions(-) 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 37eb83f41e..a3bd572955 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 @@ -37,6 +37,7 @@ import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; import org.apache.polaris.core.PolarisDiagnostics; import org.apache.polaris.core.config.PolarisConfigurationStore; +import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.PolarisPrincipalSecrets; import org.apache.polaris.core.persistence.BasePolarisMetaStoreManagerTest; @@ -90,15 +91,15 @@ protected PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { PolarisEclipseLinkMetaStoreSessionImpl session = new PolarisEclipseLinkMetaStoreSessionImpl( store, Mockito.mock(), realmContext, null, "polaris", RANDOM_SECRETS); - return new PolarisTestMetaStoreManager( - new TransactionalMetaStoreManagerImpl(), + PolarisCallContext polarisCallContext = new PolarisCallContext( realmContext, session, diagServices, new PolarisConfigurationStore() {}, - timeSource.withZone(ZoneId.systemDefault())), - realmContext); + timeSource.withZone(ZoneId.systemDefault())); + return new PolarisTestMetaStoreManager( + new TransactionalMetaStoreManagerImpl(), CallContext.of(realmContext, polarisCallContext)); } @ParameterizedTest diff --git a/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/AtomicMetastoreManagerWithJdbcBasePersistenceImplTest.java b/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/AtomicMetastoreManagerWithJdbcBasePersistenceImplTest.java index 1e4f7db7c9..1623e31b9a 100644 --- a/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/AtomicMetastoreManagerWithJdbcBasePersistenceImplTest.java +++ b/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/AtomicMetastoreManagerWithJdbcBasePersistenceImplTest.java @@ -28,6 +28,7 @@ import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; import org.apache.polaris.core.PolarisDiagnostics; import org.apache.polaris.core.config.PolarisConfigurationStore; +import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.persistence.AtomicOperationMetaStoreManager; import org.apache.polaris.core.persistence.BasePolarisMetaStoreManagerTest; @@ -64,15 +65,15 @@ protected PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { RANDOM_SECRETS, Mockito.mock(), realmContext.getRealmIdentifier()); - return new PolarisTestMetaStoreManager( - new AtomicOperationMetaStoreManager(), + PolarisCallContext polarisCallContext = new PolarisCallContext( realmContext, basePersistence, diagServices, new PolarisConfigurationStore() {}, - timeSource.withZone(ZoneId.systemDefault())), - realmContext); + timeSource.withZone(ZoneId.systemDefault())); + CallContext callContext = CallContext.of(realmContext, polarisCallContext); + return new PolarisTestMetaStoreManager(new AtomicOperationMetaStoreManager(), callContext); } private static class H2JdbcConfiguration implements RelationalJdbcConfiguration { diff --git a/polaris-core/src/main/java/org/apache/polaris/core/persistence/AtomicOperationMetaStoreManager.java b/polaris-core/src/main/java/org/apache/polaris/core/persistence/AtomicOperationMetaStoreManager.java index 6e6ea6ff4d..2a6f25d717 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/persistence/AtomicOperationMetaStoreManager.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/persistence/AtomicOperationMetaStoreManager.java @@ -32,7 +32,7 @@ import java.util.function.Function; import java.util.stream.Collectors; import org.apache.polaris.core.PolarisCallContext; -import org.apache.polaris.core.context.RealmContext; +import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.entity.AsyncTaskType; import org.apache.polaris.core.entity.EntityNameLookupRecord; import org.apache.polaris.core.entity.PolarisBaseEntity; @@ -1501,16 +1501,14 @@ private void revokeGrantRecord( @Override public @Nonnull EntitiesResult loadTasks( - @Nonnull PolarisCallContext callCtx, - @Nonnull RealmContext realmCtx, - String executorId, - PageToken pageToken) { - BasePersistence ms = callCtx.getMetaStore(); + @Nonnull CallContext callCtx, String executorId, PageToken pageToken) { + PolarisCallContext polarisCtx = callCtx.getPolarisCallContext(); + BasePersistence ms = polarisCtx.getMetaStore(); // find all available tasks Page availableTasks = ms.listEntities( - callCtx, + polarisCtx, PolarisEntityConstants.getRootEntityId(), PolarisEntityConstants.getRootEntityId(), PolarisEntityType.TASK, @@ -1518,15 +1516,16 @@ private void revokeGrantRecord( PolarisObjectMapperUtil.TaskExecutionState taskState = PolarisObjectMapperUtil.parseTaskState(entity); long taskAgeTimeout = - callCtx + polarisCtx .getConfigurationStore() .getConfiguration( - realmCtx, + callCtx.getRealmContext(), PolarisTaskConstants.TASK_TIMEOUT_MILLIS_CONFIG, PolarisTaskConstants.TASK_TIMEOUT_MILLIS); return taskState == null || taskState.executor == null - || callCtx.getClock().millis() - taskState.lastAttemptStartTime > taskAgeTimeout; + || polarisCtx.getClock().millis() - taskState.lastAttemptStartTime + > taskAgeTimeout; }, Function.identity(), pageToken); @@ -1537,19 +1536,19 @@ private void revokeGrantRecord( task -> { PolarisBaseEntity updatedTask = new PolarisBaseEntity(task); Map properties = - PolarisObjectMapperUtil.deserializeProperties(callCtx, task.getProperties()); + PolarisObjectMapperUtil.deserializeProperties(polarisCtx, task.getProperties()); properties.put(PolarisTaskConstants.LAST_ATTEMPT_EXECUTOR_ID, executorId); properties.put( PolarisTaskConstants.LAST_ATTEMPT_START_TIME, - String.valueOf(callCtx.getClock().millis())); + String.valueOf(polarisCtx.getClock().millis())); properties.put( PolarisTaskConstants.ATTEMPT_COUNT, String.valueOf( Integer.parseInt(properties.getOrDefault(PolarisTaskConstants.ATTEMPT_COUNT, "0")) + 1)); updatedTask.setProperties( - PolarisObjectMapperUtil.serializeProperties(callCtx, properties)); - EntityResult result = updateEntityPropertiesIfNotChanged(callCtx, null, updatedTask); + PolarisObjectMapperUtil.serializeProperties(polarisCtx, properties)); + EntityResult result = updateEntityPropertiesIfNotChanged(polarisCtx, null, updatedTask); if (result.getReturnStatus() == BaseResult.ReturnStatus.SUCCESS) { loadedTasks.add(result.getEntity()); } else { diff --git a/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManager.java b/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManager.java index 72ded325a0..2e50195082 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManager.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManager.java @@ -25,7 +25,7 @@ import org.apache.polaris.core.PolarisCallContext; import org.apache.polaris.core.auth.PolarisGrantManager; import org.apache.polaris.core.auth.PolarisSecretsManager; -import org.apache.polaris.core.context.RealmContext; +import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.entity.PolarisBaseEntity; import org.apache.polaris.core.entity.PolarisEntity; import org.apache.polaris.core.entity.PolarisEntityCore; @@ -307,11 +307,7 @@ EntityResult loadEntity( * @return list of tasks to be completed */ @Nonnull - EntitiesResult loadTasks( - @Nonnull PolarisCallContext callCtx, - @Nonnull RealmContext realmCtx, - String executorId, - PageToken pageToken); + EntitiesResult loadTasks(@Nonnull CallContext callCtx, String executorId, PageToken pageToken); /** * Load change tracking information for a set of entities in one single shot and return for each diff --git a/polaris-core/src/main/java/org/apache/polaris/core/persistence/TransactionWorkspaceMetaStoreManager.java b/polaris-core/src/main/java/org/apache/polaris/core/persistence/TransactionWorkspaceMetaStoreManager.java index 4de50755c8..3146120973 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/persistence/TransactionWorkspaceMetaStoreManager.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/persistence/TransactionWorkspaceMetaStoreManager.java @@ -26,7 +26,7 @@ import java.util.Map; import java.util.Set; import org.apache.polaris.core.PolarisCallContext; -import org.apache.polaris.core.context.RealmContext; +import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.entity.PolarisBaseEntity; import org.apache.polaris.core.entity.PolarisEntity; import org.apache.polaris.core.entity.PolarisEntityCore; @@ -323,11 +323,11 @@ public EntityResult loadEntity( @Override public EntitiesResult loadTasks( - @Nonnull PolarisCallContext callCtx, - @Nonnull RealmContext realmCtx, - String executorId, - PageToken pageToken) { - callCtx.getDiagServices().fail("illegal_method_in_transaction_workspace", "loadTasks"); + @Nonnull CallContext callCtx, String executorId, PageToken pageToken) { + callCtx + .getPolarisCallContext() + .getDiagServices() + .fail("illegal_method_in_transaction_workspace", "loadTasks"); return null; } diff --git a/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TransactionalMetaStoreManagerImpl.java b/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TransactionalMetaStoreManagerImpl.java index a6467e1754..2d4ce9a8cd 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TransactionalMetaStoreManagerImpl.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TransactionalMetaStoreManagerImpl.java @@ -33,7 +33,7 @@ import java.util.function.Function; import java.util.stream.Collectors; import org.apache.polaris.core.PolarisCallContext; -import org.apache.polaris.core.context.RealmContext; +import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.entity.AsyncTaskType; import org.apache.polaris.core.entity.EntityNameLookupRecord; import org.apache.polaris.core.entity.PolarisBaseEntity; @@ -1936,18 +1936,18 @@ private PolarisEntityResolver resolveSecurableToRoleGrant( () -> this.loadEntity(callCtx, ms, entityCatalogId, entityId, entityType.getCode())); } - /** Refer to {@link #loadTasks(PolarisCallContext, String, PageToken)} */ + /** Refer to {@link #loadTasks(CallContext, String, PageToken)} */ private @Nonnull EntitiesResult loadTasks( - @Nonnull PolarisCallContext callCtx, - @Nonnull RealmContext realmCtx, + @Nonnull CallContext callCtx, @Nonnull TransactionalPersistence ms, String executorId, PageToken pageToken) { + PolarisCallContext polarisCtx = callCtx.getPolarisCallContext(); // find all available tasks Page availableTasks = ms.listEntitiesInCurrentTxn( - callCtx, + polarisCtx, PolarisEntityConstants.getRootEntityId(), PolarisEntityConstants.getRootEntityId(), PolarisEntityType.TASK, @@ -1955,15 +1955,16 @@ private PolarisEntityResolver resolveSecurableToRoleGrant( PolarisObjectMapperUtil.TaskExecutionState taskState = PolarisObjectMapperUtil.parseTaskState(entity); long taskAgeTimeout = - callCtx + polarisCtx .getConfigurationStore() .getConfiguration( - realmCtx, + callCtx.getRealmContext(), PolarisTaskConstants.TASK_TIMEOUT_MILLIS_CONFIG, PolarisTaskConstants.TASK_TIMEOUT_MILLIS); return taskState == null || taskState.executor == null - || callCtx.getClock().millis() - taskState.lastAttemptStartTime > taskAgeTimeout; + || polarisCtx.getClock().millis() - taskState.lastAttemptStartTime + > taskAgeTimeout; }, Function.identity(), pageToken); @@ -1975,19 +1976,20 @@ private PolarisEntityResolver resolveSecurableToRoleGrant( // TODO: Refactor into immutable/Builder pattern. PolarisBaseEntity updatedTask = new PolarisBaseEntity(task); Map properties = - PolarisObjectMapperUtil.deserializeProperties(callCtx, task.getProperties()); + PolarisObjectMapperUtil.deserializeProperties(polarisCtx, task.getProperties()); properties.put(PolarisTaskConstants.LAST_ATTEMPT_EXECUTOR_ID, executorId); properties.put( PolarisTaskConstants.LAST_ATTEMPT_START_TIME, - String.valueOf(callCtx.getClock().millis())); + String.valueOf(polarisCtx.getClock().millis())); properties.put( PolarisTaskConstants.ATTEMPT_COUNT, String.valueOf( Integer.parseInt(properties.getOrDefault(PolarisTaskConstants.ATTEMPT_COUNT, "0")) + 1)); updatedTask.setProperties( - PolarisObjectMapperUtil.serializeProperties(callCtx, properties)); - EntityResult result = updateEntityPropertiesIfNotChanged(callCtx, ms, null, updatedTask); + PolarisObjectMapperUtil.serializeProperties(polarisCtx, properties)); + EntityResult result = + updateEntityPropertiesIfNotChanged(polarisCtx, ms, null, updatedTask); if (result.getReturnStatus() == BaseResult.ReturnStatus.SUCCESS) { loadedTasks.add(result.getEntity()); } else { @@ -2005,13 +2007,11 @@ private PolarisEntityResolver resolveSecurableToRoleGrant( @Override public @Nonnull EntitiesResult loadTasks( - @Nonnull PolarisCallContext callCtx, - @Nonnull RealmContext realmCtx, - String executorId, - PageToken pageToken) { - TransactionalPersistence ms = ((TransactionalPersistence) callCtx.getMetaStore()); + @Nonnull CallContext callCtx, String executorId, PageToken pageToken) { + TransactionalPersistence ms = + ((TransactionalPersistence) callCtx.getPolarisCallContext().getMetaStore()); return ms.runInTransaction( - callCtx, () -> this.loadTasks(callCtx, realmCtx, ms, executorId, pageToken)); + callCtx.getPolarisCallContext(), () -> this.loadTasks(callCtx, ms, executorId, pageToken)); } /** {@inheritDoc} */ 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 dfb1c3a7d5..95089471c5 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 @@ -25,6 +25,7 @@ import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; import org.apache.polaris.core.PolarisDiagnostics; import org.apache.polaris.core.config.PolarisConfigurationStore; +import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.persistence.transactional.TreeMapMetaStore; import org.apache.polaris.core.persistence.transactional.TreeMapTransactionalPersistenceImpl; @@ -45,7 +46,8 @@ public PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { timeSource.withZone(ZoneId.systemDefault())); RealmContext realmCtx = () -> "testRealm"; + return new PolarisTestMetaStoreManager( - new AtomicOperationMetaStoreManager(), callCtx, realmCtx); + new AtomicOperationMetaStoreManager(), CallContext.of(realmCtx, 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 454626a4b3..d3e755b912 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 @@ -25,6 +25,7 @@ import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; import org.apache.polaris.core.PolarisDiagnostics; import org.apache.polaris.core.config.PolarisConfigurationStore; +import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.persistence.transactional.TransactionalMetaStoreManagerImpl; import org.apache.polaris.core.persistence.transactional.TreeMapMetaStore; @@ -36,7 +37,7 @@ public class PolarisTreeMapMetaStoreManagerTest extends BasePolarisMetaStoreMana public PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { PolarisDiagnostics diagServices = new PolarisDefaultDiagServiceImpl(); TreeMapMetaStore store = new TreeMapMetaStore(diagServices); - PolarisCallContext callCtx = + PolarisCallContext polarisCtx = new PolarisCallContext( () -> "testRealm", new TreeMapTransactionalPersistenceImpl(store, Mockito.mock(), RANDOM_SECRETS), @@ -46,6 +47,6 @@ public PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { RealmContext realmCtx = () -> "testRealm"; return new PolarisTestMetaStoreManager( - new TransactionalMetaStoreManagerImpl(), callCtx, realmCtx); + new TransactionalMetaStoreManagerImpl(), CallContext.of(realmCtx, polarisCtx)); } } 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 d5dcb282d3..5f8413c5ee 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 @@ -22,6 +22,7 @@ import org.apache.polaris.core.PolarisCallContext; import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; +import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.persistence.transactional.TransactionalMetaStoreManagerImpl; import org.apache.polaris.core.persistence.transactional.TreeMapMetaStore; @@ -59,7 +60,7 @@ protected PolarisTestMetaStoreManager tm() { if (tm == null) { // bootstrap the mata store with our test schema RealmContext realmCtx = () -> "testRealm"; - tm = new PolarisTestMetaStoreManager(metaStoreManager(), callCtx(), realmCtx); + tm = new PolarisTestMetaStoreManager(metaStoreManager(), CallContext.of(realmCtx, callCtx())); } return tm; } 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 492172f8d9..3a1b5e990b 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 @@ -26,6 +26,7 @@ import org.apache.polaris.core.PolarisCallContext; import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; import org.apache.polaris.core.PolarisDiagnostics; +import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.PolarisBaseEntity; import org.apache.polaris.core.entity.PolarisEntity; @@ -98,7 +99,7 @@ public InMemoryEntityCacheTest() { RealmContext realmContext = () -> "testRealm"; // bootstrap the mata store with our test schema - tm = new PolarisTestMetaStoreManager(metaStoreManager, callCtx, realmContext); + tm = new PolarisTestMetaStoreManager(metaStoreManager, CallContext.of(realmContext, callCtx)); tm.testCreateTestCatalog(); } diff --git a/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/BasePolarisMetaStoreManagerTest.java b/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/BasePolarisMetaStoreManagerTest.java index 418cd8995a..cc1305c9fb 100644 --- a/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/BasePolarisMetaStoreManagerTest.java +++ b/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/BasePolarisMetaStoreManagerTest.java @@ -36,7 +36,6 @@ import java.util.stream.Stream; import org.apache.polaris.core.PolarisCallContext; import org.apache.polaris.core.context.CallContext; -import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.AsyncTaskType; import org.apache.polaris.core.entity.EntityNameLookupRecord; import org.apache.polaris.core.entity.PolarisBaseEntity; @@ -292,11 +291,8 @@ protected void testLoadTasks() { String executorId = "testExecutor_abc"; PolarisMetaStoreManager metaStoreManager = polarisTestMetaStoreManager.polarisMetaStoreManager; PolarisCallContext callCtx = polarisTestMetaStoreManager.polarisCallContext; - RealmContext realmCtx = polarisTestMetaStoreManager.realmContext; List taskList = - metaStoreManager - .loadTasks(callCtx, realmCtx, executorId, PageToken.fromLimit(5)) - .getEntities(); + metaStoreManager.loadTasks(callCtx, executorId, PageToken.fromLimit(5)).getEntities(); Assertions.assertThat(taskList) .isNotNull() .isNotEmpty() @@ -316,9 +312,7 @@ protected void testLoadTasks() { // grab a second round of tasks. Assert that none of the original 5 are in the list List newTaskList = - metaStoreManager - .loadTasks(callCtx, realmCtx, executorId, PageToken.fromLimit(5)) - .getEntities(); + metaStoreManager.loadTasks(callCtx, executorId, PageToken.fromLimit(5)).getEntities(); Assertions.assertThat(newTaskList) .isNotNull() .isNotEmpty() @@ -332,9 +326,7 @@ protected void testLoadTasks() { // only 10 tasks are unassigned. Requesting 20, we should only receive those 10 List lastTen = - metaStoreManager - .loadTasks(callCtx, realmCtx, executorId, PageToken.fromLimit(20)) - .getEntities(); + metaStoreManager.loadTasks(callCtx, executorId, PageToken.fromLimit(20)).getEntities(); Assertions.assertThat(lastTen) .isNotNull() @@ -348,9 +340,7 @@ protected void testLoadTasks() { .collect(Collectors.toSet()); List emtpyList = - metaStoreManager - .loadTasks(callCtx, realmCtx, executorId, PageToken.fromLimit(20)) - .getEntities(); + metaStoreManager.loadTasks(callCtx, executorId, PageToken.fromLimit(20)).getEntities(); Assertions.assertThat(emtpyList).isNotNull().isEmpty(); @@ -358,9 +348,7 @@ protected void testLoadTasks() { // all the tasks are unassigned. Fetch them all List allTasks = - metaStoreManager - .loadTasks(callCtx, realmCtx, executorId, PageToken.fromLimit(20)) - .getEntities(); + metaStoreManager.loadTasks(callCtx, executorId, PageToken.fromLimit(20)).getEntities(); Assertions.assertThat(allTasks) .isNotNull() @@ -375,9 +363,7 @@ protected void testLoadTasks() { timeSource.add(Duration.ofMinutes(10)); List finalList = - metaStoreManager - .loadTasks(callCtx, realmCtx, executorId, PageToken.fromLimit(20)) - .getEntities(); + metaStoreManager.loadTasks(callCtx, executorId, PageToken.fromLimit(20)).getEntities(); Assertions.assertThat(finalList).isNotNull().isEmpty(); } @@ -390,7 +376,6 @@ protected void testLoadTasksInParallel() throws Exception { } PolarisMetaStoreManager metaStoreManager = polarisTestMetaStoreManager.polarisMetaStoreManager; PolarisCallContext callCtx = polarisTestMetaStoreManager.polarisCallContext; - RealmContext realmCtx = polarisTestMetaStoreManager.realmContext; List>> futureList = new ArrayList<>(); ExecutorService executorService = Executors.newCachedThreadPool(); try { @@ -408,7 +393,7 @@ protected void testLoadTasksInParallel() throws Exception { try { taskList = metaStoreManager - .loadTasks(callCtx, realmCtx, executorId, PageToken.fromLimit(5)) + .loadTasks(callCtx, executorId, PageToken.fromLimit(5)) .getEntities(); taskList.stream().map(PolarisBaseEntity::getName).forEach(taskNames::add); } catch (RetryOnConcurrencyException e) { diff --git a/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/PolarisTestMetaStoreManager.java b/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/PolarisTestMetaStoreManager.java index c90c382f0f..11d4be64cc 100644 --- a/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/PolarisTestMetaStoreManager.java +++ b/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/PolarisTestMetaStoreManager.java @@ -29,7 +29,7 @@ import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import org.apache.polaris.core.PolarisCallContext; -import org.apache.polaris.core.context.RealmContext; +import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.entity.EntityNameLookupRecord; import org.apache.polaris.core.entity.PolarisBaseEntity; import org.apache.polaris.core.entity.PolarisChangeTrackingVersions; @@ -63,9 +63,7 @@ public class PolarisTestMetaStoreManager { // call context - final PolarisCallContext polarisCallContext; - - final RealmContext realmContext; + final CallContext callContext; // call metastore manager final PolarisMetaStoreManager polarisMetaStoreManager; @@ -81,30 +79,21 @@ public class PolarisTestMetaStoreManager { // initialize the test public PolarisTestMetaStoreManager( - PolarisMetaStoreManager polarisMetaStoreManager, - PolarisCallContext polarisCallContext, - RealmContext realmContext) { - this( - polarisMetaStoreManager, - polarisCallContext, - realmContext, - System.currentTimeMillis(), - true); + PolarisMetaStoreManager polarisMetaStoreManager, CallContext callContext) { + this(polarisMetaStoreManager, callContext, System.currentTimeMillis(), true); // bootstrap the Polaris service - polarisMetaStoreManager.purge(polarisCallContext); - polarisMetaStoreManager.bootstrapPolarisService(polarisCallContext); + polarisMetaStoreManager.purge(callContext.getPolarisCallContext()); + polarisMetaStoreManager.bootstrapPolarisService(callContext.getPolarisCallContext()); } public PolarisTestMetaStoreManager( PolarisMetaStoreManager polarisMetaStoreManager, - PolarisCallContext polarisCallContext, - RealmContext realmContext, + CallContext callContext, long testStartTime, boolean supportsChangeTracking) { this.testStartTime = testStartTime; - this.polarisCallContext = polarisCallContext; - this.realmContext = realmContext; + this.callContext = callContext; this.polarisMetaStoreManager = polarisMetaStoreManager; this.supportsChangeTracking = supportsChangeTracking; this.doRetry = false; @@ -134,6 +123,8 @@ private PolarisBaseEntity ensureExistsById( PolarisEntityType expectedType, PolarisEntitySubType expectedSubType) { + PolarisCallContext polarisCallContext = callContext.getPolarisCallContext(); + // derive id of the catalog for that entity as well as its parent id final long catalogId; final long parentId; @@ -149,7 +140,7 @@ private PolarisBaseEntity ensureExistsById( // make sure this entity was persisted PolarisBaseEntity entity = polarisMetaStoreManager - .loadEntity(this.polarisCallContext, catalogId, entityId, expectedType) + .loadEntity(polarisCallContext, catalogId, entityId, expectedType) .getEntity(); // assert all expected values @@ -173,7 +164,7 @@ private PolarisBaseEntity ensureExistsById( // we should find it EntityResult result = polarisMetaStoreManager.readEntityByName( - this.polarisCallContext, catalogPath, expectedType, expectedSubType, expectedName); + polarisCallContext, catalogPath, expectedType, expectedSubType, expectedName); // should be success, nothing changed Assertions.assertThat(result).isNotNull(); @@ -190,7 +181,7 @@ private PolarisBaseEntity ensureExistsById( // we should not find it EntityResult result = polarisMetaStoreManager.readEntityByName( - this.polarisCallContext, catalogPath, expectedType, expectedSubType, expectedName); + polarisCallContext, catalogPath, expectedType, expectedSubType, expectedName); // lookup must be success, nothing changed Assertions.assertThat(result).isNotNull(); @@ -216,7 +207,7 @@ private void ensureNotExistsById(long catalogId, long entityId, PolarisEntityTyp PolarisBaseEntity entity = polarisMetaStoreManager - .loadEntity(this.polarisCallContext, catalogId, entityId, expectedType) + .loadEntity(this.callContext.getPolarisCallContext(), catalogId, entityId, expectedType) .getEntity(); // assert entity was not found @@ -295,11 +286,12 @@ void checkGrantRecordRemoved( */ void ensureGrantRecordExists( PolarisEntityCore securable, PolarisEntityCore grantee, PolarisPrivilege priv) { + PolarisCallContext polarisCallContext = callContext.getPolarisCallContext(); // re-load both entities, ensure not null securable = polarisMetaStoreManager .loadEntity( - this.polarisCallContext, + polarisCallContext, securable.getCatalogId(), securable.getId(), securable.getType()) @@ -308,7 +300,7 @@ void ensureGrantRecordExists( grantee = polarisMetaStoreManager .loadEntity( - this.polarisCallContext, grantee.getCatalogId(), grantee.getId(), grantee.getType()) + polarisCallContext, grantee.getCatalogId(), grantee.getId(), grantee.getType()) .getEntity(); Assertions.assertThat(grantee).isNotNull(); @@ -317,7 +309,7 @@ void ensureGrantRecordExists( // load all grant records on that securable, should not fail LoadGrantsResult loadGrantsOnSecurable = - polarisMetaStoreManager.loadGrantsOnSecurable(this.polarisCallContext, securable); + polarisMetaStoreManager.loadGrantsOnSecurable(polarisCallContext, securable); // ensure entities for these grant records have been properly loaded this.validateLoadedGrants(loadGrantsOnSecurable, false); @@ -326,7 +318,7 @@ void ensureGrantRecordExists( // load all grant records on that grantee, should not fail LoadGrantsResult loadGrantsOnGrantee = - polarisMetaStoreManager.loadGrantsToGrantee(this.polarisCallContext, grantee); + polarisMetaStoreManager.loadGrantsToGrantee(polarisCallContext, grantee); // ensure entities for these grant records have been properly loaded this.validateLoadedGrants(loadGrantsOnGrantee, true); @@ -360,7 +352,8 @@ private void validateLoadedGrants(LoadGrantsResult loadGrantRecords, boolean isG PolarisBaseEntity entity = null; for (PolarisEntityType type : PolarisEntityType.values()) { EntityResult entityResult = - polarisMetaStoreManager.loadEntity(this.polarisCallContext, catalogId, entityId, type); + polarisMetaStoreManager.loadEntity( + this.callContext.getPolarisCallContext(), catalogId, entityId, type); if (entityResult.isSuccess()) { entity = entityResult.getEntity(); break; @@ -380,11 +373,12 @@ private void validateLoadedGrants(LoadGrantsResult loadGrantRecords, boolean isG */ void ensureGrantRecordRemoved( PolarisEntityCore securable, PolarisEntityCore grantee, PolarisPrivilege priv) { + PolarisCallContext polarisCallContext = callContext.getPolarisCallContext(); // re-load both entities, ensure not null securable = polarisMetaStoreManager .loadEntity( - this.polarisCallContext, + polarisCallContext, securable.getCatalogId(), securable.getId(), securable.getType()) @@ -393,7 +387,7 @@ void ensureGrantRecordRemoved( grantee = polarisMetaStoreManager .loadEntity( - this.polarisCallContext, grantee.getCatalogId(), grantee.getId(), grantee.getType()) + polarisCallContext, grantee.getCatalogId(), grantee.getId(), grantee.getType()) .getEntity(); Assertions.assertThat(grantee).isNotNull(); @@ -402,7 +396,7 @@ void ensureGrantRecordRemoved( // load all grant records on that securable, should not fail LoadGrantsResult loadGrantsOnSecurable = - polarisMetaStoreManager.loadGrantsOnSecurable(this.polarisCallContext, securable); + polarisMetaStoreManager.loadGrantsOnSecurable(polarisCallContext, securable); // ensure entities for these grant records have been properly loaded this.validateLoadedGrants(loadGrantsOnSecurable, false); @@ -411,7 +405,7 @@ void ensureGrantRecordRemoved( // load all grant records on that grantee, should not fail LoadGrantsResult loadGrantsOnGrantee = - polarisMetaStoreManager.loadGrantsToGrantee(this.polarisCallContext, grantee); + polarisMetaStoreManager.loadGrantsToGrantee(polarisCallContext, grantee); this.validateLoadedGrants(loadGrantsOnGrantee, true); // check that the grant record has been removed @@ -420,21 +414,22 @@ void ensureGrantRecordRemoved( /** Create a principal */ PolarisBaseEntity createPrincipal(String name) { + PolarisCallContext polarisCallContext = callContext.getPolarisCallContext(); // create new principal identity PolarisBaseEntity principalEntity = new PolarisBaseEntity( PolarisEntityConstants.getNullId(), - polarisMetaStoreManager.generateNewEntityId(this.polarisCallContext).getId(), + polarisMetaStoreManager.generateNewEntityId(polarisCallContext).getId(), PolarisEntityType.PRINCIPAL, PolarisEntitySubType.NULL_SUBTYPE, PolarisEntityConstants.getRootEntityId(), name); principalEntity.setInternalProperties( PolarisObjectMapperUtil.serializeProperties( - this.polarisCallContext, + polarisCallContext, Map.of(PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE, "true"))); CreatePrincipalResult createPrincipalResult = - polarisMetaStoreManager.createPrincipal(this.polarisCallContext, principalEntity); + polarisMetaStoreManager.createPrincipal(polarisCallContext, principalEntity); Assertions.assertThat(createPrincipalResult).isNotNull(); // ensure well created @@ -462,7 +457,7 @@ PolarisBaseEntity createPrincipal(String name) { // ensure that the secrets have been properly saved and match PolarisPrincipalSecrets reloadSecrets = polarisMetaStoreManager - .loadPrincipalSecrets(this.polarisCallContext, clientId) + .loadPrincipalSecrets(polarisCallContext, clientId) .getPrincipalSecrets(); Assertions.assertThat(reloadSecrets).isNotNull(); Assertions.assertThat(reloadSecrets.getPrincipalId()).isEqualTo(secrets.getPrincipalId()); @@ -474,7 +469,7 @@ PolarisBaseEntity createPrincipal(String name) { Map internalProperties = PolarisObjectMapperUtil.deserializeProperties( - this.polarisCallContext, createPrincipalResult.getPrincipal().getInternalProperties()); + polarisCallContext, createPrincipalResult.getPrincipal().getInternalProperties()); Assertions.assertThat( internalProperties.get( PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE)) @@ -484,7 +479,7 @@ PolarisBaseEntity createPrincipal(String name) { if (this.doRetry) { // simulate that we retried CreatePrincipalResult newCreatePrincipalResult = - polarisMetaStoreManager.createPrincipal(this.polarisCallContext, principalEntity); + polarisMetaStoreManager.createPrincipal(polarisCallContext, principalEntity); Assertions.assertThat(newCreatePrincipalResult).isNotNull(); // ensure same @@ -501,7 +496,7 @@ PolarisBaseEntity createPrincipal(String name) { secrets = polarisMetaStoreManager .rotatePrincipalSecrets( - this.polarisCallContext, + polarisCallContext, clientId, principalEntity.getId(), false, @@ -512,14 +507,14 @@ PolarisBaseEntity createPrincipal(String name) { PolarisBaseEntity reloadPrincipal = polarisMetaStoreManager .loadEntity( - this.polarisCallContext, + polarisCallContext, 0L, createPrincipalResult.getPrincipal().getId(), createPrincipalResult.getPrincipal().getType()) .getEntity(); internalProperties = PolarisObjectMapperUtil.deserializeProperties( - this.polarisCallContext, reloadPrincipal.getInternalProperties()); + polarisCallContext, reloadPrincipal.getInternalProperties()); Assertions.assertThat( internalProperties.get( PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE)) @@ -527,22 +522,14 @@ PolarisBaseEntity createPrincipal(String name) { // rotate the secrets, twice! polarisMetaStoreManager.rotatePrincipalSecrets( - this.polarisCallContext, - clientId, - principalEntity.getId(), - false, - secrets.getMainSecretHash()); + polarisCallContext, clientId, principalEntity.getId(), false, secrets.getMainSecretHash()); polarisMetaStoreManager.rotatePrincipalSecrets( - this.polarisCallContext, - clientId, - principalEntity.getId(), - false, - secrets.getMainSecretHash()); + polarisCallContext, clientId, principalEntity.getId(), false, secrets.getMainSecretHash()); // reload and check that now the main should be secondary reloadSecrets = polarisMetaStoreManager - .loadPrincipalSecrets(this.polarisCallContext, clientId) + .loadPrincipalSecrets(polarisCallContext, clientId) .getPrincipalSecrets(); Assertions.assertThat(reloadSecrets).isNotNull(); Assertions.assertThat(reloadSecrets.getPrincipalId()).isEqualTo(secrets.getPrincipalId()); @@ -554,14 +541,14 @@ PolarisBaseEntity createPrincipal(String name) { // reset - the previous main secret is no longer one of the secrets polarisMetaStoreManager.rotatePrincipalSecrets( - this.polarisCallContext, + polarisCallContext, clientId, principalEntity.getId(), true, reloadSecrets.getMainSecretHash()); reloadSecrets = polarisMetaStoreManager - .loadPrincipalSecrets(this.polarisCallContext, clientId) + .loadPrincipalSecrets(polarisCallContext, clientId) .getPrincipalSecrets(); Assertions.assertThat(reloadSecrets).isNotNull(); Assertions.assertThat(reloadSecrets.getPrincipalId()).isEqualTo(secrets.getPrincipalId()); @@ -572,12 +559,11 @@ PolarisBaseEntity createPrincipal(String name) { PolarisBaseEntity newPrincipal = polarisMetaStoreManager - .loadEntity( - this.polarisCallContext, 0L, principalEntity.getId(), principalEntity.getType()) + .loadEntity(polarisCallContext, 0L, principalEntity.getId(), principalEntity.getType()) .getEntity(); internalProperties = PolarisObjectMapperUtil.deserializeProperties( - this.polarisCallContext, newPrincipal.getInternalProperties()); + polarisCallContext, newPrincipal.getInternalProperties()); Assertions.assertThat( internalProperties.get( PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE)) @@ -586,14 +572,14 @@ PolarisBaseEntity createPrincipal(String name) { // reset again. we should get new secrets and the CREDENTIAL_ROTATION_REQUIRED flag should be // gone polarisMetaStoreManager.rotatePrincipalSecrets( - this.polarisCallContext, + polarisCallContext, clientId, principalEntity.getId(), true, reloadSecrets.getMainSecretHash()); PolarisPrincipalSecrets postResetCredentials = polarisMetaStoreManager - .loadPrincipalSecrets(this.polarisCallContext, clientId) + .loadPrincipalSecrets(polarisCallContext, clientId) .getPrincipalSecrets(); Assertions.assertThat(reloadSecrets).isNotNull(); Assertions.assertThat(postResetCredentials.getPrincipalId()) @@ -607,12 +593,11 @@ PolarisBaseEntity createPrincipal(String name) { PolarisBaseEntity finalPrincipal = polarisMetaStoreManager - .loadEntity( - this.polarisCallContext, 0L, principalEntity.getId(), principalEntity.getType()) + .loadEntity(polarisCallContext, 0L, principalEntity.getId(), principalEntity.getType()) .getEntity(); internalProperties = PolarisObjectMapperUtil.deserializeProperties( - this.polarisCallContext, finalPrincipal.getInternalProperties()); + polarisCallContext, finalPrincipal.getInternalProperties()); Assertions.assertThat( internalProperties.get( PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE)) @@ -642,7 +627,9 @@ public PolarisBaseEntity createEntity( entityType, entitySubType, name, - polarisMetaStoreManager.generateNewEntityId(this.polarisCallContext).getId(), + polarisMetaStoreManager + .generateNewEntityId(this.callContext.getPolarisCallContext()) + .getId(), properties); } @@ -676,7 +663,8 @@ PolarisBaseEntity createEntity( newEntity.setPropertiesAsMap(properties); PolarisBaseEntity entity = polarisMetaStoreManager - .createEntityIfNotExists(this.polarisCallContext, catalogPath, newEntity) + .createEntityIfNotExists( + this.callContext.getPolarisCallContext(), catalogPath, newEntity) .getEntity(); Assertions.assertThat(entity).isNotNull(); @@ -690,7 +678,8 @@ PolarisBaseEntity createEntity( if (this.doRetry) { PolarisBaseEntity retryEntity = polarisMetaStoreManager - .createEntityIfNotExists(this.polarisCallContext, catalogPath, newEntity) + .createEntityIfNotExists( + this.callContext.getPolarisCallContext(), catalogPath, newEntity) .getEntity(); Assertions.assertThat(retryEntity).isNotNull(); @@ -746,7 +735,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD PolarisBaseEntity entity = polarisMetaStoreManager .loadEntity( - this.polarisCallContext, + this.callContext.getPolarisCallContext(), entityToDrop.getCatalogId(), entityToDrop.getId(), entityToDrop.getType()) @@ -754,7 +743,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD if (entity != null) { EntityResult entityFound = polarisMetaStoreManager.readEntityByName( - this.polarisCallContext, + this.callContext.getPolarisCallContext(), catalogPath, entity.getType(), entity.getSubType(), @@ -776,7 +765,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD List children = polarisMetaStoreManager .listEntities( - this.polarisCallContext, + this.callContext.getPolarisCallContext(), path, PolarisEntityType.NAMESPACE, PolarisEntitySubType.NULL_SUBTYPE, @@ -787,7 +776,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD children = polarisMetaStoreManager .listEntities( - this.polarisCallContext, + this.callContext.getPolarisCallContext(), path, PolarisEntityType.TABLE_LIKE, PolarisEntitySubType.ANY_SUBTYPE, @@ -798,7 +787,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD children = polarisMetaStoreManager .listEntities( - this.polarisCallContext, + this.callContext.getPolarisCallContext(), path, PolarisEntityType.CATALOG_ROLE, PolarisEntitySubType.ANY_SUBTYPE, @@ -816,6 +805,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD exists = false; } + PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); // load all the grants to ensure they are properly cleaned final List granteeEntities; final List securableEntities; @@ -823,12 +813,12 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD granteeEntities = new ArrayList<>( polarisMetaStoreManager - .loadGrantsOnSecurable(this.polarisCallContext, entity) + .loadGrantsOnSecurable(polarisCallContext, entity) .getEntities()); securableEntities = new ArrayList<>( polarisMetaStoreManager - .loadGrantsToGrantee(this.polarisCallContext, entity) + .loadGrantsToGrantee(polarisCallContext, entity) .getEntities()); } else { granteeEntities = List.of(); @@ -840,7 +830,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD Map.of("taskId", String.valueOf(entity.getId()), "cleanupProperty", "cleanupValue"); DropEntityResult dropResult = polarisMetaStoreManager.dropEntityIfExists( - this.polarisCallContext, catalogPath, entityToDrop, cleanupProperties, true); + polarisCallContext, catalogPath, entityToDrop, cleanupProperties, true); // should have been dropped if exists if (entityToDrop.cannotBeDroppedOrRenamed()) { @@ -865,10 +855,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD PolarisBaseEntity cleanupTask = polarisMetaStoreManager .loadEntity( - this.polarisCallContext, - 0L, - dropResult.getCleanupTaskId(), - PolarisEntityType.TASK) + polarisCallContext, 0L, dropResult.getCleanupTaskId(), PolarisEntityType.TASK) .getEntity(); Assertions.assertThat(cleanupTask).isNotNull(); Assertions.assertThat(cleanupTask.getType()).isEqualTo(PolarisEntityType.TASK); @@ -897,7 +884,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD PolarisBaseEntity entityAfterDrop = polarisMetaStoreManager .loadEntity( - this.polarisCallContext, + polarisCallContext, entityToDrop.getCatalogId(), entityToDrop.getId(), entityToDrop.getType()) @@ -910,7 +897,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD Assertions.assertThat(entity).isNotNull(); EntityResult entityFound = polarisMetaStoreManager.readEntityByName( - this.polarisCallContext, + polarisCallContext, catalogPath, entity.getType(), entity.getSubType(), @@ -924,7 +911,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD // of the entity it was connected with before being dropped for (PolarisBaseEntity connectedEntity : granteeEntities) { LoadGrantsResult grantResult = - polarisMetaStoreManager.loadGrantsToGrantee(this.polarisCallContext, connectedEntity); + polarisMetaStoreManager.loadGrantsToGrantee(polarisCallContext, connectedEntity); if (grantResult.isSuccess()) { long cnt = grantResult.getGrantRecords().stream() @@ -945,7 +932,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD } for (PolarisBaseEntity connectedEntity : securableEntities) { LoadGrantsResult grantResult = - polarisMetaStoreManager.loadGrantsOnSecurable(this.polarisCallContext, connectedEntity); + polarisMetaStoreManager.loadGrantsOnSecurable(polarisCallContext, connectedEntity); long cnt = grantResult.getGrantRecords().stream() .filter(gr -> gr.getGranteeId() == entityToDrop.getId()) @@ -963,7 +950,7 @@ public void grantPrivilege( PolarisPrivilege priv) { // grant the privilege polarisMetaStoreManager.grantPrivilegeOnSecurableToRole( - this.polarisCallContext, role, catalogPath, securable, priv); + this.callContext.getPolarisCallContext(), role, catalogPath, securable, priv); // now validate the privilege this.ensureGrantRecordExists(securable, role, priv); @@ -977,7 +964,7 @@ void revokePrivilege( PolarisPrivilege priv) { // grant the privilege polarisMetaStoreManager.revokePrivilegeOnSecurableFromRole( - this.polarisCallContext, role, catalogPath, securable, priv); + this.callContext.getPolarisCallContext(), role, catalogPath, securable, priv); // now validate the privilege this.ensureGrantRecordRemoved(securable, role, priv); @@ -991,7 +978,7 @@ void grantToGrantee( PolarisPrivilege priv) { // grant the privilege polarisMetaStoreManager.grantUsageOnRoleToGrantee( - this.polarisCallContext, catalog, granted, grantee); + this.callContext.getPolarisCallContext(), catalog, granted, grantee); // now validate the privilege this.ensureGrantRecordExists(granted, grantee, priv); @@ -1005,7 +992,7 @@ void revokeToGrantee( PolarisPrivilege priv) { // revoked the privilege polarisMetaStoreManager.revokeUsageOnRoleFromGrantee( - this.polarisCallContext, catalog, granted, grantee); + this.callContext.getPolarisCallContext(), catalog, granted, grantee); // now validate that the privilege is gone this.ensureGrantRecordRemoved(granted, grantee, priv); @@ -1027,7 +1014,12 @@ void attachPolicyToTarget( PolicyEntity policy, Map parameters) { polarisMetaStoreManager.attachPolicyToEntity( - polarisCallContext, targetCatalogPath, target, policyCatalogPath, policy, parameters); + this.callContext.getPolarisCallContext(), + targetCatalogPath, + target, + policyCatalogPath, + policy, + parameters); ensurePolicyMappingRecordExists(target, policy, parameters); } @@ -1039,7 +1031,11 @@ void detachPolicyFromTarget( List policyCatalogPath, PolicyEntity policy) { polarisMetaStoreManager.detachPolicyFromEntity( - polarisCallContext, targetCatalogPath, target, policyCatalogPath, policy); + this.callContext.getPolarisCallContext(), + targetCatalogPath, + target, + policyCatalogPath, + policy); ensurePolicyMappingRecordRemoved(target, policy); } @@ -1052,10 +1048,10 @@ void detachPolicyFromTarget( */ void ensurePolicyMappingRecordExists( PolarisBaseEntity target, PolicyEntity policy, Map parameters) { + PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); target = polarisMetaStoreManager - .loadEntity( - this.polarisCallContext, target.getCatalogId(), target.getId(), target.getType()) + .loadEntity(polarisCallContext, target.getCatalogId(), target.getId(), target.getType()) .getEntity(); Assertions.assertThat(target).isNotNull(); @@ -1063,7 +1059,7 @@ void ensurePolicyMappingRecordExists( PolicyEntity.of( polarisMetaStoreManager .loadEntity( - this.polarisCallContext, + polarisCallContext, policy.getCatalogId(), policy.getId(), PolarisEntityType.POLICY) @@ -1071,7 +1067,7 @@ void ensurePolicyMappingRecordExists( Assertions.assertThat(policy).isNotNull(); LoadPolicyMappingsResult loadPolicyMappingsResult = - polarisMetaStoreManager.loadPoliciesOnEntity(this.polarisCallContext, target); + polarisMetaStoreManager.loadPoliciesOnEntity(polarisCallContext, target); validateLoadedPolicyMappings(loadPolicyMappingsResult); @@ -1081,7 +1077,7 @@ void ensurePolicyMappingRecordExists( // also try load by specific type LoadPolicyMappingsResult loadPolicyMappingsResultByType = polarisMetaStoreManager.loadPoliciesOnEntityByType( - this.polarisCallContext, target, policy.getPolicyType()); + polarisCallContext, target, policy.getPolicyType()); validateLoadedPolicyMappings(loadPolicyMappingsResultByType); checkPolicyMappingRecordExists( loadPolicyMappingsResultByType.getPolicyMappingRecords(), target, policy, parameters); @@ -1094,10 +1090,10 @@ void ensurePolicyMappingRecordExists( * @param policy the policy */ void ensurePolicyMappingRecordRemoved(PolarisBaseEntity target, PolicyEntity policy) { + PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); target = polarisMetaStoreManager - .loadEntity( - this.polarisCallContext, target.getCatalogId(), target.getId(), target.getType()) + .loadEntity(polarisCallContext, target.getCatalogId(), target.getId(), target.getType()) .getEntity(); Assertions.assertThat(target).isNotNull(); @@ -1105,7 +1101,7 @@ void ensurePolicyMappingRecordRemoved(PolarisBaseEntity target, PolicyEntity pol PolicyEntity.of( polarisMetaStoreManager .loadEntity( - this.polarisCallContext, + polarisCallContext, policy.getCatalogId(), policy.getId(), PolarisEntityType.POLICY) @@ -1113,7 +1109,7 @@ void ensurePolicyMappingRecordRemoved(PolarisBaseEntity target, PolicyEntity pol Assertions.assertThat(policy).isNotNull(); LoadPolicyMappingsResult loadPolicyMappingsResult = - polarisMetaStoreManager.loadPoliciesOnEntity(this.polarisCallContext, target); + polarisMetaStoreManager.loadPoliciesOnEntity(polarisCallContext, target); validateLoadedPolicyMappings(loadPolicyMappingsResult); @@ -1123,7 +1119,7 @@ void ensurePolicyMappingRecordRemoved(PolarisBaseEntity target, PolicyEntity pol // also try load by specific type LoadPolicyMappingsResult loadPolicyMappingsResultByType = polarisMetaStoreManager.loadPoliciesOnEntityByType( - this.polarisCallContext, target, policy.getPolicyType()); + polarisCallContext, target, policy.getPolicyType()); validateLoadedPolicyMappings(loadPolicyMappingsResultByType); checkPolicyMappingRecordRemoved( loadPolicyMappingsResultByType.getPolicyMappingRecords(), target, policy); @@ -1147,7 +1143,7 @@ void validateLoadedPolicyMappings(LoadPolicyMappingsResult loadPolicyMappingReco PolicyEntity.of( polarisMetaStoreManager .loadEntity( - this.polarisCallContext, + this.callContext.getPolarisCallContext(), policyMappingRecord.getPolicyCatalogId(), policyMappingRecord.getPolicyId(), PolarisEntityType.POLICY) @@ -1270,13 +1266,16 @@ PolarisBaseEntity createTestCatalog(String catalogName) { PolarisBaseEntity catalog = new PolarisBaseEntity( PolarisEntityConstants.getNullId(), - polarisMetaStoreManager.generateNewEntityId(this.polarisCallContext).getId(), + polarisMetaStoreManager + .generateNewEntityId(this.callContext.getPolarisCallContext()) + .getId(), PolarisEntityType.CATALOG, PolarisEntitySubType.NULL_SUBTYPE, PolarisEntityConstants.getRootEntityId(), catalogName); CreateCatalogResult catalogCreated = - polarisMetaStoreManager.createCatalog(this.polarisCallContext, catalog, List.of()); + polarisMetaStoreManager.createCatalog( + this.callContext.getPolarisCallContext(), catalog, List.of()); Assertions.assertThat(catalogCreated).isNotNull(); catalog = catalogCreated.getCatalog(); @@ -1390,7 +1389,7 @@ public PolarisBaseEntity ensureExistsByName( // find by name, ensure we found it EntityResult entityFound = polarisMetaStoreManager.readEntityByName( - this.polarisCallContext, catalogPath, entityType, entitySubType, name); + this.callContext.getPolarisCallContext(), catalogPath, entityType, entitySubType, name); Assertions.assertThat(entityFound).isNotNull(); Assertions.assertThat(entityFound.isSuccess()).isTrue(); @@ -1448,6 +1447,7 @@ public PolarisBaseEntity updateEntity( PolarisBaseEntity entity, String props, String internalProps) { + PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); // ok, remember version and grants_version int version = entity.getEntityVersion(); int grantRecsVersion = entity.getGrantRecordsVersion(); @@ -1464,14 +1464,13 @@ public PolarisBaseEntity updateEntity( // lookup that entity, ensure it exists PolarisBaseEntity beforeUpdateEntity = polarisMetaStoreManager - .loadEntity( - this.polarisCallContext, entity.getCatalogId(), entity.getId(), entity.getType()) + .loadEntity(polarisCallContext, entity.getCatalogId(), entity.getId(), entity.getType()) .getEntity(); // update that property PolarisBaseEntity updatedEntity = polarisMetaStoreManager - .updateEntityPropertiesIfNotChanged(this.polarisCallContext, catalogPath, entity) + .updateEntityPropertiesIfNotChanged(polarisCallContext, catalogPath, entity) .getEntity(); // if version mismatch, nothing should be updated @@ -1483,7 +1482,7 @@ public PolarisBaseEntity updateEntity( entity = polarisMetaStoreManager .loadEntity( - this.polarisCallContext, entity.getCatalogId(), entity.getId(), entity.getType()) + polarisCallContext, entity.getCatalogId(), entity.getId(), entity.getType()) .getEntity(); // ensure nothing has changed @@ -1538,7 +1537,7 @@ public PolarisBaseEntity updateEntity( List versions = polarisMetaStoreManager .loadEntitiesChangeTracking( - this.polarisCallContext, List.of(new PolarisEntityId(catalogId, entity.getId()))) + polarisCallContext, List.of(new PolarisEntityId(catalogId, entity.getId()))) .getChangeTrackingVersions(); Assertions.assertThat(versions).hasSize(1); Assertions.assertThat(versions.get(0).getEntityVersion()) @@ -1572,7 +1571,7 @@ private void validateListReturn( List result = polarisMetaStoreManager .listEntities( - this.polarisCallContext, + this.callContext.getPolarisCallContext(), path, entityType, entitySubType, @@ -1612,6 +1611,7 @@ private void validateListReturn( * @param cacheEntry the cached entity to validate */ private void validateCacheEntryLoad(ResolvedEntityResult cacheEntry) { + PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); // cannot be null Assertions.assertThat(cacheEntry).isNotNull(); @@ -1628,7 +1628,7 @@ private void validateCacheEntryLoad(ResolvedEntityResult cacheEntry) { PolarisEntity refEntity = PolarisEntity.of( this.polarisMetaStoreManager.loadEntity( - this.polarisCallContext, entity.getCatalogId(), entity.getId(), entity.getType())); + polarisCallContext, entity.getCatalogId(), entity.getId(), entity.getType())); Assertions.assertThat(refEntity).isNotNull(); // same entity @@ -1640,7 +1640,7 @@ private void validateCacheEntryLoad(ResolvedEntityResult cacheEntry) { List refGrantRecords = new ArrayList<>(); if (refEntity.getType().isGrantee()) { LoadGrantsResult loadGrantResult = - this.polarisMetaStoreManager.loadGrantsToGrantee(this.polarisCallContext, refEntity); + this.polarisMetaStoreManager.loadGrantsToGrantee(polarisCallContext, refEntity); this.validateLoadedGrants(loadGrantResult, true); // same version @@ -1651,7 +1651,7 @@ private void validateCacheEntryLoad(ResolvedEntityResult cacheEntry) { } LoadGrantsResult loadGrantResult = - this.polarisMetaStoreManager.loadGrantsOnSecurable(this.polarisCallContext, refEntity); + this.polarisMetaStoreManager.loadGrantsOnSecurable(polarisCallContext, refEntity); this.validateLoadedGrants(loadGrantResult, false); // same version @@ -1676,6 +1676,7 @@ private void validateCacheEntryRefresh( PolarisEntityType entityType, int entityVersion, int entityGrantRecordsVersion) { + PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); // cannot be null Assertions.assertThat(cacheEntry).isNotNull(); PolarisBaseEntity entity = cacheEntry.getEntity(); @@ -1684,16 +1685,15 @@ private void validateCacheEntryRefresh( // reload the entity PolarisBaseEntity refEntity = this.polarisMetaStoreManager - .loadEntity(this.polarisCallContext, catalogId, entityId, entityType) + .loadEntity(polarisCallContext, catalogId, entityId, entityType) .getEntity(); Assertions.assertThat(refEntity).isNotNull(); // reload the grants LoadGrantsResult loadGrantResult = refEntity.getType().isGrantee() - ? this.polarisMetaStoreManager.loadGrantsToGrantee(this.polarisCallContext, refEntity) - : this.polarisMetaStoreManager.loadGrantsOnSecurable( - this.polarisCallContext, refEntity); + ? this.polarisMetaStoreManager.loadGrantsToGrantee(polarisCallContext, refEntity) + : this.polarisMetaStoreManager.loadGrantsOnSecurable(polarisCallContext, refEntity); this.validateLoadedGrants(loadGrantResult, refEntity.getType().isGrantee()); Assertions.assertThat(cacheEntry.getGrantRecordsVersion()) .isEqualTo(loadGrantResult.getGrantsVersion()); @@ -1747,7 +1747,11 @@ private PolarisBaseEntity loadCacheEntryByName( // load cached entry ResolvedEntityResult cacheEntry = this.polarisMetaStoreManager.loadResolvedEntityByName( - this.polarisCallContext, entityCatalogId, parentId, entityType, entityName); + this.callContext.getPolarisCallContext(), + entityCatalogId, + parentId, + entityType, + entityName); // if null, validate that indeed the entry does not exist Assertions.assertThat(cacheEntry.isSuccess()).isEqualTo(expectExists); @@ -1793,7 +1797,7 @@ private PolarisBaseEntity loadCacheEntryById( // load cached entry ResolvedEntityResult cacheEntry = this.polarisMetaStoreManager.loadResolvedEntityById( - this.polarisCallContext, entityCatalogId, entityId, entityType); + this.callContext.getPolarisCallContext(), entityCatalogId, entityId, entityType); // if null, validate that indeed the entry does not exist Assertions.assertThat(cacheEntry.isSuccess()).isEqualTo(expectExists); @@ -1841,7 +1845,7 @@ private void refreshCacheEntry( // load cached entry ResolvedEntityResult cacheEntry = this.polarisMetaStoreManager.refreshResolvedEntity( - this.polarisCallContext, + this.callContext.getPolarisCallContext(), entityVersion, entityGrantRecordsVersion, entityType, @@ -1890,7 +1894,7 @@ void validateBootstrap() { List principals = polarisMetaStoreManager .listEntities( - this.polarisCallContext, + this.callContext.getPolarisCallContext(), null, PolarisEntityType.PRINCIPAL, PolarisEntitySubType.NULL_SUBTYPE, @@ -1917,7 +1921,7 @@ void validateBootstrap() { List principalRoles = polarisMetaStoreManager .listEntities( - this.polarisCallContext, + this.callContext.getPolarisCallContext(), null, PolarisEntityType.PRINCIPAL_ROLE, PolarisEntitySubType.NULL_SUBTYPE, @@ -2376,7 +2380,7 @@ void testDropEntities() { // catalog exists EntityResult catalogFound = polarisMetaStoreManager.readEntityByName( - this.polarisCallContext, + this.callContext.getPolarisCallContext(), null, PolarisEntityType.CATALOG, PolarisEntitySubType.NULL_SUBTYPE, @@ -2409,7 +2413,7 @@ void testDropEntities() { // catalog exists? catalogFound = polarisMetaStoreManager.readEntityByName( - this.polarisCallContext, + this.callContext.getPolarisCallContext(), null, PolarisEntityType.CATALOG, PolarisEntitySubType.NULL_SUBTYPE, @@ -2497,7 +2501,8 @@ public void testPrivileges() { grantToGrantee(catalog, R1, PR9000, PolarisPrivilege.CATALOG_ROLE_USAGE); LoadGrantsResult loadGrantsResult = - polarisMetaStoreManager.loadGrantsToGrantee(this.polarisCallContext, PR9000); + polarisMetaStoreManager.loadGrantsToGrantee( + this.callContext.getPolarisCallContext(), PR9000); this.validateLoadedGrants(loadGrantsResult, true); Assertions.assertThat(loadGrantsResult.getGrantRecords()).hasSize(1); Assertions.assertThat(loadGrantsResult.getGrantRecords().get(0).getSecurableCatalogId()) @@ -2505,7 +2510,9 @@ public void testPrivileges() { Assertions.assertThat(loadGrantsResult.getGrantRecords().get(0).getSecurableId()) .isEqualTo(R1.getId()); - loadGrantsResult = polarisMetaStoreManager.loadGrantsToGrantee(this.polarisCallContext, PR900); + loadGrantsResult = + polarisMetaStoreManager.loadGrantsToGrantee( + this.callContext.getPolarisCallContext(), PR900); Assertions.assertThat(loadGrantsResult).isNotNull(); Assertions.assertThat(loadGrantsResult.getGrantRecords()).hasSize(0); } @@ -2523,6 +2530,7 @@ public void renameEntity( PolarisBaseEntity entity, List newCatPath, String newName) { + PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); // save old name String oldName = entity.getName(); @@ -2652,11 +2660,12 @@ public void testRename() { /** Play with looking up entities */ public void testLookup() { + PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); // load all principals List principals = polarisMetaStoreManager .listEntities( - this.polarisCallContext, + polarisCallContext, null, PolarisEntityType.PRINCIPAL, PolarisEntitySubType.NULL_SUBTYPE, @@ -2689,13 +2698,13 @@ public void testLookup() { PolarisBaseEntity catalog = new PolarisBaseEntity( PolarisEntityConstants.getNullId(), - polarisMetaStoreManager.generateNewEntityId(this.polarisCallContext).getId(), + polarisMetaStoreManager.generateNewEntityId(polarisCallContext).getId(), PolarisEntityType.CATALOG, PolarisEntitySubType.NULL_SUBTYPE, PolarisEntityConstants.getRootEntityId(), "test"); CreateCatalogResult catalogCreated = - polarisMetaStoreManager.createCatalog(this.polarisCallContext, catalog, List.of()); + polarisMetaStoreManager.createCatalog(polarisCallContext, catalog, List.of()); Assertions.assertThat(catalogCreated).isNotNull(); catalog = catalogCreated.getCatalog(); @@ -2801,6 +2810,7 @@ public void testEntityCache() { } void testPolicyMapping() { + PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); PolarisBaseEntity catalog = this.createTestCatalog("test"); Assertions.assertThat(catalog).isNotNull(); @@ -2863,6 +2873,7 @@ void testPolicyMapping() { } void testPolicyMappingCleanup() { + PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); PolarisBaseEntity catalog = this.createTestCatalog("test"); Assertions.assertThat(catalog).isNotNull(); diff --git a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogTest.java b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogTest.java index 16b41f4939..aaaaf93242 100644 --- a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogTest.java +++ b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogTest.java @@ -1533,7 +1533,10 @@ public void testDropTableWithPurge() { .rejects(TABLE); List tasks = metaStoreManager - .loadTasks(polarisContext, () -> realmName, "testExecutor", PageToken.fromLimit(1)) + .loadTasks( + CallContext.of(() -> "testRealm", polarisContext), + "testExecutor", + PageToken.fromLimit(1)) .getEntities(); Assertions.assertThat(tasks).hasSize(1); TaskEntity taskEntity = TaskEntity.of(tasks.get(0)); diff --git a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/config/DefaultConfigurationStoreTest.java b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/config/DefaultConfigurationStoreTest.java index 816ccc6b8b..3da4bd2950 100644 --- a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/config/DefaultConfigurationStoreTest.java +++ b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/config/DefaultConfigurationStoreTest.java @@ -24,15 +24,11 @@ import io.quarkus.test.junit.QuarkusTestProfile; import io.quarkus.test.junit.TestProfile; import jakarta.inject.Inject; -import java.time.Clock; import java.util.Map; -import org.apache.polaris.core.PolarisCallContext; -import org.apache.polaris.core.PolarisDiagnostics; import org.apache.polaris.core.config.FeatureConfiguration; import org.apache.polaris.core.config.PolarisConfigurationStore; import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.CatalogEntity; -import org.apache.polaris.core.persistence.MetaStoreManagerFactory; import org.apache.polaris.service.config.DefaultConfigurationStore; import org.apache.polaris.service.config.FeaturesConfiguration; import org.assertj.core.api.Assertions; diff --git a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/task/TableCleanupTaskHandlerTest.java b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/task/TableCleanupTaskHandlerTest.java index 2789b8ea9b..ae78ad657a 100644 --- a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/task/TableCleanupTaskHandlerTest.java +++ b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/task/TableCleanupTaskHandlerTest.java @@ -157,11 +157,7 @@ public void testTableCleanup() throws IOException { assertThat( metaStoreManagerFactory .getOrCreateMetaStoreManager(realmContext) - .loadTasks( - callContext.getPolarisCallContext(), - realmContext, - "test", - PageToken.fromLimit(2)) + .loadTasks(callContext, "test", PageToken.fromLimit(2)) .getEntities()) .hasSize(2) .satisfiesExactlyInAnyOrder( @@ -241,11 +237,7 @@ public void close() { assertThat( metaStoreManagerFactory .getOrCreateMetaStoreManager(realmContext) - .loadTasks( - callContext.getPolarisCallContext(), - realmContext, - "test", - PageToken.fromLimit(5)) + .loadTasks(callContext, "test", PageToken.fromLimit(5)) .getEntities()) .hasSize(2); } @@ -306,11 +298,7 @@ public void close() { assertThat( metaStoreManagerFactory .getOrCreateMetaStoreManager(realmContext) - .loadTasks( - callContext.getPolarisCallContext(), - realmContext, - "test", - PageToken.fromLimit(5)) + .loadTasks(callContext, "test", PageToken.fromLimit(5)) .getEntities()) .hasSize(4) .satisfiesExactlyInAnyOrder( @@ -430,8 +418,7 @@ public void testTableCleanupMultipleSnapshots() throws IOException { List entities = metaStoreManagerFactory .getOrCreateMetaStoreManager(realmContext) - .loadTasks( - callContext.getPolarisCallContext(), realmContext, "test", PageToken.fromLimit(5)) + .loadTasks(callContext, "test", PageToken.fromLimit(5)) .getEntities(); List manifestCleanupTasks = @@ -605,8 +592,7 @@ public void testTableCleanupMultipleMetadata() throws IOException { List entities = metaStoreManagerFactory .getOrCreateMetaStoreManager(callContext.getRealmContext()) - .loadTasks( - callContext.getPolarisCallContext(), realmContext, "test", PageToken.fromLimit(6)) + .loadTasks(callContext, "test", PageToken.fromLimit(6)) .getEntities(); List manifestCleanupTasks = diff --git a/service/common/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java b/service/common/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java index 9f5d27f9f9..edd19fc964 100644 --- a/service/common/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java +++ b/service/common/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java @@ -135,11 +135,18 @@ FileIO loadFileIOInternal( .fileIOFactorySupplier(fileIOFactorySupplier) .build(); + PolarisCallContext polarisCallContext = + new PolarisCallContext( + testServices.metaStoreManagerFactory().getOrCreateSessionSupplier(realmContext).get(), + testServices.polarisDiagnostics(), + testServices.configurationStore(), + Mockito.mock(Clock.class)); + callContext = new CallContext() { @Override public RealmContext getRealmContext() { - return testServices.realmContext(); + return realmContext; } @Override @@ -189,11 +196,7 @@ public void testLoadFileIOForCleanupTask() { testServices .metaStoreManagerFactory() .getOrCreateMetaStoreManager(realmContext) - .loadTasks( - callContext.getPolarisCallContext(), - realmContext, - "testExecutor", - PageToken.fromLimit(1)) + .loadTasks(callContext, "testExecutor", PageToken.fromLimit(1)) .getEntities(); Assertions.assertThat(tasks).hasSize(1); TaskEntity taskEntity = TaskEntity.of(tasks.get(0)); From a67a0f3045a564dcbe4c7c13763bb8c3085208e2 Mon Sep 17 00:00:00 2001 From: Yun Zou Date: Wed, 4 Jun 2025 17:34:07 -0700 Subject: [PATCH 4/6] update PR --- ...olarisEclipseLinkMetaStoreManagerTest.java | 9 +- ...anagerWithJdbcBasePersistenceImplTest.java | 8 +- .../AtomicOperationMetaStoreManager.java | 21 +- .../persistence/PolarisMetaStoreManager.java | 4 +- .../TransactionWorkspaceMetaStoreManager.java | 8 +- .../TransactionalMetaStoreManagerImpl.java | 30 +-- ...apAtomicOperationMetaStoreManagerTest.java | 7 +- .../PolarisTreeMapMetaStoreManagerTest.java | 8 +- .../core/persistence/ResolverTest.java | 5 +- .../cache/InMemoryEntityCacheTest.java | 6 +- .../PolarisTestMetaStoreManager.java | 251 ++++++++---------- .../quarkus/catalog/IcebergCatalogTest.java | 5 +- .../task/TableCleanupTaskHandlerTest.java | 10 +- .../service/catalog/io/FileIOFactoryTest.java | 11 +- 14 files changed, 158 insertions(+), 225 deletions(-) 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 a3bd572955..55607981e9 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 @@ -37,7 +37,6 @@ import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; import org.apache.polaris.core.PolarisDiagnostics; import org.apache.polaris.core.config.PolarisConfigurationStore; -import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.PolarisPrincipalSecrets; import org.apache.polaris.core.persistence.BasePolarisMetaStoreManagerTest; @@ -84,22 +83,20 @@ static void prepareConfFiles(@TempDir Path archiveDir) throws IOException { @Override protected PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { - RealmContext realmContext = () -> "realm"; PolarisDiagnostics diagServices = new PolarisDefaultDiagServiceImpl(); PolarisEclipseLinkStore store = new PolarisEclipseLinkStore(diagServices); RealmContext realmContext = () -> "realm"; PolarisEclipseLinkMetaStoreSessionImpl session = new PolarisEclipseLinkMetaStoreSessionImpl( store, Mockito.mock(), realmContext, null, "polaris", RANDOM_SECRETS); - PolarisCallContext polarisCallContext = + return new PolarisTestMetaStoreManager( + new TransactionalMetaStoreManagerImpl(), new PolarisCallContext( realmContext, session, diagServices, new PolarisConfigurationStore() {}, - timeSource.withZone(ZoneId.systemDefault())); - return new PolarisTestMetaStoreManager( - new TransactionalMetaStoreManagerImpl(), CallContext.of(realmContext, polarisCallContext)); + timeSource.withZone(ZoneId.systemDefault()))); } @ParameterizedTest diff --git a/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/AtomicMetastoreManagerWithJdbcBasePersistenceImplTest.java b/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/AtomicMetastoreManagerWithJdbcBasePersistenceImplTest.java index 1623e31b9a..1df5d6d5f0 100644 --- a/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/AtomicMetastoreManagerWithJdbcBasePersistenceImplTest.java +++ b/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/AtomicMetastoreManagerWithJdbcBasePersistenceImplTest.java @@ -28,7 +28,6 @@ import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; import org.apache.polaris.core.PolarisDiagnostics; import org.apache.polaris.core.config.PolarisConfigurationStore; -import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.persistence.AtomicOperationMetaStoreManager; import org.apache.polaris.core.persistence.BasePolarisMetaStoreManagerTest; @@ -65,15 +64,14 @@ protected PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { RANDOM_SECRETS, Mockito.mock(), realmContext.getRealmIdentifier()); - PolarisCallContext polarisCallContext = + return new PolarisTestMetaStoreManager( + new AtomicOperationMetaStoreManager(), new PolarisCallContext( realmContext, basePersistence, diagServices, new PolarisConfigurationStore() {}, - timeSource.withZone(ZoneId.systemDefault())); - CallContext callContext = CallContext.of(realmContext, polarisCallContext); - return new PolarisTestMetaStoreManager(new AtomicOperationMetaStoreManager(), callContext); + timeSource.withZone(ZoneId.systemDefault()))); } private static class H2JdbcConfiguration implements RelationalJdbcConfiguration { diff --git a/polaris-core/src/main/java/org/apache/polaris/core/persistence/AtomicOperationMetaStoreManager.java b/polaris-core/src/main/java/org/apache/polaris/core/persistence/AtomicOperationMetaStoreManager.java index 2a6f25d717..060a908e15 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/persistence/AtomicOperationMetaStoreManager.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/persistence/AtomicOperationMetaStoreManager.java @@ -32,7 +32,6 @@ import java.util.function.Function; import java.util.stream.Collectors; import org.apache.polaris.core.PolarisCallContext; -import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.entity.AsyncTaskType; import org.apache.polaris.core.entity.EntityNameLookupRecord; import org.apache.polaris.core.entity.PolarisBaseEntity; @@ -1501,14 +1500,13 @@ private void revokeGrantRecord( @Override public @Nonnull EntitiesResult loadTasks( - @Nonnull CallContext callCtx, String executorId, PageToken pageToken) { - PolarisCallContext polarisCtx = callCtx.getPolarisCallContext(); - BasePersistence ms = polarisCtx.getMetaStore(); + @Nonnull PolarisCallContext callCtx, String executorId, PageToken pageToken) { + BasePersistence ms = callCtx.getMetaStore(); // find all available tasks Page availableTasks = ms.listEntities( - polarisCtx, + callCtx, PolarisEntityConstants.getRootEntityId(), PolarisEntityConstants.getRootEntityId(), PolarisEntityType.TASK, @@ -1516,7 +1514,7 @@ private void revokeGrantRecord( PolarisObjectMapperUtil.TaskExecutionState taskState = PolarisObjectMapperUtil.parseTaskState(entity); long taskAgeTimeout = - polarisCtx + callCtx .getConfigurationStore() .getConfiguration( callCtx.getRealmContext(), @@ -1524,8 +1522,7 @@ private void revokeGrantRecord( PolarisTaskConstants.TASK_TIMEOUT_MILLIS); return taskState == null || taskState.executor == null - || polarisCtx.getClock().millis() - taskState.lastAttemptStartTime - > taskAgeTimeout; + || callCtx.getClock().millis() - taskState.lastAttemptStartTime > taskAgeTimeout; }, Function.identity(), pageToken); @@ -1536,19 +1533,19 @@ private void revokeGrantRecord( task -> { PolarisBaseEntity updatedTask = new PolarisBaseEntity(task); Map properties = - PolarisObjectMapperUtil.deserializeProperties(polarisCtx, task.getProperties()); + PolarisObjectMapperUtil.deserializeProperties(callCtx, task.getProperties()); properties.put(PolarisTaskConstants.LAST_ATTEMPT_EXECUTOR_ID, executorId); properties.put( PolarisTaskConstants.LAST_ATTEMPT_START_TIME, - String.valueOf(polarisCtx.getClock().millis())); + String.valueOf(callCtx.getClock().millis())); properties.put( PolarisTaskConstants.ATTEMPT_COUNT, String.valueOf( Integer.parseInt(properties.getOrDefault(PolarisTaskConstants.ATTEMPT_COUNT, "0")) + 1)); updatedTask.setProperties( - PolarisObjectMapperUtil.serializeProperties(polarisCtx, properties)); - EntityResult result = updateEntityPropertiesIfNotChanged(polarisCtx, null, updatedTask); + PolarisObjectMapperUtil.serializeProperties(callCtx, properties)); + EntityResult result = updateEntityPropertiesIfNotChanged(callCtx, null, updatedTask); if (result.getReturnStatus() == BaseResult.ReturnStatus.SUCCESS) { loadedTasks.add(result.getEntity()); } else { diff --git a/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManager.java b/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManager.java index 2e50195082..2a20ad5c1e 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManager.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManager.java @@ -25,7 +25,6 @@ import org.apache.polaris.core.PolarisCallContext; import org.apache.polaris.core.auth.PolarisGrantManager; import org.apache.polaris.core.auth.PolarisSecretsManager; -import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.entity.PolarisBaseEntity; import org.apache.polaris.core.entity.PolarisEntity; import org.apache.polaris.core.entity.PolarisEntityCore; @@ -307,7 +306,8 @@ EntityResult loadEntity( * @return list of tasks to be completed */ @Nonnull - EntitiesResult loadTasks(@Nonnull CallContext callCtx, String executorId, PageToken pageToken); + EntitiesResult loadTasks( + @Nonnull PolarisCallContext callCtx, String executorId, PageToken pageToken); /** * Load change tracking information for a set of entities in one single shot and return for each diff --git a/polaris-core/src/main/java/org/apache/polaris/core/persistence/TransactionWorkspaceMetaStoreManager.java b/polaris-core/src/main/java/org/apache/polaris/core/persistence/TransactionWorkspaceMetaStoreManager.java index 3146120973..b7ba47e83e 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/persistence/TransactionWorkspaceMetaStoreManager.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/persistence/TransactionWorkspaceMetaStoreManager.java @@ -26,7 +26,6 @@ import java.util.Map; import java.util.Set; import org.apache.polaris.core.PolarisCallContext; -import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.entity.PolarisBaseEntity; import org.apache.polaris.core.entity.PolarisEntity; import org.apache.polaris.core.entity.PolarisEntityCore; @@ -323,11 +322,8 @@ public EntityResult loadEntity( @Override public EntitiesResult loadTasks( - @Nonnull CallContext callCtx, String executorId, PageToken pageToken) { - callCtx - .getPolarisCallContext() - .getDiagServices() - .fail("illegal_method_in_transaction_workspace", "loadTasks"); + @Nonnull PolarisCallContext callCtx, String executorId, PageToken pageToken) { + callCtx.getDiagServices().fail("illegal_method_in_transaction_workspace", "loadTasks"); return null; } diff --git a/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TransactionalMetaStoreManagerImpl.java b/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TransactionalMetaStoreManagerImpl.java index 2d4ce9a8cd..0d6111d54b 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TransactionalMetaStoreManagerImpl.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TransactionalMetaStoreManagerImpl.java @@ -33,7 +33,6 @@ import java.util.function.Function; import java.util.stream.Collectors; import org.apache.polaris.core.PolarisCallContext; -import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.entity.AsyncTaskType; import org.apache.polaris.core.entity.EntityNameLookupRecord; import org.apache.polaris.core.entity.PolarisBaseEntity; @@ -1936,18 +1935,17 @@ private PolarisEntityResolver resolveSecurableToRoleGrant( () -> this.loadEntity(callCtx, ms, entityCatalogId, entityId, entityType.getCode())); } - /** Refer to {@link #loadTasks(CallContext, String, PageToken)} */ + /** Refer to {@link #loadTasks(PolarisCallContext, String, PageToken)} */ private @Nonnull EntitiesResult loadTasks( - @Nonnull CallContext callCtx, + @Nonnull PolarisCallContext callCtx, @Nonnull TransactionalPersistence ms, String executorId, PageToken pageToken) { - PolarisCallContext polarisCtx = callCtx.getPolarisCallContext(); // find all available tasks Page availableTasks = ms.listEntitiesInCurrentTxn( - polarisCtx, + callCtx, PolarisEntityConstants.getRootEntityId(), PolarisEntityConstants.getRootEntityId(), PolarisEntityType.TASK, @@ -1955,7 +1953,7 @@ private PolarisEntityResolver resolveSecurableToRoleGrant( PolarisObjectMapperUtil.TaskExecutionState taskState = PolarisObjectMapperUtil.parseTaskState(entity); long taskAgeTimeout = - polarisCtx + callCtx .getConfigurationStore() .getConfiguration( callCtx.getRealmContext(), @@ -1963,8 +1961,7 @@ private PolarisEntityResolver resolveSecurableToRoleGrant( PolarisTaskConstants.TASK_TIMEOUT_MILLIS); return taskState == null || taskState.executor == null - || polarisCtx.getClock().millis() - taskState.lastAttemptStartTime - > taskAgeTimeout; + || callCtx.getClock().millis() - taskState.lastAttemptStartTime > taskAgeTimeout; }, Function.identity(), pageToken); @@ -1976,20 +1973,19 @@ private PolarisEntityResolver resolveSecurableToRoleGrant( // TODO: Refactor into immutable/Builder pattern. PolarisBaseEntity updatedTask = new PolarisBaseEntity(task); Map properties = - PolarisObjectMapperUtil.deserializeProperties(polarisCtx, task.getProperties()); + PolarisObjectMapperUtil.deserializeProperties(callCtx, task.getProperties()); properties.put(PolarisTaskConstants.LAST_ATTEMPT_EXECUTOR_ID, executorId); properties.put( PolarisTaskConstants.LAST_ATTEMPT_START_TIME, - String.valueOf(polarisCtx.getClock().millis())); + String.valueOf(callCtx.getClock().millis())); properties.put( PolarisTaskConstants.ATTEMPT_COUNT, String.valueOf( Integer.parseInt(properties.getOrDefault(PolarisTaskConstants.ATTEMPT_COUNT, "0")) + 1)); updatedTask.setProperties( - PolarisObjectMapperUtil.serializeProperties(polarisCtx, properties)); - EntityResult result = - updateEntityPropertiesIfNotChanged(polarisCtx, ms, null, updatedTask); + PolarisObjectMapperUtil.serializeProperties(callCtx, properties)); + EntityResult result = updateEntityPropertiesIfNotChanged(callCtx, ms, null, updatedTask); if (result.getReturnStatus() == BaseResult.ReturnStatus.SUCCESS) { loadedTasks.add(result.getEntity()); } else { @@ -2007,11 +2003,9 @@ private PolarisEntityResolver resolveSecurableToRoleGrant( @Override public @Nonnull EntitiesResult loadTasks( - @Nonnull CallContext callCtx, String executorId, PageToken pageToken) { - TransactionalPersistence ms = - ((TransactionalPersistence) callCtx.getPolarisCallContext().getMetaStore()); - return ms.runInTransaction( - callCtx.getPolarisCallContext(), () -> this.loadTasks(callCtx, ms, executorId, pageToken)); + @Nonnull PolarisCallContext callCtx, String executorId, PageToken pageToken) { + TransactionalPersistence ms = ((TransactionalPersistence) callCtx.getMetaStore()); + return ms.runInTransaction(callCtx, () -> this.loadTasks(callCtx, ms, executorId, pageToken)); } /** {@inheritDoc} */ 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 95089471c5..f89615cf10 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 @@ -25,8 +25,6 @@ import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; import org.apache.polaris.core.PolarisDiagnostics; import org.apache.polaris.core.config.PolarisConfigurationStore; -import org.apache.polaris.core.context.CallContext; -import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.persistence.transactional.TreeMapMetaStore; import org.apache.polaris.core.persistence.transactional.TreeMapTransactionalPersistenceImpl; import org.mockito.Mockito; @@ -45,9 +43,6 @@ public PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { new PolarisConfigurationStore() {}, timeSource.withZone(ZoneId.systemDefault())); - RealmContext realmCtx = () -> "testRealm"; - - return new PolarisTestMetaStoreManager( - new AtomicOperationMetaStoreManager(), CallContext.of(realmCtx, callCtx)); + return new PolarisTestMetaStoreManager(new AtomicOperationMetaStoreManager(), 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 d3e755b912..49a2bfcc00 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 @@ -25,8 +25,6 @@ import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; import org.apache.polaris.core.PolarisDiagnostics; import org.apache.polaris.core.config.PolarisConfigurationStore; -import org.apache.polaris.core.context.CallContext; -import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.persistence.transactional.TransactionalMetaStoreManagerImpl; import org.apache.polaris.core.persistence.transactional.TreeMapMetaStore; import org.apache.polaris.core.persistence.transactional.TreeMapTransactionalPersistenceImpl; @@ -37,7 +35,7 @@ public class PolarisTreeMapMetaStoreManagerTest extends BasePolarisMetaStoreMana public PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { PolarisDiagnostics diagServices = new PolarisDefaultDiagServiceImpl(); TreeMapMetaStore store = new TreeMapMetaStore(diagServices); - PolarisCallContext polarisCtx = + PolarisCallContext callCtx = new PolarisCallContext( () -> "testRealm", new TreeMapTransactionalPersistenceImpl(store, Mockito.mock(), RANDOM_SECRETS), @@ -45,8 +43,6 @@ public PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { new PolarisConfigurationStore() {}, timeSource.withZone(ZoneId.systemDefault())); - RealmContext realmCtx = () -> "testRealm"; - return new PolarisTestMetaStoreManager( - new TransactionalMetaStoreManagerImpl(), CallContext.of(realmCtx, polarisCtx)); + return new PolarisTestMetaStoreManager(new TransactionalMetaStoreManagerImpl(), 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 5f8413c5ee..d72a199ae7 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 @@ -22,8 +22,6 @@ import org.apache.polaris.core.PolarisCallContext; import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; -import org.apache.polaris.core.context.CallContext; -import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.persistence.transactional.TransactionalMetaStoreManagerImpl; import org.apache.polaris.core.persistence.transactional.TreeMapMetaStore; import org.apache.polaris.core.persistence.transactional.TreeMapTransactionalPersistenceImpl; @@ -59,8 +57,7 @@ protected PolarisMetaStoreManager metaStoreManager() { protected PolarisTestMetaStoreManager tm() { if (tm == null) { // bootstrap the mata store with our test schema - RealmContext realmCtx = () -> "testRealm"; - tm = new PolarisTestMetaStoreManager(metaStoreManager(), CallContext.of(realmCtx, callCtx())); + tm = new PolarisTestMetaStoreManager(metaStoreManager(), callCtx()); } return tm; } 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 3a1b5e990b..1d0564be9e 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 @@ -26,8 +26,6 @@ import org.apache.polaris.core.PolarisCallContext; import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; import org.apache.polaris.core.PolarisDiagnostics; -import org.apache.polaris.core.context.CallContext; -import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.PolarisBaseEntity; import org.apache.polaris.core.entity.PolarisEntity; import org.apache.polaris.core.entity.PolarisEntitySubType; @@ -96,10 +94,8 @@ public InMemoryEntityCacheTest() { callCtx = new PolarisCallContext(() -> "testRealm", metaStore, diagServices); metaStoreManager = new TransactionalMetaStoreManagerImpl(); - RealmContext realmContext = () -> "testRealm"; - // bootstrap the mata store with our test schema - tm = new PolarisTestMetaStoreManager(metaStoreManager, CallContext.of(realmContext, callCtx)); + tm = new PolarisTestMetaStoreManager(metaStoreManager, callCtx); tm.testCreateTestCatalog(); } diff --git a/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/PolarisTestMetaStoreManager.java b/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/PolarisTestMetaStoreManager.java index 11d4be64cc..7d90ab23da 100644 --- a/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/PolarisTestMetaStoreManager.java +++ b/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/PolarisTestMetaStoreManager.java @@ -29,7 +29,6 @@ import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import org.apache.polaris.core.PolarisCallContext; -import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.entity.EntityNameLookupRecord; import org.apache.polaris.core.entity.PolarisBaseEntity; import org.apache.polaris.core.entity.PolarisChangeTrackingVersions; @@ -63,7 +62,7 @@ public class PolarisTestMetaStoreManager { // call context - final CallContext callContext; + final PolarisCallContext polarisCallContext; // call metastore manager final PolarisMetaStoreManager polarisMetaStoreManager; @@ -79,21 +78,21 @@ public class PolarisTestMetaStoreManager { // initialize the test public PolarisTestMetaStoreManager( - PolarisMetaStoreManager polarisMetaStoreManager, CallContext callContext) { - this(polarisMetaStoreManager, callContext, System.currentTimeMillis(), true); + PolarisMetaStoreManager polarisMetaStoreManager, PolarisCallContext polarisCallContext) { + this(polarisMetaStoreManager, polarisCallContext, System.currentTimeMillis(), true); // bootstrap the Polaris service - polarisMetaStoreManager.purge(callContext.getPolarisCallContext()); - polarisMetaStoreManager.bootstrapPolarisService(callContext.getPolarisCallContext()); + polarisMetaStoreManager.purge(polarisCallContext); + polarisMetaStoreManager.bootstrapPolarisService(polarisCallContext); } public PolarisTestMetaStoreManager( PolarisMetaStoreManager polarisMetaStoreManager, - CallContext callContext, + PolarisCallContext polarisCallContext, long testStartTime, boolean supportsChangeTracking) { this.testStartTime = testStartTime; - this.callContext = callContext; + this.polarisCallContext = polarisCallContext; this.polarisMetaStoreManager = polarisMetaStoreManager; this.supportsChangeTracking = supportsChangeTracking; this.doRetry = false; @@ -123,8 +122,6 @@ private PolarisBaseEntity ensureExistsById( PolarisEntityType expectedType, PolarisEntitySubType expectedSubType) { - PolarisCallContext polarisCallContext = callContext.getPolarisCallContext(); - // derive id of the catalog for that entity as well as its parent id final long catalogId; final long parentId; @@ -140,7 +137,7 @@ private PolarisBaseEntity ensureExistsById( // make sure this entity was persisted PolarisBaseEntity entity = polarisMetaStoreManager - .loadEntity(polarisCallContext, catalogId, entityId, expectedType) + .loadEntity(this.polarisCallContext, catalogId, entityId, expectedType) .getEntity(); // assert all expected values @@ -164,7 +161,7 @@ private PolarisBaseEntity ensureExistsById( // we should find it EntityResult result = polarisMetaStoreManager.readEntityByName( - polarisCallContext, catalogPath, expectedType, expectedSubType, expectedName); + this.polarisCallContext, catalogPath, expectedType, expectedSubType, expectedName); // should be success, nothing changed Assertions.assertThat(result).isNotNull(); @@ -181,7 +178,7 @@ private PolarisBaseEntity ensureExistsById( // we should not find it EntityResult result = polarisMetaStoreManager.readEntityByName( - polarisCallContext, catalogPath, expectedType, expectedSubType, expectedName); + this.polarisCallContext, catalogPath, expectedType, expectedSubType, expectedName); // lookup must be success, nothing changed Assertions.assertThat(result).isNotNull(); @@ -207,7 +204,7 @@ private void ensureNotExistsById(long catalogId, long entityId, PolarisEntityTyp PolarisBaseEntity entity = polarisMetaStoreManager - .loadEntity(this.callContext.getPolarisCallContext(), catalogId, entityId, expectedType) + .loadEntity(this.polarisCallContext, catalogId, entityId, expectedType) .getEntity(); // assert entity was not found @@ -286,12 +283,11 @@ void checkGrantRecordRemoved( */ void ensureGrantRecordExists( PolarisEntityCore securable, PolarisEntityCore grantee, PolarisPrivilege priv) { - PolarisCallContext polarisCallContext = callContext.getPolarisCallContext(); // re-load both entities, ensure not null securable = polarisMetaStoreManager .loadEntity( - polarisCallContext, + this.polarisCallContext, securable.getCatalogId(), securable.getId(), securable.getType()) @@ -300,7 +296,7 @@ void ensureGrantRecordExists( grantee = polarisMetaStoreManager .loadEntity( - polarisCallContext, grantee.getCatalogId(), grantee.getId(), grantee.getType()) + this.polarisCallContext, grantee.getCatalogId(), grantee.getId(), grantee.getType()) .getEntity(); Assertions.assertThat(grantee).isNotNull(); @@ -309,7 +305,7 @@ void ensureGrantRecordExists( // load all grant records on that securable, should not fail LoadGrantsResult loadGrantsOnSecurable = - polarisMetaStoreManager.loadGrantsOnSecurable(polarisCallContext, securable); + polarisMetaStoreManager.loadGrantsOnSecurable(this.polarisCallContext, securable); // ensure entities for these grant records have been properly loaded this.validateLoadedGrants(loadGrantsOnSecurable, false); @@ -318,7 +314,7 @@ void ensureGrantRecordExists( // load all grant records on that grantee, should not fail LoadGrantsResult loadGrantsOnGrantee = - polarisMetaStoreManager.loadGrantsToGrantee(polarisCallContext, grantee); + polarisMetaStoreManager.loadGrantsToGrantee(this.polarisCallContext, grantee); // ensure entities for these grant records have been properly loaded this.validateLoadedGrants(loadGrantsOnGrantee, true); @@ -352,8 +348,7 @@ private void validateLoadedGrants(LoadGrantsResult loadGrantRecords, boolean isG PolarisBaseEntity entity = null; for (PolarisEntityType type : PolarisEntityType.values()) { EntityResult entityResult = - polarisMetaStoreManager.loadEntity( - this.callContext.getPolarisCallContext(), catalogId, entityId, type); + polarisMetaStoreManager.loadEntity(this.polarisCallContext, catalogId, entityId, type); if (entityResult.isSuccess()) { entity = entityResult.getEntity(); break; @@ -373,12 +368,11 @@ private void validateLoadedGrants(LoadGrantsResult loadGrantRecords, boolean isG */ void ensureGrantRecordRemoved( PolarisEntityCore securable, PolarisEntityCore grantee, PolarisPrivilege priv) { - PolarisCallContext polarisCallContext = callContext.getPolarisCallContext(); // re-load both entities, ensure not null securable = polarisMetaStoreManager .loadEntity( - polarisCallContext, + this.polarisCallContext, securable.getCatalogId(), securable.getId(), securable.getType()) @@ -387,7 +381,7 @@ void ensureGrantRecordRemoved( grantee = polarisMetaStoreManager .loadEntity( - polarisCallContext, grantee.getCatalogId(), grantee.getId(), grantee.getType()) + this.polarisCallContext, grantee.getCatalogId(), grantee.getId(), grantee.getType()) .getEntity(); Assertions.assertThat(grantee).isNotNull(); @@ -396,7 +390,7 @@ void ensureGrantRecordRemoved( // load all grant records on that securable, should not fail LoadGrantsResult loadGrantsOnSecurable = - polarisMetaStoreManager.loadGrantsOnSecurable(polarisCallContext, securable); + polarisMetaStoreManager.loadGrantsOnSecurable(this.polarisCallContext, securable); // ensure entities for these grant records have been properly loaded this.validateLoadedGrants(loadGrantsOnSecurable, false); @@ -405,7 +399,7 @@ void ensureGrantRecordRemoved( // load all grant records on that grantee, should not fail LoadGrantsResult loadGrantsOnGrantee = - polarisMetaStoreManager.loadGrantsToGrantee(polarisCallContext, grantee); + polarisMetaStoreManager.loadGrantsToGrantee(this.polarisCallContext, grantee); this.validateLoadedGrants(loadGrantsOnGrantee, true); // check that the grant record has been removed @@ -414,22 +408,21 @@ void ensureGrantRecordRemoved( /** Create a principal */ PolarisBaseEntity createPrincipal(String name) { - PolarisCallContext polarisCallContext = callContext.getPolarisCallContext(); // create new principal identity PolarisBaseEntity principalEntity = new PolarisBaseEntity( PolarisEntityConstants.getNullId(), - polarisMetaStoreManager.generateNewEntityId(polarisCallContext).getId(), + polarisMetaStoreManager.generateNewEntityId(this.polarisCallContext).getId(), PolarisEntityType.PRINCIPAL, PolarisEntitySubType.NULL_SUBTYPE, PolarisEntityConstants.getRootEntityId(), name); principalEntity.setInternalProperties( PolarisObjectMapperUtil.serializeProperties( - polarisCallContext, + this.polarisCallContext, Map.of(PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE, "true"))); CreatePrincipalResult createPrincipalResult = - polarisMetaStoreManager.createPrincipal(polarisCallContext, principalEntity); + polarisMetaStoreManager.createPrincipal(this.polarisCallContext, principalEntity); Assertions.assertThat(createPrincipalResult).isNotNull(); // ensure well created @@ -457,7 +450,7 @@ PolarisBaseEntity createPrincipal(String name) { // ensure that the secrets have been properly saved and match PolarisPrincipalSecrets reloadSecrets = polarisMetaStoreManager - .loadPrincipalSecrets(polarisCallContext, clientId) + .loadPrincipalSecrets(this.polarisCallContext, clientId) .getPrincipalSecrets(); Assertions.assertThat(reloadSecrets).isNotNull(); Assertions.assertThat(reloadSecrets.getPrincipalId()).isEqualTo(secrets.getPrincipalId()); @@ -469,7 +462,7 @@ PolarisBaseEntity createPrincipal(String name) { Map internalProperties = PolarisObjectMapperUtil.deserializeProperties( - polarisCallContext, createPrincipalResult.getPrincipal().getInternalProperties()); + this.polarisCallContext, createPrincipalResult.getPrincipal().getInternalProperties()); Assertions.assertThat( internalProperties.get( PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE)) @@ -479,7 +472,7 @@ PolarisBaseEntity createPrincipal(String name) { if (this.doRetry) { // simulate that we retried CreatePrincipalResult newCreatePrincipalResult = - polarisMetaStoreManager.createPrincipal(polarisCallContext, principalEntity); + polarisMetaStoreManager.createPrincipal(this.polarisCallContext, principalEntity); Assertions.assertThat(newCreatePrincipalResult).isNotNull(); // ensure same @@ -496,7 +489,7 @@ PolarisBaseEntity createPrincipal(String name) { secrets = polarisMetaStoreManager .rotatePrincipalSecrets( - polarisCallContext, + this.polarisCallContext, clientId, principalEntity.getId(), false, @@ -507,14 +500,14 @@ PolarisBaseEntity createPrincipal(String name) { PolarisBaseEntity reloadPrincipal = polarisMetaStoreManager .loadEntity( - polarisCallContext, + this.polarisCallContext, 0L, createPrincipalResult.getPrincipal().getId(), createPrincipalResult.getPrincipal().getType()) .getEntity(); internalProperties = PolarisObjectMapperUtil.deserializeProperties( - polarisCallContext, reloadPrincipal.getInternalProperties()); + this.polarisCallContext, reloadPrincipal.getInternalProperties()); Assertions.assertThat( internalProperties.get( PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE)) @@ -522,14 +515,22 @@ PolarisBaseEntity createPrincipal(String name) { // rotate the secrets, twice! polarisMetaStoreManager.rotatePrincipalSecrets( - polarisCallContext, clientId, principalEntity.getId(), false, secrets.getMainSecretHash()); + this.polarisCallContext, + clientId, + principalEntity.getId(), + false, + secrets.getMainSecretHash()); polarisMetaStoreManager.rotatePrincipalSecrets( - polarisCallContext, clientId, principalEntity.getId(), false, secrets.getMainSecretHash()); + this.polarisCallContext, + clientId, + principalEntity.getId(), + false, + secrets.getMainSecretHash()); // reload and check that now the main should be secondary reloadSecrets = polarisMetaStoreManager - .loadPrincipalSecrets(polarisCallContext, clientId) + .loadPrincipalSecrets(this.polarisCallContext, clientId) .getPrincipalSecrets(); Assertions.assertThat(reloadSecrets).isNotNull(); Assertions.assertThat(reloadSecrets.getPrincipalId()).isEqualTo(secrets.getPrincipalId()); @@ -541,14 +542,14 @@ PolarisBaseEntity createPrincipal(String name) { // reset - the previous main secret is no longer one of the secrets polarisMetaStoreManager.rotatePrincipalSecrets( - polarisCallContext, + this.polarisCallContext, clientId, principalEntity.getId(), true, reloadSecrets.getMainSecretHash()); reloadSecrets = polarisMetaStoreManager - .loadPrincipalSecrets(polarisCallContext, clientId) + .loadPrincipalSecrets(this.polarisCallContext, clientId) .getPrincipalSecrets(); Assertions.assertThat(reloadSecrets).isNotNull(); Assertions.assertThat(reloadSecrets.getPrincipalId()).isEqualTo(secrets.getPrincipalId()); @@ -559,11 +560,12 @@ PolarisBaseEntity createPrincipal(String name) { PolarisBaseEntity newPrincipal = polarisMetaStoreManager - .loadEntity(polarisCallContext, 0L, principalEntity.getId(), principalEntity.getType()) + .loadEntity( + this.polarisCallContext, 0L, principalEntity.getId(), principalEntity.getType()) .getEntity(); internalProperties = PolarisObjectMapperUtil.deserializeProperties( - polarisCallContext, newPrincipal.getInternalProperties()); + this.polarisCallContext, newPrincipal.getInternalProperties()); Assertions.assertThat( internalProperties.get( PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE)) @@ -572,14 +574,14 @@ PolarisBaseEntity createPrincipal(String name) { // reset again. we should get new secrets and the CREDENTIAL_ROTATION_REQUIRED flag should be // gone polarisMetaStoreManager.rotatePrincipalSecrets( - polarisCallContext, + this.polarisCallContext, clientId, principalEntity.getId(), true, reloadSecrets.getMainSecretHash()); PolarisPrincipalSecrets postResetCredentials = polarisMetaStoreManager - .loadPrincipalSecrets(polarisCallContext, clientId) + .loadPrincipalSecrets(this.polarisCallContext, clientId) .getPrincipalSecrets(); Assertions.assertThat(reloadSecrets).isNotNull(); Assertions.assertThat(postResetCredentials.getPrincipalId()) @@ -593,11 +595,12 @@ PolarisBaseEntity createPrincipal(String name) { PolarisBaseEntity finalPrincipal = polarisMetaStoreManager - .loadEntity(polarisCallContext, 0L, principalEntity.getId(), principalEntity.getType()) + .loadEntity( + this.polarisCallContext, 0L, principalEntity.getId(), principalEntity.getType()) .getEntity(); internalProperties = PolarisObjectMapperUtil.deserializeProperties( - polarisCallContext, finalPrincipal.getInternalProperties()); + this.polarisCallContext, finalPrincipal.getInternalProperties()); Assertions.assertThat( internalProperties.get( PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE)) @@ -627,9 +630,7 @@ public PolarisBaseEntity createEntity( entityType, entitySubType, name, - polarisMetaStoreManager - .generateNewEntityId(this.callContext.getPolarisCallContext()) - .getId(), + polarisMetaStoreManager.generateNewEntityId(this.polarisCallContext).getId(), properties); } @@ -663,8 +664,7 @@ PolarisBaseEntity createEntity( newEntity.setPropertiesAsMap(properties); PolarisBaseEntity entity = polarisMetaStoreManager - .createEntityIfNotExists( - this.callContext.getPolarisCallContext(), catalogPath, newEntity) + .createEntityIfNotExists(this.polarisCallContext, catalogPath, newEntity) .getEntity(); Assertions.assertThat(entity).isNotNull(); @@ -678,8 +678,7 @@ PolarisBaseEntity createEntity( if (this.doRetry) { PolarisBaseEntity retryEntity = polarisMetaStoreManager - .createEntityIfNotExists( - this.callContext.getPolarisCallContext(), catalogPath, newEntity) + .createEntityIfNotExists(this.polarisCallContext, catalogPath, newEntity) .getEntity(); Assertions.assertThat(retryEntity).isNotNull(); @@ -735,7 +734,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD PolarisBaseEntity entity = polarisMetaStoreManager .loadEntity( - this.callContext.getPolarisCallContext(), + this.polarisCallContext, entityToDrop.getCatalogId(), entityToDrop.getId(), entityToDrop.getType()) @@ -743,7 +742,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD if (entity != null) { EntityResult entityFound = polarisMetaStoreManager.readEntityByName( - this.callContext.getPolarisCallContext(), + this.polarisCallContext, catalogPath, entity.getType(), entity.getSubType(), @@ -765,7 +764,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD List children = polarisMetaStoreManager .listEntities( - this.callContext.getPolarisCallContext(), + this.polarisCallContext, path, PolarisEntityType.NAMESPACE, PolarisEntitySubType.NULL_SUBTYPE, @@ -776,7 +775,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD children = polarisMetaStoreManager .listEntities( - this.callContext.getPolarisCallContext(), + this.polarisCallContext, path, PolarisEntityType.TABLE_LIKE, PolarisEntitySubType.ANY_SUBTYPE, @@ -787,7 +786,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD children = polarisMetaStoreManager .listEntities( - this.callContext.getPolarisCallContext(), + this.polarisCallContext, path, PolarisEntityType.CATALOG_ROLE, PolarisEntitySubType.ANY_SUBTYPE, @@ -805,7 +804,6 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD exists = false; } - PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); // load all the grants to ensure they are properly cleaned final List granteeEntities; final List securableEntities; @@ -813,12 +811,12 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD granteeEntities = new ArrayList<>( polarisMetaStoreManager - .loadGrantsOnSecurable(polarisCallContext, entity) + .loadGrantsOnSecurable(this.polarisCallContext, entity) .getEntities()); securableEntities = new ArrayList<>( polarisMetaStoreManager - .loadGrantsToGrantee(polarisCallContext, entity) + .loadGrantsToGrantee(this.polarisCallContext, entity) .getEntities()); } else { granteeEntities = List.of(); @@ -830,7 +828,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD Map.of("taskId", String.valueOf(entity.getId()), "cleanupProperty", "cleanupValue"); DropEntityResult dropResult = polarisMetaStoreManager.dropEntityIfExists( - polarisCallContext, catalogPath, entityToDrop, cleanupProperties, true); + this.polarisCallContext, catalogPath, entityToDrop, cleanupProperties, true); // should have been dropped if exists if (entityToDrop.cannotBeDroppedOrRenamed()) { @@ -855,7 +853,10 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD PolarisBaseEntity cleanupTask = polarisMetaStoreManager .loadEntity( - polarisCallContext, 0L, dropResult.getCleanupTaskId(), PolarisEntityType.TASK) + this.polarisCallContext, + 0L, + dropResult.getCleanupTaskId(), + PolarisEntityType.TASK) .getEntity(); Assertions.assertThat(cleanupTask).isNotNull(); Assertions.assertThat(cleanupTask.getType()).isEqualTo(PolarisEntityType.TASK); @@ -884,7 +885,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD PolarisBaseEntity entityAfterDrop = polarisMetaStoreManager .loadEntity( - polarisCallContext, + this.polarisCallContext, entityToDrop.getCatalogId(), entityToDrop.getId(), entityToDrop.getType()) @@ -897,7 +898,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD Assertions.assertThat(entity).isNotNull(); EntityResult entityFound = polarisMetaStoreManager.readEntityByName( - polarisCallContext, + this.polarisCallContext, catalogPath, entity.getType(), entity.getSubType(), @@ -911,7 +912,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD // of the entity it was connected with before being dropped for (PolarisBaseEntity connectedEntity : granteeEntities) { LoadGrantsResult grantResult = - polarisMetaStoreManager.loadGrantsToGrantee(polarisCallContext, connectedEntity); + polarisMetaStoreManager.loadGrantsToGrantee(this.polarisCallContext, connectedEntity); if (grantResult.isSuccess()) { long cnt = grantResult.getGrantRecords().stream() @@ -932,7 +933,7 @@ void dropEntity(List catalogPath, PolarisBaseEntity entityToD } for (PolarisBaseEntity connectedEntity : securableEntities) { LoadGrantsResult grantResult = - polarisMetaStoreManager.loadGrantsOnSecurable(polarisCallContext, connectedEntity); + polarisMetaStoreManager.loadGrantsOnSecurable(this.polarisCallContext, connectedEntity); long cnt = grantResult.getGrantRecords().stream() .filter(gr -> gr.getGranteeId() == entityToDrop.getId()) @@ -950,7 +951,7 @@ public void grantPrivilege( PolarisPrivilege priv) { // grant the privilege polarisMetaStoreManager.grantPrivilegeOnSecurableToRole( - this.callContext.getPolarisCallContext(), role, catalogPath, securable, priv); + this.polarisCallContext, role, catalogPath, securable, priv); // now validate the privilege this.ensureGrantRecordExists(securable, role, priv); @@ -964,7 +965,7 @@ void revokePrivilege( PolarisPrivilege priv) { // grant the privilege polarisMetaStoreManager.revokePrivilegeOnSecurableFromRole( - this.callContext.getPolarisCallContext(), role, catalogPath, securable, priv); + this.polarisCallContext, role, catalogPath, securable, priv); // now validate the privilege this.ensureGrantRecordRemoved(securable, role, priv); @@ -978,7 +979,7 @@ void grantToGrantee( PolarisPrivilege priv) { // grant the privilege polarisMetaStoreManager.grantUsageOnRoleToGrantee( - this.callContext.getPolarisCallContext(), catalog, granted, grantee); + this.polarisCallContext, catalog, granted, grantee); // now validate the privilege this.ensureGrantRecordExists(granted, grantee, priv); @@ -992,7 +993,7 @@ void revokeToGrantee( PolarisPrivilege priv) { // revoked the privilege polarisMetaStoreManager.revokeUsageOnRoleFromGrantee( - this.callContext.getPolarisCallContext(), catalog, granted, grantee); + this.polarisCallContext, catalog, granted, grantee); // now validate that the privilege is gone this.ensureGrantRecordRemoved(granted, grantee, priv); @@ -1014,12 +1015,7 @@ void attachPolicyToTarget( PolicyEntity policy, Map parameters) { polarisMetaStoreManager.attachPolicyToEntity( - this.callContext.getPolarisCallContext(), - targetCatalogPath, - target, - policyCatalogPath, - policy, - parameters); + polarisCallContext, targetCatalogPath, target, policyCatalogPath, policy, parameters); ensurePolicyMappingRecordExists(target, policy, parameters); } @@ -1031,11 +1027,7 @@ void detachPolicyFromTarget( List policyCatalogPath, PolicyEntity policy) { polarisMetaStoreManager.detachPolicyFromEntity( - this.callContext.getPolarisCallContext(), - targetCatalogPath, - target, - policyCatalogPath, - policy); + polarisCallContext, targetCatalogPath, target, policyCatalogPath, policy); ensurePolicyMappingRecordRemoved(target, policy); } @@ -1048,10 +1040,10 @@ void detachPolicyFromTarget( */ void ensurePolicyMappingRecordExists( PolarisBaseEntity target, PolicyEntity policy, Map parameters) { - PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); target = polarisMetaStoreManager - .loadEntity(polarisCallContext, target.getCatalogId(), target.getId(), target.getType()) + .loadEntity( + this.polarisCallContext, target.getCatalogId(), target.getId(), target.getType()) .getEntity(); Assertions.assertThat(target).isNotNull(); @@ -1059,7 +1051,7 @@ void ensurePolicyMappingRecordExists( PolicyEntity.of( polarisMetaStoreManager .loadEntity( - polarisCallContext, + this.polarisCallContext, policy.getCatalogId(), policy.getId(), PolarisEntityType.POLICY) @@ -1067,7 +1059,7 @@ void ensurePolicyMappingRecordExists( Assertions.assertThat(policy).isNotNull(); LoadPolicyMappingsResult loadPolicyMappingsResult = - polarisMetaStoreManager.loadPoliciesOnEntity(polarisCallContext, target); + polarisMetaStoreManager.loadPoliciesOnEntity(this.polarisCallContext, target); validateLoadedPolicyMappings(loadPolicyMappingsResult); @@ -1077,7 +1069,7 @@ void ensurePolicyMappingRecordExists( // also try load by specific type LoadPolicyMappingsResult loadPolicyMappingsResultByType = polarisMetaStoreManager.loadPoliciesOnEntityByType( - polarisCallContext, target, policy.getPolicyType()); + this.polarisCallContext, target, policy.getPolicyType()); validateLoadedPolicyMappings(loadPolicyMappingsResultByType); checkPolicyMappingRecordExists( loadPolicyMappingsResultByType.getPolicyMappingRecords(), target, policy, parameters); @@ -1090,10 +1082,10 @@ void ensurePolicyMappingRecordExists( * @param policy the policy */ void ensurePolicyMappingRecordRemoved(PolarisBaseEntity target, PolicyEntity policy) { - PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); target = polarisMetaStoreManager - .loadEntity(polarisCallContext, target.getCatalogId(), target.getId(), target.getType()) + .loadEntity( + this.polarisCallContext, target.getCatalogId(), target.getId(), target.getType()) .getEntity(); Assertions.assertThat(target).isNotNull(); @@ -1101,7 +1093,7 @@ void ensurePolicyMappingRecordRemoved(PolarisBaseEntity target, PolicyEntity pol PolicyEntity.of( polarisMetaStoreManager .loadEntity( - polarisCallContext, + this.polarisCallContext, policy.getCatalogId(), policy.getId(), PolarisEntityType.POLICY) @@ -1109,7 +1101,7 @@ void ensurePolicyMappingRecordRemoved(PolarisBaseEntity target, PolicyEntity pol Assertions.assertThat(policy).isNotNull(); LoadPolicyMappingsResult loadPolicyMappingsResult = - polarisMetaStoreManager.loadPoliciesOnEntity(polarisCallContext, target); + polarisMetaStoreManager.loadPoliciesOnEntity(this.polarisCallContext, target); validateLoadedPolicyMappings(loadPolicyMappingsResult); @@ -1119,7 +1111,7 @@ void ensurePolicyMappingRecordRemoved(PolarisBaseEntity target, PolicyEntity pol // also try load by specific type LoadPolicyMappingsResult loadPolicyMappingsResultByType = polarisMetaStoreManager.loadPoliciesOnEntityByType( - polarisCallContext, target, policy.getPolicyType()); + this.polarisCallContext, target, policy.getPolicyType()); validateLoadedPolicyMappings(loadPolicyMappingsResultByType); checkPolicyMappingRecordRemoved( loadPolicyMappingsResultByType.getPolicyMappingRecords(), target, policy); @@ -1143,7 +1135,7 @@ void validateLoadedPolicyMappings(LoadPolicyMappingsResult loadPolicyMappingReco PolicyEntity.of( polarisMetaStoreManager .loadEntity( - this.callContext.getPolarisCallContext(), + this.polarisCallContext, policyMappingRecord.getPolicyCatalogId(), policyMappingRecord.getPolicyId(), PolarisEntityType.POLICY) @@ -1266,16 +1258,13 @@ PolarisBaseEntity createTestCatalog(String catalogName) { PolarisBaseEntity catalog = new PolarisBaseEntity( PolarisEntityConstants.getNullId(), - polarisMetaStoreManager - .generateNewEntityId(this.callContext.getPolarisCallContext()) - .getId(), + polarisMetaStoreManager.generateNewEntityId(this.polarisCallContext).getId(), PolarisEntityType.CATALOG, PolarisEntitySubType.NULL_SUBTYPE, PolarisEntityConstants.getRootEntityId(), catalogName); CreateCatalogResult catalogCreated = - polarisMetaStoreManager.createCatalog( - this.callContext.getPolarisCallContext(), catalog, List.of()); + polarisMetaStoreManager.createCatalog(this.polarisCallContext, catalog, List.of()); Assertions.assertThat(catalogCreated).isNotNull(); catalog = catalogCreated.getCatalog(); @@ -1389,7 +1378,7 @@ public PolarisBaseEntity ensureExistsByName( // find by name, ensure we found it EntityResult entityFound = polarisMetaStoreManager.readEntityByName( - this.callContext.getPolarisCallContext(), catalogPath, entityType, entitySubType, name); + this.polarisCallContext, catalogPath, entityType, entitySubType, name); Assertions.assertThat(entityFound).isNotNull(); Assertions.assertThat(entityFound.isSuccess()).isTrue(); @@ -1447,7 +1436,6 @@ public PolarisBaseEntity updateEntity( PolarisBaseEntity entity, String props, String internalProps) { - PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); // ok, remember version and grants_version int version = entity.getEntityVersion(); int grantRecsVersion = entity.getGrantRecordsVersion(); @@ -1464,13 +1452,14 @@ public PolarisBaseEntity updateEntity( // lookup that entity, ensure it exists PolarisBaseEntity beforeUpdateEntity = polarisMetaStoreManager - .loadEntity(polarisCallContext, entity.getCatalogId(), entity.getId(), entity.getType()) + .loadEntity( + this.polarisCallContext, entity.getCatalogId(), entity.getId(), entity.getType()) .getEntity(); // update that property PolarisBaseEntity updatedEntity = polarisMetaStoreManager - .updateEntityPropertiesIfNotChanged(polarisCallContext, catalogPath, entity) + .updateEntityPropertiesIfNotChanged(this.polarisCallContext, catalogPath, entity) .getEntity(); // if version mismatch, nothing should be updated @@ -1482,7 +1471,7 @@ public PolarisBaseEntity updateEntity( entity = polarisMetaStoreManager .loadEntity( - polarisCallContext, entity.getCatalogId(), entity.getId(), entity.getType()) + this.polarisCallContext, entity.getCatalogId(), entity.getId(), entity.getType()) .getEntity(); // ensure nothing has changed @@ -1537,7 +1526,7 @@ public PolarisBaseEntity updateEntity( List versions = polarisMetaStoreManager .loadEntitiesChangeTracking( - polarisCallContext, List.of(new PolarisEntityId(catalogId, entity.getId()))) + this.polarisCallContext, List.of(new PolarisEntityId(catalogId, entity.getId()))) .getChangeTrackingVersions(); Assertions.assertThat(versions).hasSize(1); Assertions.assertThat(versions.get(0).getEntityVersion()) @@ -1571,7 +1560,7 @@ private void validateListReturn( List result = polarisMetaStoreManager .listEntities( - this.callContext.getPolarisCallContext(), + this.polarisCallContext, path, entityType, entitySubType, @@ -1611,7 +1600,6 @@ private void validateListReturn( * @param cacheEntry the cached entity to validate */ private void validateCacheEntryLoad(ResolvedEntityResult cacheEntry) { - PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); // cannot be null Assertions.assertThat(cacheEntry).isNotNull(); @@ -1628,7 +1616,7 @@ private void validateCacheEntryLoad(ResolvedEntityResult cacheEntry) { PolarisEntity refEntity = PolarisEntity.of( this.polarisMetaStoreManager.loadEntity( - polarisCallContext, entity.getCatalogId(), entity.getId(), entity.getType())); + this.polarisCallContext, entity.getCatalogId(), entity.getId(), entity.getType())); Assertions.assertThat(refEntity).isNotNull(); // same entity @@ -1640,7 +1628,7 @@ private void validateCacheEntryLoad(ResolvedEntityResult cacheEntry) { List refGrantRecords = new ArrayList<>(); if (refEntity.getType().isGrantee()) { LoadGrantsResult loadGrantResult = - this.polarisMetaStoreManager.loadGrantsToGrantee(polarisCallContext, refEntity); + this.polarisMetaStoreManager.loadGrantsToGrantee(this.polarisCallContext, refEntity); this.validateLoadedGrants(loadGrantResult, true); // same version @@ -1651,7 +1639,7 @@ private void validateCacheEntryLoad(ResolvedEntityResult cacheEntry) { } LoadGrantsResult loadGrantResult = - this.polarisMetaStoreManager.loadGrantsOnSecurable(polarisCallContext, refEntity); + this.polarisMetaStoreManager.loadGrantsOnSecurable(this.polarisCallContext, refEntity); this.validateLoadedGrants(loadGrantResult, false); // same version @@ -1676,7 +1664,6 @@ private void validateCacheEntryRefresh( PolarisEntityType entityType, int entityVersion, int entityGrantRecordsVersion) { - PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); // cannot be null Assertions.assertThat(cacheEntry).isNotNull(); PolarisBaseEntity entity = cacheEntry.getEntity(); @@ -1685,15 +1672,16 @@ private void validateCacheEntryRefresh( // reload the entity PolarisBaseEntity refEntity = this.polarisMetaStoreManager - .loadEntity(polarisCallContext, catalogId, entityId, entityType) + .loadEntity(this.polarisCallContext, catalogId, entityId, entityType) .getEntity(); Assertions.assertThat(refEntity).isNotNull(); // reload the grants LoadGrantsResult loadGrantResult = refEntity.getType().isGrantee() - ? this.polarisMetaStoreManager.loadGrantsToGrantee(polarisCallContext, refEntity) - : this.polarisMetaStoreManager.loadGrantsOnSecurable(polarisCallContext, refEntity); + ? this.polarisMetaStoreManager.loadGrantsToGrantee(this.polarisCallContext, refEntity) + : this.polarisMetaStoreManager.loadGrantsOnSecurable( + this.polarisCallContext, refEntity); this.validateLoadedGrants(loadGrantResult, refEntity.getType().isGrantee()); Assertions.assertThat(cacheEntry.getGrantRecordsVersion()) .isEqualTo(loadGrantResult.getGrantsVersion()); @@ -1747,11 +1735,7 @@ private PolarisBaseEntity loadCacheEntryByName( // load cached entry ResolvedEntityResult cacheEntry = this.polarisMetaStoreManager.loadResolvedEntityByName( - this.callContext.getPolarisCallContext(), - entityCatalogId, - parentId, - entityType, - entityName); + this.polarisCallContext, entityCatalogId, parentId, entityType, entityName); // if null, validate that indeed the entry does not exist Assertions.assertThat(cacheEntry.isSuccess()).isEqualTo(expectExists); @@ -1797,7 +1781,7 @@ private PolarisBaseEntity loadCacheEntryById( // load cached entry ResolvedEntityResult cacheEntry = this.polarisMetaStoreManager.loadResolvedEntityById( - this.callContext.getPolarisCallContext(), entityCatalogId, entityId, entityType); + this.polarisCallContext, entityCatalogId, entityId, entityType); // if null, validate that indeed the entry does not exist Assertions.assertThat(cacheEntry.isSuccess()).isEqualTo(expectExists); @@ -1845,7 +1829,7 @@ private void refreshCacheEntry( // load cached entry ResolvedEntityResult cacheEntry = this.polarisMetaStoreManager.refreshResolvedEntity( - this.callContext.getPolarisCallContext(), + this.polarisCallContext, entityVersion, entityGrantRecordsVersion, entityType, @@ -1894,7 +1878,7 @@ void validateBootstrap() { List principals = polarisMetaStoreManager .listEntities( - this.callContext.getPolarisCallContext(), + this.polarisCallContext, null, PolarisEntityType.PRINCIPAL, PolarisEntitySubType.NULL_SUBTYPE, @@ -1921,7 +1905,7 @@ void validateBootstrap() { List principalRoles = polarisMetaStoreManager .listEntities( - this.callContext.getPolarisCallContext(), + this.polarisCallContext, null, PolarisEntityType.PRINCIPAL_ROLE, PolarisEntitySubType.NULL_SUBTYPE, @@ -2380,7 +2364,7 @@ void testDropEntities() { // catalog exists EntityResult catalogFound = polarisMetaStoreManager.readEntityByName( - this.callContext.getPolarisCallContext(), + this.polarisCallContext, null, PolarisEntityType.CATALOG, PolarisEntitySubType.NULL_SUBTYPE, @@ -2413,7 +2397,7 @@ void testDropEntities() { // catalog exists? catalogFound = polarisMetaStoreManager.readEntityByName( - this.callContext.getPolarisCallContext(), + this.polarisCallContext, null, PolarisEntityType.CATALOG, PolarisEntitySubType.NULL_SUBTYPE, @@ -2501,8 +2485,7 @@ public void testPrivileges() { grantToGrantee(catalog, R1, PR9000, PolarisPrivilege.CATALOG_ROLE_USAGE); LoadGrantsResult loadGrantsResult = - polarisMetaStoreManager.loadGrantsToGrantee( - this.callContext.getPolarisCallContext(), PR9000); + polarisMetaStoreManager.loadGrantsToGrantee(this.polarisCallContext, PR9000); this.validateLoadedGrants(loadGrantsResult, true); Assertions.assertThat(loadGrantsResult.getGrantRecords()).hasSize(1); Assertions.assertThat(loadGrantsResult.getGrantRecords().get(0).getSecurableCatalogId()) @@ -2510,9 +2493,7 @@ public void testPrivileges() { Assertions.assertThat(loadGrantsResult.getGrantRecords().get(0).getSecurableId()) .isEqualTo(R1.getId()); - loadGrantsResult = - polarisMetaStoreManager.loadGrantsToGrantee( - this.callContext.getPolarisCallContext(), PR900); + loadGrantsResult = polarisMetaStoreManager.loadGrantsToGrantee(this.polarisCallContext, PR900); Assertions.assertThat(loadGrantsResult).isNotNull(); Assertions.assertThat(loadGrantsResult.getGrantRecords()).hasSize(0); } @@ -2530,7 +2511,6 @@ public void renameEntity( PolarisBaseEntity entity, List newCatPath, String newName) { - PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); // save old name String oldName = entity.getName(); @@ -2660,12 +2640,11 @@ public void testRename() { /** Play with looking up entities */ public void testLookup() { - PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); // load all principals List principals = polarisMetaStoreManager .listEntities( - polarisCallContext, + this.polarisCallContext, null, PolarisEntityType.PRINCIPAL, PolarisEntitySubType.NULL_SUBTYPE, @@ -2698,13 +2677,13 @@ public void testLookup() { PolarisBaseEntity catalog = new PolarisBaseEntity( PolarisEntityConstants.getNullId(), - polarisMetaStoreManager.generateNewEntityId(polarisCallContext).getId(), + polarisMetaStoreManager.generateNewEntityId(this.polarisCallContext).getId(), PolarisEntityType.CATALOG, PolarisEntitySubType.NULL_SUBTYPE, PolarisEntityConstants.getRootEntityId(), "test"); CreateCatalogResult catalogCreated = - polarisMetaStoreManager.createCatalog(polarisCallContext, catalog, List.of()); + polarisMetaStoreManager.createCatalog(this.polarisCallContext, catalog, List.of()); Assertions.assertThat(catalogCreated).isNotNull(); catalog = catalogCreated.getCatalog(); @@ -2810,7 +2789,6 @@ public void testEntityCache() { } void testPolicyMapping() { - PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); PolarisBaseEntity catalog = this.createTestCatalog("test"); Assertions.assertThat(catalog).isNotNull(); @@ -2873,7 +2851,6 @@ void testPolicyMapping() { } void testPolicyMappingCleanup() { - PolarisCallContext polarisCallContext = this.callContext.getPolarisCallContext(); PolarisBaseEntity catalog = this.createTestCatalog("test"); Assertions.assertThat(catalog).isNotNull(); diff --git a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogTest.java b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogTest.java index aaaaf93242..2b4c4205c9 100644 --- a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogTest.java +++ b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogTest.java @@ -1533,10 +1533,7 @@ public void testDropTableWithPurge() { .rejects(TABLE); List tasks = metaStoreManager - .loadTasks( - CallContext.of(() -> "testRealm", polarisContext), - "testExecutor", - PageToken.fromLimit(1)) + .loadTasks(polarisContext, "testExecutor", PageToken.fromLimit(1)) .getEntities(); Assertions.assertThat(tasks).hasSize(1); TaskEntity taskEntity = TaskEntity.of(tasks.get(0)); diff --git a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/task/TableCleanupTaskHandlerTest.java b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/task/TableCleanupTaskHandlerTest.java index ae78ad657a..5c968f7e88 100644 --- a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/task/TableCleanupTaskHandlerTest.java +++ b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/task/TableCleanupTaskHandlerTest.java @@ -157,7 +157,7 @@ public void testTableCleanup() throws IOException { assertThat( metaStoreManagerFactory .getOrCreateMetaStoreManager(realmContext) - .loadTasks(callContext, "test", PageToken.fromLimit(2)) + .loadTasks(callContext.getPolarisCallContext(), "test", PageToken.fromLimit(2)) .getEntities()) .hasSize(2) .satisfiesExactlyInAnyOrder( @@ -237,7 +237,7 @@ public void close() { assertThat( metaStoreManagerFactory .getOrCreateMetaStoreManager(realmContext) - .loadTasks(callContext, "test", PageToken.fromLimit(5)) + .loadTasks(callContext.getPolarisCallContext(), "test", PageToken.fromLimit(5)) .getEntities()) .hasSize(2); } @@ -298,7 +298,7 @@ public void close() { assertThat( metaStoreManagerFactory .getOrCreateMetaStoreManager(realmContext) - .loadTasks(callContext, "test", PageToken.fromLimit(5)) + .loadTasks(callContext.getPolarisCallContext(), "test", PageToken.fromLimit(5)) .getEntities()) .hasSize(4) .satisfiesExactlyInAnyOrder( @@ -418,7 +418,7 @@ public void testTableCleanupMultipleSnapshots() throws IOException { List entities = metaStoreManagerFactory .getOrCreateMetaStoreManager(realmContext) - .loadTasks(callContext, "test", PageToken.fromLimit(5)) + .loadTasks(callContext.getPolarisCallContext(), "test", PageToken.fromLimit(5)) .getEntities(); List manifestCleanupTasks = @@ -592,7 +592,7 @@ public void testTableCleanupMultipleMetadata() throws IOException { List entities = metaStoreManagerFactory .getOrCreateMetaStoreManager(callContext.getRealmContext()) - .loadTasks(callContext, "test", PageToken.fromLimit(6)) + .loadTasks(callContext.getPolarisCallContext(), "test", PageToken.fromLimit(6)) .getEntities(); List manifestCleanupTasks = diff --git a/service/common/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java b/service/common/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java index edd19fc964..0303ecb57d 100644 --- a/service/common/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java +++ b/service/common/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java @@ -135,18 +135,11 @@ FileIO loadFileIOInternal( .fileIOFactorySupplier(fileIOFactorySupplier) .build(); - PolarisCallContext polarisCallContext = - new PolarisCallContext( - testServices.metaStoreManagerFactory().getOrCreateSessionSupplier(realmContext).get(), - testServices.polarisDiagnostics(), - testServices.configurationStore(), - Mockito.mock(Clock.class)); - callContext = new CallContext() { @Override public RealmContext getRealmContext() { - return realmContext; + return testServices.realmContext(); } @Override @@ -196,7 +189,7 @@ public void testLoadFileIOForCleanupTask() { testServices .metaStoreManagerFactory() .getOrCreateMetaStoreManager(realmContext) - .loadTasks(callContext, "testExecutor", PageToken.fromLimit(1)) + .loadTasks(callContext.getPolarisCallContext(), "testExecutor", PageToken.fromLimit(1)) .getEntities(); Assertions.assertThat(tasks).hasSize(1); TaskEntity taskEntity = TaskEntity.of(tasks.get(0)); From 0bf5e88de0cf84394426ad3b7d7d2c6f13db5b1c Mon Sep 17 00:00:00 2001 From: Yun Zou Date: Wed, 4 Jun 2025 17:50:10 -0700 Subject: [PATCH 5/6] fix annotation --- .../polaris/service/storage/PolarisConfigurationStoreTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 fa577864bf..1836426193 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 @@ -164,7 +164,8 @@ public void testEntityOverrides() { PolarisConfigurationStore store = new PolarisConfigurationStore() { @Override - public @Nullable T getConfiguration(RealmContext realmContext, String configName) { + public @Nullable T getConfiguration( + @Nonnull RealmContext realmContext, String configName) { //noinspection unchecked return (T) Map.of("key2", "config-value2").get(configName); } From 1179e98f1986dab34290ce52f81928632755dd49 Mon Sep 17 00:00:00 2001 From: Yun Zou Date: Thu, 5 Jun 2025 09:55:52 -0700 Subject: [PATCH 6/6] add testRealmcontext back --- .../storage/PolarisConfigurationStoreTest.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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 1836426193..4b190d3d15 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 @@ -177,9 +177,13 @@ public void testEntityOverrides() { .addProperty("legacy-key4", "entity-legacy4") .build(); - Assertions.assertEquals("test-default1", store.getConfiguration(null, entity, cfg.apply(1))); - Assertions.assertEquals("config-value2", store.getConfiguration(null, entity, cfg.apply(2))); - Assertions.assertEquals("entity-new3", store.getConfiguration(null, entity, cfg.apply(3))); - Assertions.assertEquals("entity-legacy4", store.getConfiguration(null, entity, cfg.apply(4))); + Assertions.assertEquals( + "test-default1", store.getConfiguration(testRealmContext, entity, cfg.apply(1))); + Assertions.assertEquals( + "config-value2", store.getConfiguration(testRealmContext, entity, cfg.apply(2))); + Assertions.assertEquals( + "entity-new3", store.getConfiguration(testRealmContext, entity, cfg.apply(3))); + Assertions.assertEquals( + "entity-legacy4", store.getConfiguration(testRealmContext, entity, cfg.apply(4))); } }