Skip to content

Commit eb13f96

Browse files
committed
Use application-scoped StorageCredentialCache
1 parent c4fb8f5 commit eb13f96

File tree

10 files changed

+33
-177
lines changed

10 files changed

+33
-177
lines changed

persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcMetaStoreManagerFactory.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@
5454
import org.apache.polaris.core.persistence.dao.entity.EntityResult;
5555
import org.apache.polaris.core.persistence.dao.entity.PrincipalSecretsResult;
5656
import org.apache.polaris.core.storage.PolarisStorageIntegrationProvider;
57-
import org.apache.polaris.core.storage.cache.StorageCredentialCache;
5857
import org.slf4j.Logger;
5958
import org.slf4j.LoggerFactory;
6059

@@ -70,7 +69,6 @@ public class JdbcMetaStoreManagerFactory implements MetaStoreManagerFactory {
7069
private static final Logger LOGGER = LoggerFactory.getLogger(JdbcMetaStoreManagerFactory.class);
7170

7271
final Map<String, PolarisMetaStoreManager> metaStoreManagerMap = new HashMap<>();
73-
final Map<String, StorageCredentialCache> storageCredentialCacheMap = new HashMap<>();
7472
final Map<String, EntityCache> entityCacheMap = new HashMap<>();
7573
final Map<String, Supplier<BasePersistence>> sessionSupplierMap = new HashMap<>();
7674
protected final PolarisDiagnostics diagServices = new PolarisDefaultDiagServiceImpl();
@@ -184,7 +182,6 @@ public Map<String, BaseResult> purgeRealms(Iterable<String> realms) {
184182
BaseResult result = metaStoreManager.purge(callContext);
185183
results.put(realm, result);
186184

187-
storageCredentialCacheMap.remove(realm);
188185
sessionSupplierMap.remove(realm);
189186
metaStoreManagerMap.remove(realm);
190187
}
@@ -219,17 +216,6 @@ public synchronized Supplier<BasePersistence> getOrCreateSessionSupplier(
219216
return sessionSupplierMap.get(realmContext.getRealmIdentifier());
220217
}
221218

222-
@Override
223-
public synchronized StorageCredentialCache getOrCreateStorageCredentialCache(
224-
RealmContext realmContext) {
225-
if (!storageCredentialCacheMap.containsKey(realmContext.getRealmIdentifier())) {
226-
storageCredentialCacheMap.put(
227-
realmContext.getRealmIdentifier(), new StorageCredentialCache(configurationStore));
228-
}
229-
230-
return storageCredentialCacheMap.get(realmContext.getRealmIdentifier());
231-
}
232-
233219
@Override
234220
public synchronized EntityCache getOrCreateEntityCache(RealmContext realmContext) {
235221
if (!entityCacheMap.containsKey(realmContext.getRealmIdentifier())) {

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

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
import org.apache.polaris.core.persistence.dao.entity.PrincipalSecretsResult;
4242
import org.apache.polaris.core.persistence.transactional.TransactionalMetaStoreManagerImpl;
4343
import org.apache.polaris.core.persistence.transactional.TransactionalPersistence;
44-
import org.apache.polaris.core.storage.cache.StorageCredentialCache;
4544
import org.slf4j.Logger;
4645
import org.slf4j.LoggerFactory;
4746

@@ -54,7 +53,6 @@ public abstract class LocalPolarisMetaStoreManagerFactory<StoreType>
5453
implements MetaStoreManagerFactory {
5554

5655
final Map<String, PolarisMetaStoreManager> metaStoreManagerMap = new HashMap<>();
57-
final Map<String, StorageCredentialCache> storageCredentialCacheMap = new HashMap<>();
5856
final Map<String, EntityCache> entityCacheMap = new HashMap<>();
5957
final Map<String, StoreType> backingStoreMap = new HashMap<>();
6058
final Map<String, Supplier<TransactionalPersistence>> sessionSupplierMap = new HashMap<>();
@@ -143,7 +141,6 @@ public Map<String, BaseResult> purgeRealms(Iterable<String> realms) {
143141
BaseResult result = metaStoreManager.purge(callContext);
144142
results.put(realm, result);
145143

146-
storageCredentialCacheMap.remove(realm);
147144
backingStoreMap.remove(realm);
148145
sessionSupplierMap.remove(realm);
149146
metaStoreManagerMap.remove(realm);
@@ -177,17 +174,6 @@ public synchronized Supplier<TransactionalPersistence> getOrCreateSessionSupplie
177174
return sessionSupplierMap.get(realmContext.getRealmIdentifier());
178175
}
179176

180-
@Override
181-
public synchronized StorageCredentialCache getOrCreateStorageCredentialCache(
182-
RealmContext realmContext) {
183-
if (!storageCredentialCacheMap.containsKey(realmContext.getRealmIdentifier())) {
184-
storageCredentialCacheMap.put(
185-
realmContext.getRealmIdentifier(), new StorageCredentialCache(configurationStore));
186-
}
187-
188-
return storageCredentialCacheMap.get(realmContext.getRealmIdentifier());
189-
}
190-
191177
@Override
192178
public synchronized EntityCache getOrCreateEntityCache(RealmContext realmContext) {
193179
if (!entityCacheMap.containsKey(realmContext.getRealmIdentifier())) {

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import org.apache.polaris.core.persistence.cache.EntityCache;
2727
import org.apache.polaris.core.persistence.dao.entity.BaseResult;
2828
import org.apache.polaris.core.persistence.dao.entity.PrincipalSecretsResult;
29-
import org.apache.polaris.core.storage.cache.StorageCredentialCache;
3029

3130
/** Configuration interface for configuring the {@link PolarisMetaStoreManager}. */
3231
public interface MetaStoreManagerFactory {
@@ -35,8 +34,6 @@ public interface MetaStoreManagerFactory {
3534

3635
Supplier<? extends BasePersistence> getOrCreateSessionSupplier(RealmContext realmContext);
3736

38-
StorageCredentialCache getOrCreateStorageCredentialCache(RealmContext realmContext);
39-
4037
EntityCache getOrCreateEntityCache(RealmContext realmContext);
4138

4239
Map<String, PrincipalSecretsResult> bootstrapRealms(

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1792,7 +1792,7 @@ public void testSendNotificationSufficientPrivileges() {
17921792

17931793
PolarisCallContextCatalogFactory factory =
17941794
new PolarisCallContextCatalogFactory(
1795-
new RealmEntityManagerFactory(null) {
1795+
new RealmEntityManagerFactory(null, null) {
17961796
@Override
17971797
public PolarisEntityManager getOrCreateEntityManager(RealmContext realmContext) {
17981798
return entityManager;

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

Lines changed: 10 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,8 @@
5252
import java.util.Set;
5353
import java.util.UUID;
5454
import java.util.function.Function;
55-
import java.util.function.Supplier;
5655
import java.util.stream.Collectors;
5756
import java.util.stream.Stream;
58-
import org.apache.commons.lang3.NotImplementedException;
5957
import org.apache.iceberg.BaseTable;
6058
import org.apache.iceberg.CatalogProperties;
6159
import org.apache.iceberg.ContentFile;
@@ -114,13 +112,10 @@
114112
import org.apache.polaris.core.persistence.PolarisEntityManager;
115113
import org.apache.polaris.core.persistence.PolarisMetaStoreManager;
116114
import org.apache.polaris.core.persistence.PolarisResolvedPathWrapper;
117-
import org.apache.polaris.core.persistence.bootstrap.RootCredentialsSet;
118115
import org.apache.polaris.core.persistence.cache.InMemoryEntityCache;
119116
import org.apache.polaris.core.persistence.dao.entity.BaseResult;
120117
import org.apache.polaris.core.persistence.dao.entity.EntityResult;
121-
import org.apache.polaris.core.persistence.dao.entity.PrincipalSecretsResult;
122118
import org.apache.polaris.core.persistence.pagination.PageToken;
123-
import org.apache.polaris.core.persistence.transactional.TransactionalPersistence;
124119
import org.apache.polaris.core.secrets.UserSecretsManager;
125120
import org.apache.polaris.core.secrets.UserSecretsManagerFactory;
126121
import org.apache.polaris.core.storage.PolarisStorageActions;
@@ -252,6 +247,7 @@ public Map<String, String> getConfigOverrides() {
252247
private UserSecretsManager userSecretsManager;
253248
private PolarisCallContext polarisContext;
254249
private PolarisAdminService adminService;
250+
private StorageCredentialCache storageCredentialCache;
255251
private PolarisEntityManager entityManager;
256252
private FileIOFactory fileIOFactory;
257253
private InMemoryFileIO fileIO;
@@ -294,11 +290,11 @@ public void before(TestInfo testInfo) {
294290
configurationStore,
295291
Clock.systemDefaultZone());
296292

293+
storageCredentialCache = new StorageCredentialCache(configurationStore);
294+
297295
entityManager =
298296
new PolarisEntityManager(
299-
metaStoreManager,
300-
new StorageCredentialCache(configurationStore),
301-
createEntityCache(metaStoreManager));
297+
metaStoreManager, storageCredentialCache, createEntityCache(metaStoreManager));
302298

303299
PrincipalEntity rootEntity =
304300
new PrincipalEntity(
@@ -360,7 +356,7 @@ public void before(TestInfo testInfo) {
360356
.asCatalog()));
361357

362358
RealmEntityManagerFactory realmEntityManagerFactory =
363-
new RealmEntityManagerFactory(createMockMetaStoreManagerFactory());
359+
new RealmEntityManagerFactory(managerFactory, storageCredentialCache);
364360
this.fileIOFactory =
365361
new DefaultFileIOFactory(realmEntityManagerFactory, managerFactory, configurationStore);
366362

@@ -450,42 +446,6 @@ protected boolean supportsNotifications() {
450446
return true;
451447
}
452448

453-
private MetaStoreManagerFactory createMockMetaStoreManagerFactory() {
454-
return new MetaStoreManagerFactory() {
455-
@Override
456-
public PolarisMetaStoreManager getOrCreateMetaStoreManager(RealmContext realmContext) {
457-
return metaStoreManager;
458-
}
459-
460-
@Override
461-
public Supplier<TransactionalPersistence> getOrCreateSessionSupplier(
462-
RealmContext realmContext) {
463-
return () -> ((TransactionalPersistence) polarisContext.getMetaStore());
464-
}
465-
466-
@Override
467-
public StorageCredentialCache getOrCreateStorageCredentialCache(RealmContext realmContext) {
468-
return new StorageCredentialCache(configurationStore);
469-
}
470-
471-
@Override
472-
public InMemoryEntityCache getOrCreateEntityCache(RealmContext realmContext) {
473-
return new InMemoryEntityCache(realmContext, configurationStore, metaStoreManager);
474-
}
475-
476-
@Override
477-
public Map<String, PrincipalSecretsResult> bootstrapRealms(
478-
Iterable<String> realms, RootCredentialsSet rootCredentialsSet) {
479-
throw new NotImplementedException("Bootstrapping realms is not supported");
480-
}
481-
482-
@Override
483-
public Map<String, BaseResult> purgeRealms(Iterable<String> realms) {
484-
throw new NotImplementedException("Purging realms is not supported");
485-
}
486-
};
487-
}
488-
489449
@Test
490450
public void testEmptyNamespace() {
491451
IcebergCatalog catalog = catalog();
@@ -1030,7 +990,7 @@ public void testValidateNotificationFailToCreateFileIO() {
1030990
FileIOFactory fileIOFactory =
1031991
spy(
1032992
new DefaultFileIOFactory(
1033-
new RealmEntityManagerFactory(createMockMetaStoreManagerFactory()),
993+
new RealmEntityManagerFactory(managerFactory, storageCredentialCache),
1034994
managerFactory,
1035995
configurationStore));
1036996
IcebergCatalog catalog =
@@ -1922,12 +1882,11 @@ public void testDropTableWithPurge() {
19221882
.containsEntry(StorageAccessProperty.AWS_KEY_ID, TEST_ACCESS_KEY)
19231883
.containsEntry(StorageAccessProperty.AWS_SECRET_KEY, SECRET_ACCESS_KEY)
19241884
.containsEntry(StorageAccessProperty.AWS_TOKEN, SESSION_TOKEN);
1925-
MetaStoreManagerFactory metaStoreManagerFactory = createMockMetaStoreManagerFactory();
19261885
FileIO fileIO =
19271886
new TaskFileIOSupplier(
19281887
new DefaultFileIOFactory(
1929-
new RealmEntityManagerFactory(metaStoreManagerFactory),
1930-
metaStoreManagerFactory,
1888+
new RealmEntityManagerFactory(managerFactory, storageCredentialCache),
1889+
managerFactory,
19311890
configurationStore))
19321891
.apply(taskEntity, polarisContext);
19331892
Assertions.assertThat(fileIO).isNotNull().isInstanceOf(ExceptionMappingFileIO.class);
@@ -2071,7 +2030,7 @@ public void testFileIOWrapper() {
20712030

20722031
MeasuredFileIOFactory measured =
20732032
new MeasuredFileIOFactory(
2074-
new RealmEntityManagerFactory(createMockMetaStoreManagerFactory()),
2033+
new RealmEntityManagerFactory(managerFactory, storageCredentialCache),
20752034
managerFactory,
20762035
configurationStore);
20772036
IcebergCatalog catalog =
@@ -2144,8 +2103,7 @@ public FileIO loadFileIO(
21442103
});
21452104

21462105
TableCleanupTaskHandler handler =
2147-
new TableCleanupTaskHandler(
2148-
Mockito.mock(), createMockMetaStoreManagerFactory(), taskFileIOSupplier);
2106+
new TableCleanupTaskHandler(Mockito.mock(), managerFactory, taskFileIOSupplier);
21492107
handler.handleTask(taskEntity, polarisContext);
21502108
Assertions.assertThat(measured.getNumDeletedFiles()).as("A table was deleted").isGreaterThan(0);
21512109
}

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,10 +176,11 @@ public void before(TestInfo testInfo) {
176176
configurationStore,
177177
Clock.systemDefaultZone());
178178

179+
StorageCredentialCache storageCredentialCache = new StorageCredentialCache(configurationStore);
179180
PolarisEntityManager entityManager =
180181
new PolarisEntityManager(
181182
metaStoreManager,
182-
new StorageCredentialCache(configurationStore),
183+
storageCredentialCache,
183184
new InMemoryEntityCache(realmContext, configurationStore, metaStoreManager));
184185

185186
CallContext.setCurrentContext(polarisContext);
@@ -236,7 +237,9 @@ public void before(TestInfo testInfo) {
236237
polarisContext, entityManager, securityContext, CATALOG_NAME);
237238
FileIOFactory fileIOFactory =
238239
new DefaultFileIOFactory(
239-
new RealmEntityManagerFactory(managerFactory), managerFactory, configurationStore);
240+
new RealmEntityManagerFactory(managerFactory, storageCredentialCache),
241+
managerFactory,
242+
configurationStore);
240243

241244
testPolarisEventListener = (TestPolarisEventListener) polarisEventListener;
242245
this.catalog =

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

Lines changed: 3 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@
3535
import java.util.List;
3636
import java.util.Map;
3737
import java.util.Set;
38-
import java.util.function.Supplier;
39-
import org.apache.commons.lang3.NotImplementedException;
4038
import org.apache.iceberg.CatalogProperties;
4139
import org.apache.iceberg.Schema;
4240
import org.apache.iceberg.catalog.Namespace;
@@ -61,11 +59,7 @@
6159
import org.apache.polaris.core.persistence.MetaStoreManagerFactory;
6260
import org.apache.polaris.core.persistence.PolarisEntityManager;
6361
import org.apache.polaris.core.persistence.PolarisMetaStoreManager;
64-
import org.apache.polaris.core.persistence.bootstrap.RootCredentialsSet;
6562
import org.apache.polaris.core.persistence.cache.InMemoryEntityCache;
66-
import org.apache.polaris.core.persistence.dao.entity.BaseResult;
67-
import org.apache.polaris.core.persistence.dao.entity.PrincipalSecretsResult;
68-
import org.apache.polaris.core.persistence.transactional.TransactionalPersistence;
6963
import org.apache.polaris.core.secrets.UserSecretsManager;
7064
import org.apache.polaris.core.secrets.UserSecretsManagerFactory;
7165
import org.apache.polaris.core.storage.PolarisStorageIntegration;
@@ -174,10 +168,11 @@ public void before(TestInfo testInfo) {
174168
diagServices,
175169
configurationStore,
176170
Clock.systemDefaultZone());
171+
StorageCredentialCache storageCredentialCache = new StorageCredentialCache(configurationStore);
177172
entityManager =
178173
new PolarisEntityManager(
179174
metaStoreManager,
180-
new StorageCredentialCache(configurationStore),
175+
storageCredentialCache,
181176
new InMemoryEntityCache(realmContext, configurationStore, metaStoreManager));
182177

183178
PrincipalEntity rootEntity =
@@ -243,7 +238,7 @@ public void before(TestInfo testInfo) {
243238
polarisContext, entityManager, securityContext, CATALOG_NAME);
244239
TaskExecutor taskExecutor = Mockito.mock();
245240
RealmEntityManagerFactory realmEntityManagerFactory =
246-
new RealmEntityManagerFactory(createMockMetaStoreManagerFactory());
241+
new RealmEntityManagerFactory(managerFactory, storageCredentialCache);
247242
this.fileIOFactory =
248243
new DefaultFileIOFactory(realmEntityManagerFactory, managerFactory, configurationStore);
249244

@@ -288,42 +283,6 @@ public void after() throws IOException {
288283
metaStoreManager.purge(polarisContext);
289284
}
290285

291-
private MetaStoreManagerFactory createMockMetaStoreManagerFactory() {
292-
return new MetaStoreManagerFactory() {
293-
@Override
294-
public PolarisMetaStoreManager getOrCreateMetaStoreManager(RealmContext realmContext) {
295-
return metaStoreManager;
296-
}
297-
298-
@Override
299-
public Supplier<TransactionalPersistence> getOrCreateSessionSupplier(
300-
RealmContext realmContext) {
301-
return () -> ((TransactionalPersistence) polarisContext.getMetaStore());
302-
}
303-
304-
@Override
305-
public StorageCredentialCache getOrCreateStorageCredentialCache(RealmContext realmContext) {
306-
return new StorageCredentialCache(configurationStore);
307-
}
308-
309-
@Override
310-
public InMemoryEntityCache getOrCreateEntityCache(RealmContext realmContext) {
311-
return new InMemoryEntityCache(realmContext, configurationStore, metaStoreManager);
312-
}
313-
314-
@Override
315-
public Map<String, PrincipalSecretsResult> bootstrapRealms(
316-
Iterable<String> realms, RootCredentialsSet rootCredentialsSet) {
317-
throw new NotImplementedException("Bootstrapping realms is not supported");
318-
}
319-
320-
@Override
321-
public Map<String, BaseResult> purgeRealms(Iterable<String> realms) {
322-
throw new NotImplementedException("Purging realms is not supported");
323-
}
324-
};
325-
}
326-
327286
@Test
328287
public void testCreateGenericTableDoesNotThrow() {
329288
Namespace namespace = Namespace.of("ns");

0 commit comments

Comments
 (0)