Skip to content

Commit 23c1d4e

Browse files
committed
review: add StorageCredentialCacheConfig
1 parent 2650f6e commit 23c1d4e

File tree

10 files changed

+89
-14
lines changed

10 files changed

+89
-14
lines changed

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,17 +47,16 @@ public class StorageCredentialCache {
4747

4848
private static final Logger LOGGER = LoggerFactory.getLogger(StorageCredentialCache.class);
4949

50-
private static final long CACHE_MAX_NUMBER_OF_ENTRIES = 10_000L;
51-
5250
private final LoadingCache<StorageCredentialCacheKey, StorageCredentialCacheEntry> cache;
5351
private final PolarisConfigurationStore configurationStore;
5452

5553
/** Initialize the creds cache */
56-
public StorageCredentialCache(PolarisConfigurationStore configurationStore) {
54+
public StorageCredentialCache(
55+
StorageCredentialCacheConfig cacheConfig, PolarisConfigurationStore configurationStore) {
5756
this.configurationStore = configurationStore;
5857
cache =
5958
Caffeine.newBuilder()
60-
.maximumSize(CACHE_MAX_NUMBER_OF_ENTRIES)
59+
.maximumSize(cacheConfig.maxEntryCount())
6160
.expireAfter(
6261
Expiry.creating(
6362
(StorageCredentialCacheKey key, StorageCredentialCacheEntry entry) -> {
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
package org.apache.polaris.core.storage.cache;
21+
22+
public interface StorageCredentialCacheConfig {
23+
24+
long maxEntryCount();
25+
}

polaris-core/src/test/java/org/apache/polaris/core/storage/cache/StorageCredentialCacheTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,8 @@
5454

5555
public class StorageCredentialCacheTest {
5656

57-
// polaris call context
5857
private final PolarisCallContext callCtx;
59-
60-
// the meta store manager
58+
private final StorageCredentialCacheConfig storageCredentialCacheConfig;
6159
private final PolarisMetaStoreManager metaStoreManager;
6260

6361
StorageCredentialCache storageCredentialCache;
@@ -71,12 +69,14 @@ public StorageCredentialCacheTest() {
7169
TransactionalPersistence metaStore =
7270
new TreeMapTransactionalPersistenceImpl(store, Mockito.mock(), RANDOM_SECRETS);
7371
callCtx = new PolarisCallContext(() -> "testRealm", metaStore, diagServices);
72+
storageCredentialCacheConfig = () -> 10_000;
7473
metaStoreManager = Mockito.mock(PolarisMetaStoreManager.class);
7574
storageCredentialCache = newStorageCredentialCache();
7675
}
7776

7877
private StorageCredentialCache newStorageCredentialCache() {
79-
return new StorageCredentialCache(callCtx.getConfigurationStore());
78+
return new StorageCredentialCache(
79+
storageCredentialCacheConfig, callCtx.getConfigurationStore());
8080
}
8181

8282
@Test

runtime/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusProducers.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.apache.polaris.core.secrets.UserSecretsManager;
5252
import org.apache.polaris.core.secrets.UserSecretsManagerFactory;
5353
import org.apache.polaris.core.storage.cache.StorageCredentialCache;
54+
import org.apache.polaris.core.storage.cache.StorageCredentialCacheConfig;
5455
import org.apache.polaris.service.auth.ActiveRolesProvider;
5556
import org.apache.polaris.service.auth.AuthenticationType;
5657
import org.apache.polaris.service.auth.Authenticator;
@@ -100,8 +101,9 @@ public Clock clock() {
100101
@Produces
101102
@ApplicationScoped
102103
public StorageCredentialCache storageCredentialCache(
104+
StorageCredentialCacheConfig storageCredentialCacheConfig,
103105
PolarisConfigurationStore configurationStore) {
104-
return new StorageCredentialCache(configurationStore);
106+
return new StorageCredentialCache(storageCredentialCacheConfig, configurationStore);
105107
}
106108

107109
@Produces
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
package org.apache.polaris.service.quarkus.storage;
21+
22+
import io.smallrye.config.ConfigMapping;
23+
import io.smallrye.config.WithDefault;
24+
import io.smallrye.config.WithName;
25+
import jakarta.validation.constraints.Min;
26+
import org.apache.polaris.core.storage.cache.StorageCredentialCacheConfig;
27+
28+
@ConfigMapping(prefix = "polaris.storage-credential-cache")
29+
public interface QuarkusStorageCredentialCacheConfig extends StorageCredentialCacheConfig {
30+
@WithName("max-entry-count")
31+
@WithDefault("10000")
32+
@Min(0)
33+
@Override
34+
long maxEntryCount();
35+
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@
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;
128129
import org.apache.polaris.service.admin.PolarisAdminService;
129130
import org.apache.polaris.service.catalog.PolarisPassthroughResolutionView;
130131
import org.apache.polaris.service.catalog.iceberg.CatalogHandlerUtils;
@@ -236,6 +237,7 @@ public Map<String, String> getConfigOverrides() {
236237

237238
@Inject MetaStoreManagerFactory metaStoreManagerFactory;
238239
@Inject PolarisConfigurationStore configurationStore;
240+
@Inject StorageCredentialCacheConfig storageCredentialCacheConfig;
239241
@Inject PolarisStorageIntegrationProvider storageIntegrationProvider;
240242
@Inject UserSecretsManagerFactory userSecretsManagerFactory;
241243
@Inject PolarisDiagnostics diagServices;
@@ -290,7 +292,8 @@ public void before(TestInfo testInfo) {
290292
configurationStore,
291293
Clock.systemDefaultZone());
292294

293-
storageCredentialCache = new StorageCredentialCache(configurationStore);
295+
storageCredentialCache =
296+
new StorageCredentialCache(storageCredentialCacheConfig, configurationStore);
294297

295298
entityManager =
296299
new PolarisEntityManager(

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import org.apache.polaris.core.secrets.UserSecretsManager;
6363
import org.apache.polaris.core.secrets.UserSecretsManagerFactory;
6464
import org.apache.polaris.core.storage.cache.StorageCredentialCache;
65+
import org.apache.polaris.core.storage.cache.StorageCredentialCacheConfig;
6566
import org.apache.polaris.service.admin.PolarisAdminService;
6667
import org.apache.polaris.service.catalog.PolarisPassthroughResolutionView;
6768
import org.apache.polaris.service.catalog.iceberg.IcebergCatalog;
@@ -130,6 +131,7 @@ public Map<String, String> getConfigOverrides() {
130131
@Inject MetaStoreManagerFactory metaStoreManagerFactory;
131132
@Inject UserSecretsManagerFactory userSecretsManagerFactory;
132133
@Inject PolarisConfigurationStore configurationStore;
134+
@Inject StorageCredentialCacheConfig storageCredentialCacheConfig;
133135
@Inject PolarisDiagnostics diagServices;
134136
@Inject PolarisEventListener polarisEventListener;
135137

@@ -176,7 +178,8 @@ public void before(TestInfo testInfo) {
176178
configurationStore,
177179
Clock.systemDefaultZone());
178180

179-
StorageCredentialCache storageCredentialCache = new StorageCredentialCache(configurationStore);
181+
StorageCredentialCache storageCredentialCache =
182+
new StorageCredentialCache(storageCredentialCacheConfig, configurationStore);
180183
PolarisEntityManager entityManager =
181184
new PolarisEntityManager(
182185
metaStoreManager,

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
import org.apache.polaris.core.storage.aws.AwsCredentialsStorageIntegration;
6868
import org.apache.polaris.core.storage.aws.AwsStorageConfigurationInfo;
6969
import org.apache.polaris.core.storage.cache.StorageCredentialCache;
70+
import org.apache.polaris.core.storage.cache.StorageCredentialCacheConfig;
7071
import org.apache.polaris.service.admin.PolarisAdminService;
7172
import org.apache.polaris.service.catalog.PolarisPassthroughResolutionView;
7273
import org.apache.polaris.service.catalog.generic.PolarisGenericTableCatalog;
@@ -120,6 +121,7 @@ public Map<String, String> getConfigOverrides() {
120121
@Inject MetaStoreManagerFactory metaStoreManagerFactory;
121122
@Inject UserSecretsManagerFactory userSecretsManagerFactory;
122123
@Inject PolarisConfigurationStore configurationStore;
124+
@Inject StorageCredentialCacheConfig storageCredentialCacheConfig;
123125
@Inject PolarisStorageIntegrationProvider storageIntegrationProvider;
124126
@Inject PolarisDiagnostics diagServices;
125127

@@ -168,7 +170,8 @@ public void before(TestInfo testInfo) {
168170
diagServices,
169171
configurationStore,
170172
Clock.systemDefaultZone());
171-
StorageCredentialCache storageCredentialCache = new StorageCredentialCache(configurationStore);
173+
StorageCredentialCache storageCredentialCache =
174+
new StorageCredentialCache(storageCredentialCacheConfig, configurationStore);
172175
entityManager =
173176
new PolarisEntityManager(
174177
metaStoreManager,

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
import org.apache.polaris.core.storage.aws.AwsCredentialsStorageIntegration;
8282
import org.apache.polaris.core.storage.aws.AwsStorageConfigurationInfo;
8383
import org.apache.polaris.core.storage.cache.StorageCredentialCache;
84+
import org.apache.polaris.core.storage.cache.StorageCredentialCacheConfig;
8485
import org.apache.polaris.service.admin.PolarisAdminService;
8586
import org.apache.polaris.service.catalog.PolarisPassthroughResolutionView;
8687
import org.apache.polaris.service.catalog.iceberg.IcebergCatalog;
@@ -150,6 +151,7 @@ public Map<String, String> getConfigOverrides() {
150151
@Inject MetaStoreManagerFactory metaStoreManagerFactory;
151152
@Inject UserSecretsManagerFactory userSecretsManagerFactory;
152153
@Inject PolarisConfigurationStore configurationStore;
154+
@Inject StorageCredentialCacheConfig storageCredentialCacheConfig;
153155
@Inject PolarisStorageIntegrationProvider storageIntegrationProvider;
154156
@Inject PolarisDiagnostics diagServices;
155157

@@ -194,7 +196,8 @@ public void before(TestInfo testInfo) {
194196
diagServices,
195197
configurationStore,
196198
Clock.systemDefaultZone());
197-
StorageCredentialCache storageCredentialCache = new StorageCredentialCache(configurationStore);
199+
StorageCredentialCache storageCredentialCache =
200+
new StorageCredentialCache(storageCredentialCacheConfig, configurationStore);
198201
entityManager =
199202
new PolarisEntityManager(
200203
metaStoreManager,

service/common/src/testFixtures/java/org/apache/polaris/service/TestServices.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import org.apache.polaris.core.secrets.UserSecretsManager;
4848
import org.apache.polaris.core.secrets.UserSecretsManagerFactory;
4949
import org.apache.polaris.core.storage.cache.StorageCredentialCache;
50+
import org.apache.polaris.core.storage.cache.StorageCredentialCacheConfig;
5051
import org.apache.polaris.service.admin.PolarisServiceImpl;
5152
import org.apache.polaris.service.admin.api.PolarisCatalogsApi;
5253
import org.apache.polaris.service.catalog.DefaultCatalogPrefixParser;
@@ -157,8 +158,9 @@ public TestServices build() {
157158
InMemoryPolarisMetaStoreManagerFactory metaStoreManagerFactory =
158159
new InMemoryPolarisMetaStoreManagerFactory(
159160
storageIntegrationProvider, polarisDiagnostics, configurationStore);
161+
StorageCredentialCacheConfig storageCredentialCacheConfig = () -> 10_000;
160162
StorageCredentialCache storageCredentialCache =
161-
new StorageCredentialCache(configurationStore);
163+
new StorageCredentialCache(storageCredentialCacheConfig, configurationStore);
162164
RealmEntityManagerFactory realmEntityManagerFactory =
163165
new RealmEntityManagerFactory(metaStoreManagerFactory, storageCredentialCache);
164166
UserSecretsManagerFactory userSecretsManagerFactory =

0 commit comments

Comments
 (0)