Skip to content

Commit 886d111

Browse files
authored
Remove PolarisEntityManager.getCredentialCache (#2133)
`PolarisEntityManager` itself is not using the `StorageCredentialCache` but just hands it out via `getCredentialCache`. the only caller of `getCredentialCache` is `FileIOUtil.refreshAccessConfig`, which in in turn is only called by `DefaultFileIOFactory` and `IcebergCatalog`. note that in a follow-up we will likely be able to remove `PolarisEntityManager` usage completely from `IcebergCatalog`. additional cleanups: - use `StorageCredentialCache` injection in tests (but we need to invalidate all entries on test start) - remove unused `UserSecretsManagerFactory` from `PolarisCallContextCatalogFactory`
1 parent 3316f4e commit 886d111

File tree

18 files changed

+98
-129
lines changed

18 files changed

+98
-129
lines changed

polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisEntityManager.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import org.apache.polaris.core.persistence.cache.EntityCache;
3333
import org.apache.polaris.core.persistence.resolver.PolarisResolutionManifest;
3434
import org.apache.polaris.core.persistence.resolver.Resolver;
35-
import org.apache.polaris.core.storage.cache.StorageCredentialCache;
3635

3736
/**
3837
* Wraps logic of handling name-caching and entity-caching against a concrete underlying entity
@@ -43,22 +42,16 @@ public class PolarisEntityManager {
4342
private final PolarisMetaStoreManager metaStoreManager;
4443
private final EntityCache entityCache;
4544

46-
private final StorageCredentialCache credentialCache;
47-
4845
// Lazily instantiated only a single time per entity manager.
4946
private ResolvedPolarisEntity implicitResolvedRootContainerEntity = null;
5047

5148
/**
5249
* @param metaStoreManager the metastore manager for the current realm
53-
* @param credentialCache the storage credential cache for the current realm
5450
* @param entityCache the entity cache to use (it may be {@code null}).
5551
*/
5652
public PolarisEntityManager(
57-
@Nonnull PolarisMetaStoreManager metaStoreManager,
58-
@Nonnull StorageCredentialCache credentialCache,
59-
@Nullable EntityCache entityCache) {
53+
@Nonnull PolarisMetaStoreManager metaStoreManager, @Nullable EntityCache entityCache) {
6054
this.metaStoreManager = metaStoreManager;
61-
this.credentialCache = credentialCache;
6255
this.entityCache = entityCache;
6356
}
6457

@@ -133,8 +126,4 @@ private synchronized ResolvedPolarisEntity getSimulatedResolvedRootContainerEnti
133126
}
134127
return implicitResolvedRootContainerEntity;
135128
}
136-
137-
public StorageCredentialCache getCredentialCache() {
138-
return credentialCache;
139-
}
140129
}

polaris-core/src/main/java/org/apache/polaris/core/storage/cache/StorageCredentialCache.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,4 +169,9 @@ private boolean isTypeSupported(PolarisEntityType type) {
169169
public long getEstimatedSize() {
170170
return this.cache.estimatedSize();
171171
}
172+
173+
@VisibleForTesting
174+
public void invalidateAll() {
175+
this.cache.invalidateAll();
176+
}
172177
}

