Skip to content

Commit e2c5b6c

Browse files
committed
Remove CallContextCatalogFactory
1 parent b84f462 commit e2c5b6c

File tree

7 files changed

+113
-326
lines changed

7 files changed

+113
-326
lines changed

quarkus/service/src/test/java/org/apache/polaris/service/quarkus/TestServices.java

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@
4444
import org.apache.polaris.service.catalog.io.FileIOFactory;
4545
import org.apache.polaris.service.config.DefaultConfigurationStore;
4646
import org.apache.polaris.service.config.RealmEntityManagerFactory;
47-
import org.apache.polaris.service.context.CallContextCatalogFactory;
48-
import org.apache.polaris.service.context.PolarisCallContextCatalogFactory;
4947
import org.apache.polaris.service.persistence.InMemoryPolarisMetaStoreManagerFactory;
5048
import org.apache.polaris.service.quarkus.catalog.io.TestFileIOFactory;
5149
import org.apache.polaris.service.storage.PolarisStorageIntegrationProviderImpl;
@@ -98,28 +96,19 @@ public static TestServices inMemory(FileIOFactory ioFactory, Map<String, Object>
9896
PolarisEntityManager entityManager =
9997
realmEntityManagerFactory.getOrCreateEntityManager(testRealm);
10098

101-
CallContextCatalogFactory callContextFactory =
102-
new PolarisCallContextCatalogFactory(
103-
entityManager,
104-
metaStoreManager,
105-
session,
106-
configurationStore,
107-
polarisDiagnostics,
108-
Mockito.mock(TaskExecutor.class),
109-
ioFactory);
110-
11199
PolarisAuthorizer authorizer = Mockito.mock(PolarisAuthorizer.class);
112100

113101
IcebergRestCatalogApiService service =
114102
new IcebergCatalogAdapter(
115103
testRealm,
116-
callContextFactory,
117104
entityManager,
118105
metaStoreManager,
119106
session,
120107
configurationStore,
121108
polarisDiagnostics,
122-
authorizer);
109+
authorizer,
110+
Mockito.mock(TaskExecutor.class),
111+
ioFactory);
123112

124113
IcebergRestCatalogApi restApi = new IcebergRestCatalogApi(service);
125114

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

