Skip to content

Commit db1c4c5

Browse files
committed
review: add StorageCredentialCacheConfig
1 parent dcc901a commit db1c4c5

File tree

10 files changed

+88
-15
lines changed

10 files changed

+88
-15
lines changed

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,13 @@ public class StorageCredentialCache {
4646

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

49-
private static final long CACHE_MAX_NUMBER_OF_ENTRIES = 10_000L;
50-
5149
private final LoadingCache<StorageCredentialCacheKey, StorageCredentialCacheEntry> cache;
5250

5351
/** Initialize the creds cache */
54-
public StorageCredentialCache() {
52+
public StorageCredentialCache(StorageCredentialCacheConfig cacheConfig) {
5553
cache =
5654
Caffeine.newBuilder()
57-
.maximumSize(CACHE_MAX_NUMBER_OF_ENTRIES)
55+
.maximumSize(cacheConfig.maxEntryCount())
5856
.expireAfter(
5957
Expiry.creating(
6058
(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: 3 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
private StorageCredentialCache storageCredentialCache;
@@ -71,12 +69,13 @@ 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();
78+
return new StorageCredentialCache(storageCredentialCacheConfig);
8079
}
8180

8281
@Test

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import org.apache.polaris.core.secrets.UserSecretsManager;
5353
import org.apache.polaris.core.secrets.UserSecretsManagerFactory;
5454
import org.apache.polaris.core.storage.cache.StorageCredentialCache;
55+
import org.apache.polaris.core.storage.cache.StorageCredentialCacheConfig;
5556
import org.apache.polaris.service.auth.ActiveRolesProvider;
5657
import org.apache.polaris.service.auth.AuthenticationType;
5758
import org.apache.polaris.service.auth.Authenticator;
@@ -100,8 +101,9 @@ public Clock clock() {
100101

101102
@Produces
102103
@ApplicationScoped
103-
public StorageCredentialCache storageCredentialCache() {
104-
return new StorageCredentialCache();
104+
public StorageCredentialCache storageCredentialCache(
105+
StorageCredentialCacheConfig storageCredentialCacheConfig) {
106+
return new StorageCredentialCache(storageCredentialCacheConfig);
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: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@
126126
import org.apache.polaris.core.storage.aws.AwsCredentialsStorageIntegration;
127127
import org.apache.polaris.core.storage.aws.AwsStorageConfigurationInfo;
128128
import org.apache.polaris.core.storage.cache.StorageCredentialCache;
129+
import org.apache.polaris.core.storage.cache.StorageCredentialCacheConfig;
129130
import org.apache.polaris.service.admin.PolarisAdminService;
130131
import org.apache.polaris.service.catalog.PolarisPassthroughResolutionView;
131132
import org.apache.polaris.service.catalog.iceberg.CatalogHandlerUtils;
@@ -237,6 +238,7 @@ public Map<String, String> getConfigOverrides() {
237238

238239
@Inject MetaStoreManagerFactory metaStoreManagerFactory;
239240
@Inject PolarisConfigurationStore configurationStore;
241+
@Inject StorageCredentialCacheConfig storageCredentialCacheConfig;
240242
@Inject PolarisStorageIntegrationProvider storageIntegrationProvider;
241243
@Inject UserSecretsManagerFactory userSecretsManagerFactory;
242244
@Inject PolarisDiagnostics diagServices;
@@ -287,7 +289,7 @@ public void before(TestInfo testInfo) {
287289
configurationStore,
288290
Clock.systemDefaultZone());
289291

290-
storageCredentialCache = new StorageCredentialCache();
292+
storageCredentialCache = new StorageCredentialCache(storageCredentialCacheConfig);
291293

292294
entityManager =
293295
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();
181+
StorageCredentialCache storageCredentialCache =
182+
new StorageCredentialCache(storageCredentialCacheConfig);
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();
173+
StorageCredentialCache storageCredentialCache =
174+
new StorageCredentialCache(storageCredentialCacheConfig);
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();
199+
StorageCredentialCache storageCredentialCache =
200+
new StorageCredentialCache(storageCredentialCacheConfig);
198201
entityManager =
199202
new PolarisEntityManager(
200203
metaStoreManager,

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.apache.polaris.core.secrets.UserSecretsManager;
4949
import org.apache.polaris.core.secrets.UserSecretsManagerFactory;
5050
import org.apache.polaris.core.storage.cache.StorageCredentialCache;
51+
import org.apache.polaris.core.storage.cache.StorageCredentialCacheConfig;
5152
import org.apache.polaris.service.admin.PolarisServiceImpl;
5253
import org.apache.polaris.service.admin.api.PolarisCatalogsApi;
5354
import org.apache.polaris.service.catalog.DefaultCatalogPrefixParser;
@@ -153,7 +154,9 @@ public TestServices build() {
153154
InMemoryPolarisMetaStoreManagerFactory metaStoreManagerFactory =
154155
new InMemoryPolarisMetaStoreManagerFactory(
155156
storageIntegrationProvider, polarisDiagnostics);
156-
StorageCredentialCache storageCredentialCache = new StorageCredentialCache();
157+
StorageCredentialCacheConfig storageCredentialCacheConfig = () -> 10_000;
158+
StorageCredentialCache storageCredentialCache =
159+
new StorageCredentialCache(storageCredentialCacheConfig);
157160
RealmEntityManagerFactory realmEntityManagerFactory =
158161
new RealmEntityManagerFactory(
159162
metaStoreManagerFactory, configurationStore, storageCredentialCache);

0 commit comments

Comments
 (0)