runtime/service/src/test/java/org/apache/polaris/service/quarkus/admin/PolarisAuthzTestBase.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
import org.apache.polaris.core.policy.PredefinedPolicyTypes;
7676
import org.apache.polaris.core.secrets.UserSecretsManager;
7777
import org.apache.polaris.core.secrets.UserSecretsManagerFactory;
78+
import org.apache.polaris.core.storage.cache.StorageCredentialCache;
7879
import org.apache.polaris.service.admin.PolarisAdminService;
7980
import org.apache.polaris.service.catalog.PolarisPassthroughResolutionView;
8081
import org.apache.polaris.service.catalog.generic.PolarisGenericTableCatalog;
@@ -191,6 +192,7 @@ public Map<String, String> getConfigOverrides() {
191192
@Inject protected PolarisEventListener polarisEventListener;
192193
@Inject protected CatalogHandlerUtils catalogHandlerUtils;
193194
@Inject protected PolarisConfigurationStore configurationStore;
195+
@Inject protected StorageCredentialCache storageCredentialCache;
194196

195197
protected IcebergCatalog baseCatalog;
196198
protected PolarisGenericTableCatalog genericTableCatalog;
@@ -220,6 +222,8 @@ public static void setUpMocks() {
220222

221223
@BeforeEach
222224
public void before(TestInfo testInfo) {
225+
storageCredentialCache.invalidateAll();
226+
223227
RealmContext realmContext = testInfo::getDisplayName;
224228
QuarkusMock.installMockForType(realmContext, RealmContext.class);
225229
metaStoreManager = managerFactory.getOrCreateMetaStoreManager(realmContext);
@@ -463,6 +467,7 @@ private void initBaseCatalog() {
463467
callContext, entityManager, securityContext, CATALOG_NAME);
464468
this.baseCatalog =
465469
new IcebergCatalog(
470+
storageCredentialCache,
466471
entityManager,
467472
metaStoreManager,
468473
callContext,
@@ -492,16 +497,16 @@ public TestPolarisCallContextCatalogFactory() {
492497

493498
@Inject
494499
public TestPolarisCallContextCatalogFactory(
500+
StorageCredentialCache storageCredentialCache,
495501
RealmEntityManagerFactory entityManagerFactory,
496502
MetaStoreManagerFactory metaStoreManagerFactory,
497-
UserSecretsManagerFactory userSecretsManagerFactory,
498503
TaskExecutor taskExecutor,
499504
FileIOFactory fileIOFactory,
500505
PolarisEventListener polarisEventListener) {
501506
super(
507+
storageCredentialCache,
502508
entityManagerFactory,
503509
metaStoreManagerFactory,
504-
userSecretsManagerFactory,
505510
taskExecutor,
506511
fileIOFactory,
507512
polarisEventListener);

runtime/service/src/test/java/org/apache/polaris/service/quarkus/admin/PolarisS3InteroperabilityTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ private static String makeTableLocation(
7373

7474
public PolarisS3InteroperabilityTest() {
7575
TestServices.FileIOFactorySupplier fileIOFactorySupplier =
76-
(entityManagerFactory, metaStoreManagerFactory) ->
76+
(storageCredentialCache, metaStoreManagerFactory) ->
7777
(FileIOFactory)
7878
(callContext,
7979
ioImplClassName,

runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractIcebergCatalogTest.java

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,6 @@
125125
import org.apache.polaris.core.storage.aws.AwsCredentialsStorageIntegration;
126126
import org.apache.polaris.core.storage.aws.AwsStorageConfigurationInfo;
127127
import org.apache.polaris.core.storage.cache.StorageCredentialCache;
128-
import org.apache.polaris.core.storage.cache.StorageCredentialCacheConfig;
129128
import org.apache.polaris.service.admin.PolarisAdminService;
130129
import org.apache.polaris.service.catalog.PolarisPassthroughResolutionView;
131130
import org.apache.polaris.service.catalog.iceberg.CatalogHandlerUtils;
@@ -134,7 +133,6 @@
134133
import org.apache.polaris.service.catalog.io.ExceptionMappingFileIO;
135134
import org.apache.polaris.service.catalog.io.FileIOFactory;
136135
import org.apache.polaris.service.catalog.io.MeasuredFileIOFactory;
137-
import org.apache.polaris.service.config.RealmEntityManagerFactory;
138136
import org.apache.polaris.service.config.ReservedProperties;
139137
import org.apache.polaris.service.events.AfterTableCommitedEvent;
140138
import org.apache.polaris.service.events.AfterTableRefreshedEvent;
@@ -225,7 +223,7 @@ public Map<String, String> getConfigOverrides() {
225223

226224
@Inject MetaStoreManagerFactory metaStoreManagerFactory;
227225
@Inject PolarisConfigurationStore configurationStore;
228-
@Inject StorageCredentialCacheConfig storageCredentialCacheConfig;
226+
@Inject StorageCredentialCache storageCredentialCache;
229227
@Inject PolarisStorageIntegrationProvider storageIntegrationProvider;
230228
@Inject UserSecretsManagerFactory userSecretsManagerFactory;
231229
@Inject PolarisDiagnostics diagServices;
@@ -237,8 +235,6 @@ public Map<String, String> getConfigOverrides() {
237235
private UserSecretsManager userSecretsManager;
238236
private PolarisCallContext polarisContext;
239237
private PolarisAdminService adminService;
240-
private StorageCredentialCache storageCredentialCache;
241-
private RealmEntityManagerFactory realmEntityManagerFactory;
242238
private PolarisEntityManager entityManager;
243239
private FileIOFactory fileIOFactory;
244240
private InMemoryFileIO fileIO;
@@ -263,6 +259,8 @@ protected void bootstrapRealm(String realmName) {}
263259
@BeforeEach
264260
@SuppressWarnings("unchecked")
265261
public void before(TestInfo testInfo) {
262+
storageCredentialCache.invalidateAll();
263+
266264
realmName =
267265
"realm_%s_%s"
268266
.formatted(
@@ -281,13 +279,8 @@ public void before(TestInfo testInfo) {
281279
configurationStore,
282280
Clock.systemDefaultZone());
283281

284-
storageCredentialCache = new StorageCredentialCache(storageCredentialCacheConfig);
285-
286-
entityManager =
287-
new PolarisEntityManager(
288-
metaStoreManager,
289-
storageCredentialCache,
290-
createEntityCache(polarisContext.getRealmConfig(), metaStoreManager));
282+
EntityCache entityCache = createEntityCache(polarisContext.getRealmConfig(), metaStoreManager);
283+
entityManager = new PolarisEntityManager(metaStoreManager, entityCache);
291284

292285
// LocalPolarisMetaStoreManagerFactory.bootstrapServiceAndCreatePolarisPrincipalForRealm sets
293286
// the CallContext.setCurrentContext() but never clears it, whereas the NoSQL one resets it.
@@ -352,11 +345,7 @@ public void before(TestInfo testInfo) {
352345
.build()
353346
.asCatalog()));
354347

355-
realmEntityManagerFactory =
356-
new RealmEntityManagerFactory(
357-
metaStoreManagerFactory, configurationStore, storageCredentialCache);
358-
this.fileIOFactory =
359-
new DefaultFileIOFactory(realmEntityManagerFactory, metaStoreManagerFactory);
348+
this.fileIOFactory = new DefaultFileIOFactory(storageCredentialCache, metaStoreManagerFactory);
360349

361350
StsClient stsClient = Mockito.mock(StsClient.class);
362351
when(stsClient.assumeRole(isA(AssumeRoleRequest.class)))
@@ -447,6 +436,7 @@ protected IcebergCatalog newIcebergCatalog(
447436
polarisContext, entityManager, securityContext, catalogName);
448437
TaskExecutor taskExecutor = Mockito.mock(TaskExecutor.class);
449438
return new IcebergCatalog(
439+
storageCredentialCache,
450440
entityManager,
451441
metaStoreManager,
452442
polarisContext,
@@ -996,7 +986,7 @@ public void testValidateNotificationFailToCreateFileIO() {
996986
final String tableLocation = "s3://externally-owned-bucket/validate_table/";
997987
final String tableMetadataLocation = tableLocation + "metadata/";
998988
FileIOFactory fileIOFactory =
999-
spy(new DefaultFileIOFactory(realmEntityManagerFactory, metaStoreManagerFactory));
989+
spy(new DefaultFileIOFactory(storageCredentialCache, metaStoreManagerFactory));
1000990
IcebergCatalog catalog = newIcebergCatalog(catalog().name(), metaStoreManager, fileIOFactory);
1001991
catalog.initialize(
1002992
CATALOG_NAME,
@@ -1849,7 +1839,7 @@ public void testDropTableWithPurge() {
18491839
.containsEntry(StorageAccessProperty.AWS_TOKEN, SESSION_TOKEN);
18501840
FileIO fileIO =
18511841
new TaskFileIOSupplier(
1852-
new DefaultFileIOFactory(realmEntityManagerFactory, metaStoreManagerFactory))
1842+
new DefaultFileIOFactory(storageCredentialCache, metaStoreManagerFactory))
18531843
.apply(taskEntity, polarisContext);
18541844
Assertions.assertThat(fileIO).isNotNull().isInstanceOf(ExceptionMappingFileIO.class);
18551845
Assertions.assertThat(((ExceptionMappingFileIO) fileIO).getInnerIo())
@@ -1976,7 +1966,7 @@ static Stream<Arguments> testRetriableException() {
19761966
@Test
19771967
public void testFileIOWrapper() {
19781968
MeasuredFileIOFactory measured =
1979-
new MeasuredFileIOFactory(realmEntityManagerFactory, metaStoreManagerFactory);
1969+
new MeasuredFileIOFactory(storageCredentialCache, metaStoreManagerFactory);
19801970
IcebergCatalog catalog = newIcebergCatalog(CATALOG_NAME, metaStoreManager, measured);
19811971
catalog.initialize(
19821972
CATALOG_NAME,

runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractIcebergCatalogViewTest.java

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,15 @@
5555
import org.apache.polaris.core.persistence.MetaStoreManagerFactory;
5656
import org.apache.polaris.core.persistence.PolarisEntityManager;
5757
import org.apache.polaris.core.persistence.PolarisMetaStoreManager;
58+
import org.apache.polaris.core.persistence.cache.EntityCache;
5859
import org.apache.polaris.core.secrets.UserSecretsManager;
5960
import org.apache.polaris.core.secrets.UserSecretsManagerFactory;
6061
import org.apache.polaris.core.storage.cache.StorageCredentialCache;
61-
import org.apache.polaris.core.storage.cache.StorageCredentialCacheConfig;
6262
import org.apache.polaris.service.admin.PolarisAdminService;
6363
import org.apache.polaris.service.catalog.PolarisPassthroughResolutionView;
6464
import org.apache.polaris.service.catalog.iceberg.IcebergCatalog;
6565
import org.apache.polaris.service.catalog.io.DefaultFileIOFactory;
6666
import org.apache.polaris.service.catalog.io.FileIOFactory;
67-
import org.apache.polaris.service.config.RealmEntityManagerFactory;
6867
import org.apache.polaris.service.config.ReservedProperties;
6968
import org.apache.polaris.service.events.AfterViewCommitedEvent;
7069
import org.apache.polaris.service.events.AfterViewRefreshedEvent;
@@ -115,7 +114,7 @@ public Map<String, String> getConfigOverrides() {
115114
@Inject MetaStoreManagerFactory metaStoreManagerFactory;
116115
@Inject UserSecretsManagerFactory userSecretsManagerFactory;
117116
@Inject PolarisConfigurationStore configurationStore;
118-
@Inject StorageCredentialCacheConfig storageCredentialCacheConfig;
117+
@Inject StorageCredentialCache storageCredentialCache;
119118
@Inject PolarisDiagnostics diagServices;
120119
@Inject PolarisEventListener polarisEventListener;
121120

@@ -147,6 +146,8 @@ protected void bootstrapRealm(String realmName) {}
147146

148147
@BeforeEach
149148
public void before(TestInfo testInfo) {
149+
storageCredentialCache.invalidateAll();
150+
150151
realmName =
151152
"realm_%s_%s"
152153
.formatted(
@@ -165,14 +166,10 @@ public void before(TestInfo testInfo) {
165166
configurationStore,
166167
Clock.systemDefaultZone());
167168

168-
StorageCredentialCache storageCredentialCache =
169-
new StorageCredentialCache(storageCredentialCacheConfig);
170-
PolarisEntityManager entityManager =
171-
new PolarisEntityManager(
172-
metaStoreManager,
173-
storageCredentialCache,
174-
metaStoreManagerFactory.getOrCreateEntityCache(
175-
polarisContext.getRealmContext(), polarisContext.getRealmConfig()));
169+
EntityCache entityCache =
170+
metaStoreManagerFactory.getOrCreateEntityCache(
171+
polarisContext.getRealmContext(), polarisContext.getRealmConfig());
172+
PolarisEntityManager entityManager = new PolarisEntityManager(metaStoreManager, entityCache);
176173

177174
CallContext.setCurrentContext(polarisContext);
178175

@@ -226,15 +223,13 @@ public void before(TestInfo testInfo) {
226223
PolarisPassthroughResolutionView passthroughView =
227224
new PolarisPassthroughResolutionView(
228225
polarisContext, entityManager, securityContext, CATALOG_NAME);
229-
RealmEntityManagerFactory realmEntityManagerFactory =
230-
new RealmEntityManagerFactory(
231-
metaStoreManagerFactory, configurationStore, storageCredentialCache);
232226
FileIOFactory fileIOFactory =
233-
new DefaultFileIOFactory(realmEntityManagerFactory, metaStoreManagerFactory);
227+
new DefaultFileIOFactory(storageCredentialCache, metaStoreManagerFactory);
234228

235229
testPolarisEventListener = (TestPolarisEventListener) polarisEventListener;
236230
this.catalog =
237231
new IcebergCatalog(
232+
storageCredentialCache,
238233
entityManager,
239234
metaStoreManager,
240235
polarisContext,

runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractPolarisGenericTableCatalogTest.java

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -56,21 +56,20 @@
5656
import org.apache.polaris.core.persistence.MetaStoreManagerFactory;
5757
import org.apache.polaris.core.persistence.PolarisEntityManager;
5858
import org.apache.polaris.core.persistence.PolarisMetaStoreManager;
59+
import org.apache.polaris.core.persistence.cache.EntityCache;
5960
import org.apache.polaris.core.secrets.UserSecretsManager;
6061
import org.apache.polaris.core.secrets.UserSecretsManagerFactory;
6162
import org.apache.polaris.core.storage.PolarisStorageIntegration;
6263
import org.apache.polaris.core.storage.PolarisStorageIntegrationProvider;
6364
import org.apache.polaris.core.storage.aws.AwsCredentialsStorageIntegration;
6465
import org.apache.polaris.core.storage.aws.AwsStorageConfigurationInfo;
6566
import org.apache.polaris.core.storage.cache.StorageCredentialCache;
66-
import org.apache.polaris.core.storage.cache.StorageCredentialCacheConfig;
6767
import org.apache.polaris.service.admin.PolarisAdminService;
6868
import org.apache.polaris.service.catalog.PolarisPassthroughResolutionView;
6969
import org.apache.polaris.service.catalog.generic.PolarisGenericTableCatalog;
7070
import org.apache.polaris.service.catalog.iceberg.IcebergCatalog;
7171
import org.apache.polaris.service.catalog.io.DefaultFileIOFactory;
7272
import org.apache.polaris.service.catalog.io.FileIOFactory;
73-
import org.apache.polaris.service.config.RealmEntityManagerFactory;
7473
import org.apache.polaris.service.config.ReservedProperties;
7574
import org.apache.polaris.service.events.NoOpPolarisEventListener;
7675
import org.apache.polaris.service.storage.PolarisStorageIntegrationProviderImpl;
@@ -102,7 +101,7 @@ public abstract class AbstractPolarisGenericTableCatalogTest {
102101
@Inject MetaStoreManagerFactory metaStoreManagerFactory;
103102
@Inject UserSecretsManagerFactory userSecretsManagerFactory;
104103
@Inject PolarisConfigurationStore configurationStore;
105-
@Inject StorageCredentialCacheConfig storageCredentialCacheConfig;
104+
@Inject StorageCredentialCache storageCredentialCache;
106105
@Inject PolarisStorageIntegrationProvider storageIntegrationProvider;
107106
@Inject PolarisDiagnostics diagServices;
108107

@@ -138,6 +137,8 @@ protected void bootstrapRealm(String realmName) {}
138137
@BeforeEach
139138
@SuppressWarnings("unchecked")
140139
public void before(TestInfo testInfo) {
140+
storageCredentialCache.invalidateAll();
141+
141142
realmName =
142143
"realm_%s_%s"
143144
.formatted(
@@ -155,14 +156,11 @@ public void before(TestInfo testInfo) {
155156
diagServices,
156157
configurationStore,
157158
Clock.systemDefaultZone());
158-
StorageCredentialCache storageCredentialCache =
159-
new StorageCredentialCache(storageCredentialCacheConfig);
160-
entityManager =
161-
new PolarisEntityManager(
162-
metaStoreManager,
163-
storageCredentialCache,
164-
metaStoreManagerFactory.getOrCreateEntityCache(
165-
realmContext, polarisContext.getRealmConfig()));
159+
160+
EntityCache entityCache =
161+
metaStoreManagerFactory.getOrCreateEntityCache(
162+
realmContext, polarisContext.getRealmConfig());
163+
entityManager = new PolarisEntityManager(metaStoreManager, entityCache);
166164

167165
PrincipalEntity rootEntity =
168166
new PrincipalEntity(
@@ -226,11 +224,7 @@ public void before(TestInfo testInfo) {
226224
new PolarisPassthroughResolutionView(
227225
polarisContext, entityManager, securityContext, CATALOG_NAME);
228226
TaskExecutor taskExecutor = Mockito.mock();
229-
RealmEntityManagerFactory realmEntityManagerFactory =
230-
new RealmEntityManagerFactory(
231-
metaStoreManagerFactory, configurationStore, storageCredentialCache);
232-
this.fileIOFactory =
233-
new DefaultFileIOFactory(realmEntityManagerFactory, metaStoreManagerFactory);
227+
this.fileIOFactory = new DefaultFileIOFactory(storageCredentialCache, metaStoreManagerFactory);
234228

235229
StsClient stsClient = Mockito.mock(StsClient.class);
236230
when(stsClient.assumeRole(isA(AssumeRoleRequest.class)))
@@ -254,6 +248,7 @@ public void before(TestInfo testInfo) {
254248
this.genericTableCatalog.initialize(CATALOG_NAME, Map.of());
255249
this.icebergCatalog =
256250
new IcebergCatalog(
251+
storageCredentialCache,
257252
entityManager,
258253
metaStoreManager,
259254
polarisContext,

0 commit comments

Comments
 (0)