Lines changed: 3 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@
2626
import io.quarkus.test.junit.QuarkusMock;
2727
import io.quarkus.test.junit.QuarkusTestProfile;
2828
import jakarta.annotation.Nonnull;
29-
import jakarta.enterprise.context.RequestScoped;
30-
import jakarta.enterprise.inject.Alternative;
3129
import jakarta.inject.Inject;
3230
import jakarta.ws.rs.core.SecurityContext;
3331
import java.io.IOException;
@@ -39,7 +37,6 @@
3937
import java.util.stream.Collectors;
4038
import org.apache.iceberg.CatalogProperties;
4139
import org.apache.iceberg.Schema;
42-
import org.apache.iceberg.catalog.Catalog;
4340
import org.apache.iceberg.catalog.Namespace;
4441
import org.apache.iceberg.catalog.TableIdentifier;
4542
import org.apache.iceberg.exceptions.ForbiddenException;
@@ -68,17 +65,13 @@
6865
import org.apache.polaris.core.persistence.PolarisEntityManager;
6966
import org.apache.polaris.core.persistence.PolarisMetaStoreManager;
7067
import org.apache.polaris.core.persistence.PolarisMetaStoreSession;
71-
import org.apache.polaris.core.persistence.resolver.PolarisResolutionManifest;
7268
import org.apache.polaris.service.admin.PolarisAdminService;
7369
import org.apache.polaris.service.catalog.BasePolarisCatalog;
7470
import org.apache.polaris.service.catalog.io.DefaultFileIOFactory;
75-
import org.apache.polaris.service.catalog.io.FileIOFactory;
7671
import org.apache.polaris.service.config.DefaultConfigurationStore;
7772
import org.apache.polaris.service.config.RealmEntityManagerFactory;
78-
import org.apache.polaris.service.context.PolarisCallContextCatalogFactory;
7973
import org.apache.polaris.service.quarkus.catalog.PolarisPassthroughResolutionView;
8074
import org.apache.polaris.service.storage.PolarisStorageIntegrationProviderImpl;
81-
import org.apache.polaris.service.task.TaskExecutor;
8275
import org.assertj.core.api.Assertions;
8376
import org.junit.jupiter.api.AfterEach;
8477
import org.junit.jupiter.api.BeforeAll;
@@ -91,11 +84,6 @@ public abstract class PolarisAuthzTestBase {
9184

9285
public static class Profile implements QuarkusTestProfile {
9386

94-
@Override
95-
public Set<Class<?>> getEnabledAlternatives() {
96-
return Set.of(TestPolarisCallContextCatalogFactory.class);
97-
}
98-
9987
@Override
10088
public Map<String, String> getConfigOverrides() {
10189
return Map.of(
@@ -231,6 +219,8 @@ public void before(TestInfo testInfo) {
231219
.setName(CATALOG_NAME)
232220
.setCatalogType("INTERNAL")
233221
.setDefaultBaseLocation(storageLocation)
222+
.addProperty(
223+
CatalogProperties.FILE_IO_IMPL, "org.apache.iceberg.inmemory.InMemoryFileIO")
234224
.setStorageConfigurationInfo(storageConfigModel, storageLocation)
235225
.build());
236226

@@ -331,7 +321,7 @@ public void after() {
331321
Mockito.when(securityContext.getUserPrincipal()).thenReturn(p);
332322
Set<String> principalRoleNames = loadPrincipalRolesNames(p);
333323
Mockito.when(securityContext.isUserInRole(Mockito.anyString()))
334-
.thenAnswer(invocation -> principalRoleNames.contains(invocation.getArgument(0)));
324+
.thenAnswer(invocation -> principalRoleNames.contains((String) invocation.getArgument(0)));
335325
return securityContext;
336326
}
337327

@@ -413,53 +403,6 @@ private void initBaseCatalog() {
413403
CatalogProperties.FILE_IO_IMPL, "org.apache.iceberg.inmemory.InMemoryFileIO"));
414404
}
415405

416-
@Alternative
417-
@RequestScoped
418-
public static class TestPolarisCallContextCatalogFactory
419-
extends PolarisCallContextCatalogFactory {
420-
421-
public TestPolarisCallContextCatalogFactory() {
422-
super(null, null, null, null, null, null, null);
423-
}
424-
425-
@Inject
426-
public TestPolarisCallContextCatalogFactory(
427-
PolarisEntityManager entityManager,
428-
PolarisMetaStoreManager metaStoreManager,
429-
PolarisMetaStoreSession metaStoreSession,
430-
PolarisConfigurationStore configurationStore,
431-
PolarisDiagnostics diagnostics,
432-
TaskExecutor taskExecutor,
433-
FileIOFactory fileIOFactory) {
434-
super(
435-
entityManager,
436-
metaStoreManager,
437-
metaStoreSession,
438-
configurationStore,
439-
diagnostics,
440-
taskExecutor,
441-
fileIOFactory);
442-
}
443-
444-
@Override
445-
public Catalog createCallContextCatalog(
446-
RealmContext realmContext,
447-
AuthenticatedPolarisPrincipal authenticatedPolarisPrincipal,
448-
SecurityContext securityContext,
449-
final PolarisResolutionManifest resolvedManifest) {
450-
// This depends on the BasePolarisCatalog allowing calling initialize multiple times
451-
// to override the previous config.
452-
Catalog catalog =
453-
super.createCallContextCatalog(
454-
realmContext, authenticatedPolarisPrincipal, securityContext, resolvedManifest);
455-
catalog.initialize(
456-
CATALOG_NAME,
457-
ImmutableMap.of(
458-
CatalogProperties.FILE_IO_IMPL, "org.apache.iceberg.inmemory.InMemoryFileIO"));
459-
return catalog;
460-
}
461-
}
462-
463406
/**
464407
* Tests each "sufficient" privilege individually by invoking {@code grantAction} for each set of
465408
* privileges, running the action being tested, revoking after each test set, and also ensuring

quarkus/service/src/test/java/org/apache/polaris/service/quarkus/catalog/PolarisCatalogHandlerWrapperAuthzTest.java

Lines changed: 38 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
*/
1919
package org.apache.polaris.service.quarkus.catalog;
2020

21-
import com.google.common.collect.ImmutableMap;
2221
import io.quarkus.test.junit.QuarkusTest;
2322
import io.quarkus.test.junit.TestProfile;
2423
import jakarta.ws.rs.core.SecurityContext;
@@ -34,7 +33,6 @@
3433
import org.apache.iceberg.SortOrder;
3534
import org.apache.iceberg.TableMetadata;
3635
import org.apache.iceberg.TableMetadataParser;
37-
import org.apache.iceberg.catalog.Catalog;
3836
import org.apache.iceberg.catalog.Namespace;
3937
import org.apache.iceberg.catalog.TableIdentifier;
4038
import org.apache.iceberg.exceptions.ForbiddenException;
@@ -54,17 +52,13 @@
5452
import org.apache.polaris.core.admin.model.PrincipalWithCredentialsCredentials;
5553
import org.apache.polaris.core.admin.model.StorageConfigInfo;
5654
import org.apache.polaris.core.auth.AuthenticatedPolarisPrincipal;
57-
import org.apache.polaris.core.context.RealmContext;
5855
import org.apache.polaris.core.entity.CatalogEntity;
5956
import org.apache.polaris.core.entity.CatalogRoleEntity;
6057
import org.apache.polaris.core.entity.PolarisPrivilege;
6158
import org.apache.polaris.core.entity.PrincipalEntity;
6259
import org.apache.polaris.core.persistence.PolarisMetaStoreManager;
63-
import org.apache.polaris.core.persistence.resolver.PolarisResolutionManifest;
6460
import org.apache.polaris.service.catalog.PolarisCatalogHandlerWrapper;
6561
import org.apache.polaris.service.catalog.io.DefaultFileIOFactory;
66-
import org.apache.polaris.service.context.CallContextCatalogFactory;
67-
import org.apache.polaris.service.context.PolarisCallContextCatalogFactory;
6862
import org.apache.polaris.service.quarkus.admin.PolarisAuthzTestBase;
6963
import org.apache.polaris.service.types.NotificationRequest;
7064
import org.apache.polaris.service.types.NotificationType;
@@ -90,27 +84,24 @@ private PolarisCatalogHandlerWrapper newWrapper() {
9084
}
9185

9286
private PolarisCatalogHandlerWrapper newWrapper(Set<String> activatedPrincipalRoles) {
93-
return newWrapper(activatedPrincipalRoles, CATALOG_NAME, newCatalogFactory());
87+
return newWrapper(activatedPrincipalRoles, CATALOG_NAME);
9488
}
9589

9690
private PolarisCatalogHandlerWrapper newWrapper(
97-
Set<String> activatedPrincipalRoles, String catalogName, CallContextCatalogFactory factory) {
91+
Set<String> activatedPrincipalRoles, String catalogName) {
9892
final AuthenticatedPolarisPrincipal authenticatedPrincipal =
9993
new AuthenticatedPolarisPrincipal(principalEntity, activatedPrincipalRoles);
100-
return new PolarisCatalogHandlerWrapper(
101-
realmContext,
102-
metaStoreSession,
103-
configurationStore,
104-
diagServices,
105-
entityManager,
106-
metaStoreManager,
107-
securityContext(authenticatedPrincipal, activatedPrincipalRoles),
108-
factory,
109-
catalogName,
110-
polarisAuthorizer);
94+
SecurityContext securityContext =
95+
securityContext(authenticatedPrincipal, activatedPrincipalRoles);
96+
return newWrapper(securityContext, catalogName);
11197
}
11298

11399
private PolarisCatalogHandlerWrapper newWrapper(SecurityContext securityContext) {
100+
return newWrapper(securityContext, CATALOG_NAME);
101+
}
102+
103+
private PolarisCatalogHandlerWrapper newWrapper(
104+
SecurityContext securityContext, String catalogName) {
114105
return new PolarisCatalogHandlerWrapper(
115106
realmContext,
116107
metaStoreSession,
@@ -119,18 +110,8 @@ private PolarisCatalogHandlerWrapper newWrapper(SecurityContext securityContext)
119110
entityManager,
120111
metaStoreManager,
121112
securityContext,
122-
newCatalogFactory(),
123-
CATALOG_NAME,
124-
polarisAuthorizer);
125-
}
126-
127-
private CallContextCatalogFactory newCatalogFactory() {
128-
return new TestPolarisCallContextCatalogFactory(
129-
entityManager,
130-
metaStoreManager,
131-
metaStoreSession,
132-
configurationStore,
133-
diagServices,
113+
catalogName,
114+
polarisAuthorizer,
134115
Mockito.mock(),
135116
new DefaultFileIOFactory());
136117
}
@@ -1637,6 +1618,8 @@ public void testSendNotificationSufficientPrivileges() {
16371618
.setName(externalCatalog)
16381619
.setDefaultBaseLocation(storageLocation)
16391620
.setStorageConfigurationInfo(storageConfigModel, storageLocation)
1621+
.addProperty(
1622+
CatalogProperties.FILE_IO_IMPL, "org.apache.iceberg.inmemory.InMemoryFileIO")
16401623
.setCatalogType("EXTERNAL")
16411624
.build());
16421625
adminService.createCatalogRole(
@@ -1699,48 +1682,23 @@ public void testSendNotificationSufficientPrivileges() {
16991682
validatePayload.setTimestamp(530950845L);
17001683
validateRequest.setPayload(validatePayload);
17011684

1702-
PolarisCallContextCatalogFactory factory =
1703-
new PolarisCallContextCatalogFactory(
1704-
entityManager,
1705-
metaStoreManager,
1706-
metaStoreSession,
1707-
configurationStore,
1708-
diagServices,
1709-
Mockito.mock(),
1710-
new DefaultFileIOFactory()) {
1711-
@Override
1712-
public Catalog createCallContextCatalog(
1713-
RealmContext realmContext,
1714-
AuthenticatedPolarisPrincipal authenticatedPolarisPrincipal,
1715-
SecurityContext securityContext,
1716-
PolarisResolutionManifest resolvedManifest) {
1717-
Catalog catalog =
1718-
super.createCallContextCatalog(
1719-
realmContext, authenticatedPolarisPrincipal, securityContext, resolvedManifest);
1720-
String fileIoImpl = "org.apache.iceberg.inmemory.InMemoryFileIO";
1721-
catalog.initialize(
1722-
externalCatalog, ImmutableMap.of(CatalogProperties.FILE_IO_IMPL, fileIoImpl));
1723-
1724-
try (FileIO fileIO =
1725-
CatalogUtil.loadFileIO(fileIoImpl, Map.of(), new Configuration())) {
1726-
TableMetadata tableMetadata =
1727-
TableMetadata.buildFromEmpty()
1728-
.addSchema(SCHEMA, SCHEMA.highestFieldId())
1729-
.setLocation(
1730-
String.format(
1731-
"%s/bucket/table/metadata/v1.metadata.json", storageLocation))
1732-
.addPartitionSpec(PartitionSpec.unpartitioned())
1733-
.addSortOrder(SortOrder.unsorted())
1734-
.assignUUID()
1735-
.build();
1736-
TableMetadataParser.overwrite(
1737-
tableMetadata, fileIO.newOutputFile(createPayload.getMetadataLocation()));
1738-
TableMetadataParser.overwrite(
1739-
tableMetadata, fileIO.newOutputFile(updatePayload.getMetadataLocation()));
1740-
}
1741-
return catalog;
1742-
}
1743-
};
1685+
try (FileIO fileIO =
1686+
CatalogUtil.loadFileIO(
1687+
"org.apache.iceberg.inmemory.InMemoryFileIO", Map.of(), new Configuration())) {
1688+
TableMetadata tableMetadata =
1689+
TableMetadata.buildFromEmpty()
1690+
.addSchema(SCHEMA, SCHEMA.highestFieldId())
1691+
.setLocation(
1692+
String.format("%s/bucket/table/metadata/v1.metadata.json", storageLocation))
1693+
.addPartitionSpec(PartitionSpec.unpartitioned())
1694+
.addSortOrder(SortOrder.unsorted())
1695+
.assignUUID()
1696+
.build();
1697+
TableMetadataParser.overwrite(
1698+
tableMetadata, fileIO.newOutputFile(createPayload.getMetadataLocation()));
1699+
TableMetadataParser.overwrite(
1700+
tableMetadata, fileIO.newOutputFile(updatePayload.getMetadataLocation()));
1701+
}
17441702

17451703
List<Set<PolarisPrivilege>> sufficientPrivilegeSets =
17461704
List.of(
@@ -1764,19 +1722,18 @@ public Catalog createCallContextCatalog(
17641722
doTestSufficientPrivilegeSets(
17651723
sufficientPrivilegeSets,
17661724
() -> {
1767-
newWrapper(Set.of(PRINCIPAL_ROLE1), externalCatalog, factory)
1725+
newWrapper(Set.of(PRINCIPAL_ROLE1), externalCatalog)
17681726
.sendNotification(table, createRequest);
1769-
newWrapper(Set.of(PRINCIPAL_ROLE1), externalCatalog, factory)
1727+
newWrapper(Set.of(PRINCIPAL_ROLE1), externalCatalog)
17701728
.sendNotification(table, updateRequest);
1771-
newWrapper(Set.of(PRINCIPAL_ROLE1), externalCatalog, factory)
1772-
.sendNotification(table, dropRequest);
1773-
newWrapper(Set.of(PRINCIPAL_ROLE1), externalCatalog, factory)
1729+
newWrapper(Set.of(PRINCIPAL_ROLE1), externalCatalog).sendNotification(table, dropRequest);
1730+
newWrapper(Set.of(PRINCIPAL_ROLE1), externalCatalog)
17741731
.sendNotification(table, validateRequest);
17751732
},
17761733
() -> {
1777-
newWrapper(Set.of(PRINCIPAL_ROLE2), externalCatalog, factory)
1734+
newWrapper(Set.of(PRINCIPAL_ROLE2), externalCatalog)
17781735
.dropNamespace(Namespace.of("extns1", "extns2"));
1779-
newWrapper(Set.of(PRINCIPAL_ROLE2), externalCatalog, factory)
1736+
newWrapper(Set.of(PRINCIPAL_ROLE2), externalCatalog)
17801737
.dropNamespace(Namespace.of("extns1"));
17811738
},
17821739
PRINCIPAL_NAME,
@@ -1786,7 +1743,7 @@ public Catalog createCallContextCatalog(
17861743
doTestSufficientPrivilegeSets(
17871744
sufficientPrivilegeSets,
17881745
() -> {
1789-
newWrapper(Set.of(PRINCIPAL_ROLE1), externalCatalog, factory)
1746+
newWrapper(Set.of(PRINCIPAL_ROLE1), externalCatalog)
17901747
.sendNotification(table, validateRequest);
17911748
},
17921749
null /* cleanupAction */,

0 commit comments

Comments
 (0)