Skip to content

Commit c165249

Browse files
authored
Replace CallContext with RealmConfig in CatalogEntity (#2336)
1 parent fac650a commit c165249

File tree

11 files changed

+61
-68
lines changed

11 files changed

+61
-68
lines changed

polaris-core/src/main/java/org/apache/polaris/core/entity/CatalogEntity.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@
4040
import org.apache.polaris.core.admin.model.PolarisCatalog;
4141
import org.apache.polaris.core.admin.model.StorageConfigInfo;
4242
import org.apache.polaris.core.config.BehaviorChangeConfiguration;
43+
import org.apache.polaris.core.config.RealmConfig;
4344
import org.apache.polaris.core.connection.ConnectionConfigInfoDpo;
44-
import org.apache.polaris.core.context.CallContext;
4545
import org.apache.polaris.core.secrets.UserSecretReference;
4646
import org.apache.polaris.core.storage.FileStorageConfigurationInfo;
4747
import org.apache.polaris.core.storage.PolarisStorageConfigurationInfo;
@@ -79,7 +79,7 @@ public static CatalogEntity of(PolarisBaseEntity sourceEntity) {
7979
return null;
8080
}
8181

82-
public static CatalogEntity fromCatalog(CallContext callContext, Catalog catalog) {
82+
public static CatalogEntity fromCatalog(RealmConfig realmConfig, Catalog catalog) {
8383
Builder builder =
8484
new Builder()
8585
.setName(catalog.getName())
@@ -89,7 +89,7 @@ public static CatalogEntity fromCatalog(CallContext callContext, Catalog catalog
8989
internalProperties.put(CATALOG_TYPE_PROPERTY, catalog.getType().name());
9090
builder.setInternalProperties(internalProperties);
9191
builder.setStorageConfigurationInfo(
92-
callContext, catalog.getStorageConfigInfo(), getBaseLocation(catalog));
92+
realmConfig, catalog.getStorageConfigInfo(), getBaseLocation(catalog));
9393
return builder.build();
9494
}
9595

@@ -250,7 +250,7 @@ public Builder setReplaceNewLocationPrefixWithCatalogDefault(String value) {
250250
}
251251

252252
public Builder setStorageConfigurationInfo(
253-
CallContext callContext, StorageConfigInfo storageConfigModel, String defaultBaseLocation) {
253+
RealmConfig realmConfig, StorageConfigInfo storageConfigModel, String defaultBaseLocation) {
254254
if (storageConfigModel != null) {
255255
PolarisStorageConfigurationInfo config;
256256
Set<String> allowedLocations = new HashSet<>(storageConfigModel.getAllowedLocations());
@@ -264,7 +264,7 @@ public Builder setStorageConfigurationInfo(
264264
throw new BadRequestException("Must specify default base location");
265265
}
266266
allowedLocations.add(defaultBaseLocation);
267-
validateMaxAllowedLocations(callContext, allowedLocations);
267+
validateMaxAllowedLocations(realmConfig, allowedLocations);
268268
switch (storageConfigModel.getStorageType()) {
269269
case S3:
270270
AwsStorageConfigInfo awsConfigModel = (AwsStorageConfigInfo) storageConfigModel;
@@ -315,11 +315,9 @@ public Builder setStorageConfigurationInfo(
315315

316316
/** Validate the number of allowed locations not exceeding the max value. */
317317
private void validateMaxAllowedLocations(
318-
CallContext callContext, Collection<String> allowedLocations) {
318+
RealmConfig realmConfig, Collection<String> allowedLocations) {
319319
int maxAllowedLocations =
320-
callContext
321-
.getRealmConfig()
322-
.getConfig(BehaviorChangeConfiguration.STORAGE_CONFIGURATION_MAX_LOCATIONS);
320+
realmConfig.getConfig(BehaviorChangeConfiguration.STORAGE_CONFIGURATION_MAX_LOCATIONS);
323321
if (maxAllowedLocations != -1 && allowedLocations.size() > maxAllowedLocations) {
324322
throw new IllegalArgumentException(
325323
String.format(

polaris-core/src/main/java/org/apache/polaris/core/storage/PolarisStorageConfigurationInfo.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@
3434
import java.util.Locale;
3535
import java.util.Optional;
3636
import java.util.Set;
37-
import org.apache.polaris.core.PolarisCallContext;
3837
import org.apache.polaris.core.admin.model.Catalog;
3938
import org.apache.polaris.core.config.FeatureConfiguration;
39+
import org.apache.polaris.core.config.RealmConfig;
4040
import org.apache.polaris.core.entity.CatalogEntity;
4141
import org.apache.polaris.core.entity.PolarisEntity;
4242
import org.apache.polaris.core.entity.PolarisEntityConstants;
@@ -117,7 +117,7 @@ public static PolarisStorageConfigurationInfo deserialize(final @Nonnull String
117117
}
118118

119119
public static Optional<PolarisStorageConfigurationInfo> forEntityPath(
120-
PolarisCallContext callContext, List<PolarisEntity> entityPath) {
120+
RealmConfig realmConfig, List<PolarisEntity> entityPath) {
121121
return findStorageInfoFromHierarchy(entityPath)
122122
.map(
123123
storageInfo ->
@@ -142,9 +142,8 @@ public static Optional<PolarisStorageConfigurationInfo> forEntityPath(
142142
.orElse(null);
143143
CatalogEntity catalog = CatalogEntity.of(entityPath.get(0));
144144
boolean allowEscape =
145-
callContext
146-
.getRealmConfig()
147-
.getConfig(FeatureConfiguration.ALLOW_UNSTRUCTURED_TABLE_LOCATION, catalog);
145+
realmConfig.getConfig(
146+
FeatureConfiguration.ALLOW_UNSTRUCTURED_TABLE_LOCATION, catalog);
148147
if (!allowEscape
149148
&& catalog.getCatalogType() != Catalog.TypeEnum.EXTERNAL
150149
&& baseLocation != null) {

runtime/service/src/main/java/org/apache/polaris/service/admin/PolarisAdminService.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -755,7 +755,8 @@ public PolarisEntity createCatalog(CreateCatalogRequest catalogRequest) {
755755
PolarisAuthorizableOperation op = PolarisAuthorizableOperation.CREATE_CATALOG;
756756
authorizeBasicRootOperationOrThrow(op);
757757

758-
CatalogEntity entity = CatalogEntity.fromCatalog(callContext, catalogRequest.getCatalog());
758+
CatalogEntity entity =
759+
CatalogEntity.fromCatalog(callContext.getRealmConfig(), catalogRequest.getCatalog());
759760

760761
checkArgument(entity.getId() == -1, "Entity to be created must have no ID assigned");
761762

@@ -960,7 +961,7 @@ private void validateUpdateCatalogDiffOrThrow(
960961
}
961962
if (updateRequest.getStorageConfigInfo() != null) {
962963
updateBuilder.setStorageConfigurationInfo(
963-
callContext, updateRequest.getStorageConfigInfo(), defaultBaseLocation);
964+
callContext.getRealmConfig(), updateRequest.getStorageConfigInfo(), defaultBaseLocation);
964965
}
965966
CatalogEntity updatedEntity = updateBuilder.build();
966967

runtime/service/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalog.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1007,7 +1007,7 @@ private void validateLocationsForTableLike(
10071007
PolarisResolvedPathWrapper resolvedStorageEntity) {
10081008
Optional<PolarisStorageConfigurationInfo> optStorageConfiguration =
10091009
PolarisStorageConfigurationInfo.forEntityPath(
1010-
callContext.getPolarisCallContext(), resolvedStorageEntity.getRawFullPath());
1010+
callContext.getRealmConfig(), resolvedStorageEntity.getRawFullPath());
10111011

10121012
optStorageConfiguration.ifPresentOrElse(
10131013
storageConfigInfo -> {

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import org.apache.polaris.core.auth.PolarisAuthorizer;
5656
import org.apache.polaris.core.auth.PolarisAuthorizerImpl;
5757
import org.apache.polaris.core.config.PolarisConfigurationStore;
58+
import org.apache.polaris.core.config.RealmConfig;
5859
import org.apache.polaris.core.context.CallContext;
5960
import org.apache.polaris.core.context.RealmContext;
6061
import org.apache.polaris.core.entity.CatalogEntity;
@@ -199,6 +200,7 @@ public Map<String, String> getConfigOverrides() {
199200
protected PolarisBaseEntity catalogEntity;
200201
protected PrincipalEntity principalEntity;
201202
protected CallContext callContext;
203+
protected RealmConfig realmConfig;
202204
protected AuthenticatedPolarisPrincipal authenticatedRoot;
203205
protected PolarisAuthorizer polarisAuthorizer;
204206

@@ -234,6 +236,7 @@ public void before(TestInfo testInfo) {
234236
configurationStore);
235237

236238
callContext = polarisContext;
239+
realmConfig = polarisContext.getRealmConfig();
237240

238241
PrincipalEntity rootPrincipal =
239242
metaStoreManager.findRootPrincipal(polarisContext).orElseThrow();
@@ -262,7 +265,7 @@ public void before(TestInfo testInfo) {
262265
.setName(CATALOG_NAME)
263266
.setCatalogType("INTERNAL")
264267
.setDefaultBaseLocation(storageLocation)
265-
.setStorageConfigurationInfo(callContext, storageConfigModel, storageLocation)
268+
.setStorageConfigurationInfo(realmConfig, storageConfigModel, storageLocation)
266269
.build()
267270
.asCatalog()));
268271

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

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ public Map<String, String> getConfigOverrides() {
235235
private PolarisMetaStoreManager metaStoreManager;
236236
private UserSecretsManager userSecretsManager;
237237
private PolarisCallContext polarisContext;
238+
private RealmConfig realmConfig;
238239
private PolarisAdminService adminService;
239240
private ResolverFactory resolverFactory;
240241
private ResolutionManifestFactory resolutionManifestFactory;
@@ -279,8 +280,9 @@ public void before(TestInfo testInfo) {
279280
metaStoreManagerFactory.getOrCreateSession(realmContext),
280281
diagServices,
281282
configurationStore);
283+
realmConfig = polarisContext.getRealmConfig();
282284

283-
EntityCache entityCache = createEntityCache(polarisContext.getRealmConfig(), metaStoreManager);
285+
EntityCache entityCache = createEntityCache(realmConfig, metaStoreManager);
284286
resolverFactory =
285287
(callContext, securityContext, referenceCatalogName) ->
286288
new Resolver(
@@ -337,8 +339,7 @@ public void before(TestInfo testInfo) {
337339
"true")
338340
.addProperty(
339341
FeatureConfiguration.DROP_WITH_PURGE_ENABLED.catalogConfig(), "true")
340-
.setStorageConfigurationInfo(
341-
polarisContext, storageConfigModel, storageLocation)
342+
.setStorageConfigurationInfo(realmConfig, storageConfigModel, storageLocation)
342343
.build()
343344
.asCatalog()));
344345

@@ -1327,8 +1328,7 @@ public void testUpdateNotificationCreateTableWithLocalFilePrefix() {
13271328
metadataLocation,
13281329
TableMetadataParser.toJson(createSampleTableMetadata(metadataLocation)).getBytes(UTF_8));
13291330

1330-
if (!polarisContext
1331-
.getRealmConfig()
1331+
if (!realmConfig
13321332
.getConfig(FeatureConfiguration.SUPPORTED_CATALOG_STORAGE_TYPES)
13331333
.contains("FILE")) {
13341334
Assertions.assertThatThrownBy(() -> catalog.sendNotification(table, request))
@@ -1380,8 +1380,7 @@ public void testUpdateNotificationCreateTableWithHttpPrefix() {
13801380
metadataLocation,
13811381
TableMetadataParser.toJson(createSampleTableMetadata(metadataLocation)).getBytes(UTF_8));
13821382

1383-
if (!polarisContext
1384-
.getRealmConfig()
1383+
if (!realmConfig
13851384
.getConfig(FeatureConfiguration.SUPPORTED_CATALOG_STORAGE_TYPES)
13861385
.contains("FILE")) {
13871386
Assertions.assertThatThrownBy(() -> catalog.sendNotification(table, request))
@@ -1871,7 +1870,7 @@ public void testDropTableWithPurgeDisabled() {
18711870
FeatureConfiguration.ALLOW_UNSTRUCTURED_TABLE_LOCATION.catalogConfig(), "true")
18721871
.addProperty(FeatureConfiguration.DROP_WITH_PURGE_ENABLED.catalogConfig(), "false")
18731872
.setStorageConfigurationInfo(
1874-
polarisContext, noPurgeStorageConfigModel, storageLocation)
1873+
realmConfig, noPurgeStorageConfigModel, storageLocation)
18751874
.build()
18761875
.asCatalog()));
18771876
IcebergCatalog noPurgeCatalog =

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.apache.polaris.core.auth.PolarisAuthorizerImpl;
4545
import org.apache.polaris.core.config.FeatureConfiguration;
4646
import org.apache.polaris.core.config.PolarisConfigurationStore;
47+
import org.apache.polaris.core.config.RealmConfig;
4748
import org.apache.polaris.core.context.RealmContext;
4849
import org.apache.polaris.core.entity.CatalogEntity;
4950
import org.apache.polaris.core.entity.PrincipalEntity;
@@ -120,6 +121,7 @@ public Map<String, String> getConfigOverrides() {
120121
private PolarisMetaStoreManager metaStoreManager;
121122
private UserSecretsManager userSecretsManager;
122123
private PolarisCallContext polarisContext;
124+
private RealmConfig realmConfig;
123125

124126
private TestPolarisEventListener testPolarisEventListener;
125127

@@ -160,6 +162,7 @@ public void before(TestInfo testInfo) {
160162
metaStoreManagerFactory.getOrCreateSession(realmContext),
161163
diagServices,
162164
configurationStore);
165+
realmConfig = polarisContext.getRealmConfig();
163166

164167
PrincipalEntity rootPrincipal =
165168
metaStoreManager.findRootPrincipal(polarisContext).orElseThrow();
@@ -192,7 +195,7 @@ public void before(TestInfo testInfo) {
192195
.addProperty(FeatureConfiguration.DROP_WITH_PURGE_ENABLED.catalogConfig(), "true")
193196
.setDefaultBaseLocation("file://tmp")
194197
.setStorageConfigurationInfo(
195-
polarisContext,
198+
realmConfig,
196199
new FileStorageConfigInfo(
197200
StorageConfigInfo.StorageTypeEnum.FILE, List.of("file://", "/", "*")),
198201
"file://tmp")

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.apache.polaris.core.auth.PolarisAuthorizerImpl;
4646
import org.apache.polaris.core.config.FeatureConfiguration;
4747
import org.apache.polaris.core.config.PolarisConfigurationStore;
48+
import org.apache.polaris.core.config.RealmConfig;
4849
import org.apache.polaris.core.context.RealmContext;
4950
import org.apache.polaris.core.entity.CatalogEntity;
5051
import org.apache.polaris.core.entity.PolarisEntity;
@@ -110,6 +111,7 @@ public abstract class AbstractPolarisGenericTableCatalogTest {
110111
private PolarisMetaStoreManager metaStoreManager;
111112
private UserSecretsManager userSecretsManager;
112113
private PolarisCallContext polarisContext;
114+
private RealmConfig realmConfig;
113115
private PolarisAdminService adminService;
114116
private FileIOFactory fileIOFactory;
115117
private AuthenticatedPolarisPrincipal authenticatedRoot;
@@ -152,6 +154,7 @@ public void before(TestInfo testInfo) {
152154
metaStoreManagerFactory.getOrCreateSession(realmContext),
153155
diagServices,
154156
configurationStore);
157+
realmConfig = polarisContext.getRealmConfig();
155158

156159
PrincipalEntity rootPrincipal =
157160
metaStoreManager.findRootPrincipal(polarisContext).orElseThrow();
@@ -196,8 +199,7 @@ public void before(TestInfo testInfo) {
196199
"true")
197200
.addProperty(
198201
FeatureConfiguration.DROP_WITH_PURGE_ENABLED.catalogConfig(), "true")
199-
.setStorageConfigurationInfo(
200-
polarisContext, storageConfigModel, storageLocation)
202+
.setStorageConfigurationInfo(realmConfig, storageConfigModel, storageLocation)
201203
.build()
202204
.asCatalog()));
203205

runtime/service/src/test/java/org/apache/polaris/service/catalog/AbstractPolicyCatalogTest.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
import org.apache.polaris.core.auth.PolarisAuthorizerImpl;
5353
import org.apache.polaris.core.config.FeatureConfiguration;
5454
import org.apache.polaris.core.config.PolarisConfigurationStore;
55-
import org.apache.polaris.core.context.CallContext;
55+
import org.apache.polaris.core.config.RealmConfig;
5656
import org.apache.polaris.core.context.RealmContext;
5757
import org.apache.polaris.core.entity.CatalogEntity;
5858
import org.apache.polaris.core.entity.PolarisEntity;
@@ -132,12 +132,12 @@ public abstract class AbstractPolicyCatalogTest {
132132

133133
private PolicyCatalog policyCatalog;
134134
private IcebergCatalog icebergCatalog;
135-
private CallContext callContext;
136135
private AwsStorageConfigInfo storageConfigModel;
137136
private String realmName;
138137
private PolarisMetaStoreManager metaStoreManager;
139138
private UserSecretsManager userSecretsManager;
140139
private PolarisCallContext polarisContext;
140+
private RealmConfig realmConfig;
141141
private PolarisAdminService adminService;
142142
private FileIOFactory fileIOFactory;
143143
private AuthenticatedPolarisPrincipal authenticatedRoot;
@@ -175,8 +175,7 @@ public void before(TestInfo testInfo) {
175175
metaStoreManagerFactory.getOrCreateSession(realmContext),
176176
diagServices,
177177
configurationStore);
178-
179-
callContext = polarisContext;
178+
realmConfig = polarisContext.getRealmConfig();
180179

181180
PrincipalEntity rootPrincipal =
182181
metaStoreManager.findRootPrincipal(polarisContext).orElseThrow();
@@ -190,7 +189,7 @@ public void before(TestInfo testInfo) {
190189

191190
adminService =
192191
new PolarisAdminService(
193-
callContext,
192+
polarisContext,
194193
resolutionManifestFactory,
195194
metaStoreManager,
196195
userSecretsManager,
@@ -219,14 +218,13 @@ public void before(TestInfo testInfo) {
219218
.addProperty(
220219
FeatureConfiguration.ALLOW_UNSTRUCTURED_TABLE_LOCATION.catalogConfig(),
221220
"true")
222-
.setStorageConfigurationInfo(
223-
polarisContext, storageConfigModel, storageLocation)
221+
.setStorageConfigurationInfo(realmConfig, storageConfigModel, storageLocation)
224222
.build()
225223
.asCatalog()));
226224

227225
PolarisPassthroughResolutionView passthroughView =
228226
new PolarisPassthroughResolutionView(
229-
callContext, resolutionManifestFactory, securityContext, CATALOG_NAME);
227+
polarisContext, resolutionManifestFactory, securityContext, CATALOG_NAME);
230228
TaskExecutor taskExecutor = Mockito.mock();
231229
this.fileIOFactory = new DefaultFileIOFactory(storageCredentialCache, metaStoreManagerFactory);
232230

@@ -250,13 +248,13 @@ public void before(TestInfo testInfo) {
250248
isA(AwsStorageConfigurationInfo.class)))
251249
.thenReturn((PolarisStorageIntegration) storageIntegration);
252250

253-
this.policyCatalog = new PolicyCatalog(metaStoreManager, callContext, passthroughView);
251+
this.policyCatalog = new PolicyCatalog(metaStoreManager, polarisContext, passthroughView);
254252
this.icebergCatalog =
255253
new IcebergCatalog(
256254
storageCredentialCache,
257255
resolverFactory,
258256
metaStoreManager,
259-
callContext,
257+
polarisContext,
260258
passthroughView,
261259
securityContext,
262260
taskExecutor,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1735,7 +1735,7 @@ public void testSendNotificationSufficientPrivileges() {
17351735
new CatalogEntity.Builder()
17361736
.setName(externalCatalog)
17371737
.setDefaultBaseLocation(storageLocation)
1738-
.setStorageConfigurationInfo(callContext, storageConfigModel, storageLocation)
1738+
.setStorageConfigurationInfo(realmConfig, storageConfigModel, storageLocation)
17391739
.setCatalogType("EXTERNAL")
17401740
.build()
17411741
.asCatalog()));

0 commit comments

Comments
 (0)