diff --git a/integration-tests/src/main/java/org/apache/polaris/service/it/env/ManagementApi.java b/integration-tests/src/main/java/org/apache/polaris/service/it/env/ManagementApi.java index f2adf301442..72c66cd1289 100644 --- a/integration-tests/src/main/java/org/apache/polaris/service/it/env/ManagementApi.java +++ b/integration-tests/src/main/java/org/apache/polaris/service/it/env/ManagementApi.java @@ -46,6 +46,7 @@ import org.apache.polaris.core.admin.model.PrincipalWithCredentials; import org.apache.polaris.core.admin.model.Principals; import org.apache.polaris.core.admin.model.UpdateCatalogRequest; +import org.apache.polaris.core.entity.PolarisEntityConstants; /** * A simple, non-exhaustive set of helper methods for accessing the Polaris Management API. @@ -287,7 +288,7 @@ public void deletePrincipalRole(PrincipalRole role) { public void dropCatalog(String catalogName) { listCatalogRoles(catalogName).stream() - .filter(cr -> !cr.getName().equals("catalog_admin")) + .filter(cr -> !cr.getName().equals(PolarisEntityConstants.getNameOfCatalogAdminRole())) .forEach(role -> deleteCatalogRole(catalogName, role)); deleteCatalog(catalogName); diff --git a/integration-tests/src/main/java/org/apache/polaris/service/it/test/PolarisManagementServiceIntegrationTest.java b/integration-tests/src/main/java/org/apache/polaris/service/it/test/PolarisManagementServiceIntegrationTest.java index b10c27c1a70..2bbd3830c4c 100644 --- a/integration-tests/src/main/java/org/apache/polaris/service/it/test/PolarisManagementServiceIntegrationTest.java +++ b/integration-tests/src/main/java/org/apache/polaris/service/it/test/PolarisManagementServiceIntegrationTest.java @@ -1684,7 +1684,9 @@ public void testCatalogAdminGrantAndRevokeCatalogRoles() { .build(); managementApi.createCatalog(catalog); - CatalogRole catalogAdminRole = managementApi.getCatalogRole(catalogName, "catalog_admin"); + CatalogRole catalogAdminRole = + managementApi.getCatalogRole( + catalogName, PolarisEntityConstants.getNameOfCatalogAdminRole()); managementApi.grantCatalogRoleToPrincipalRole(principalRoleName, catalogName, catalogAdminRole); PrincipalWithCredentials catalogAdminPrincipal = @@ -1771,7 +1773,9 @@ public void testServiceAdminCanTransferCatalogAdmin() { .build(); managementApi.createCatalog(catalog); - CatalogRole catalogAdminRole = managementApi.getCatalogRole(catalogName, "catalog_admin"); + CatalogRole catalogAdminRole = + managementApi.getCatalogRole( + catalogName, PolarisEntityConstants.getNameOfCatalogAdminRole()); managementApi.grantCatalogRoleToPrincipalRole(principalRoleName, catalogName, catalogAdminRole); PrincipalWithCredentials catalogAdminPrincipal = @@ -1813,7 +1817,10 @@ public void testServiceAdminCanTransferCatalogAdmin() { // grant the admin role back to service_admin so that cleanup can happen client .managementApi(catalogAdminToken) - .grantCatalogRoleToPrincipalRole("service_admin", catalogName, catalogAdminRole); + .grantCatalogRoleToPrincipalRole( + PolarisEntityConstants.getNameOfPrincipalServiceAdminRole(), + catalogName, + catalogAdminRole); } } @@ -1856,7 +1863,9 @@ public void testCatalogAdminGrantAndRevokeCatalogRolesFromWrongCatalog() { managementApi.createCatalogRole(catalogName2, catalogRoleName); // Get the catalog admin role from the *first* catalog and grant that role to the principal role - CatalogRole catalogAdminRole = managementApi.getCatalogRole(catalogName, "catalog_admin"); + CatalogRole catalogAdminRole = + managementApi.getCatalogRole( + catalogName, PolarisEntityConstants.getNameOfCatalogAdminRole()); managementApi.grantCatalogRoleToPrincipalRole(principalRoleName, catalogName, catalogAdminRole); // Create a principal and grant the principal role to it diff --git a/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcMetaStoreManagerFactory.java b/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcMetaStoreManagerFactory.java index 43de79ec1dd..88fe2ab5000 100644 --- a/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcMetaStoreManagerFactory.java +++ b/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcMetaStoreManagerFactory.java @@ -26,6 +26,7 @@ import java.sql.SQLException; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import java.util.function.Supplier; import javax.sql.DataSource; import org.apache.polaris.core.PolarisCallContext; @@ -34,10 +35,8 @@ import org.apache.polaris.core.config.RealmConfig; import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.context.RealmContext; -import org.apache.polaris.core.entity.PolarisEntity; import org.apache.polaris.core.entity.PolarisEntityConstants; -import org.apache.polaris.core.entity.PolarisEntitySubType; -import org.apache.polaris.core.entity.PolarisEntityType; +import org.apache.polaris.core.entity.PrincipalEntity; import org.apache.polaris.core.persistence.AtomicOperationMetaStoreManager; import org.apache.polaris.core.persistence.BasePersistence; import org.apache.polaris.core.persistence.MetaStoreManagerFactory; @@ -51,7 +50,6 @@ import org.apache.polaris.core.persistence.cache.EntityCache; import org.apache.polaris.core.persistence.cache.InMemoryEntityCache; import org.apache.polaris.core.persistence.dao.entity.BaseResult; -import org.apache.polaris.core.persistence.dao.entity.EntityResult; import org.apache.polaris.core.persistence.dao.entity.PrincipalSecretsResult; import org.apache.polaris.core.storage.PolarisStorageIntegrationProvider; import org.slf4j.Logger; @@ -238,14 +236,9 @@ private PrincipalSecretsResult bootstrapServiceAndCreatePolarisPrincipalForRealm CallContext.setCurrentContext(polarisContext); } - EntityResult preliminaryRootPrincipalLookup = - metaStoreManager.readEntityByName( - polarisContext, - null, - PolarisEntityType.PRINCIPAL, - PolarisEntitySubType.NULL_SUBTYPE, - PolarisEntityConstants.getRootPrincipalName()); - if (preliminaryRootPrincipalLookup.isSuccess()) { + Optional preliminaryRootPrincipal = + metaStoreManager.findRootPrincipal(polarisContext); + if (preliminaryRootPrincipal.isPresent()) { String overrideMessage = "It appears this metastore manager has already been bootstrapped. " + "To continue bootstrapping, please first purge the metastore with the `purge` command."; @@ -255,16 +248,11 @@ private PrincipalSecretsResult bootstrapServiceAndCreatePolarisPrincipalForRealm metaStoreManager.bootstrapPolarisService(polarisContext); - EntityResult rootPrincipalLookup = - metaStoreManager.readEntityByName( - polarisContext, - null, - PolarisEntityType.PRINCIPAL, - PolarisEntitySubType.NULL_SUBTYPE, - PolarisEntityConstants.getRootPrincipalName()); + PrincipalEntity rootPrincipal = + metaStoreManager.findRootPrincipal(polarisContext).orElseThrow(); return metaStoreManager.loadPrincipalSecrets( polarisContext, - PolarisEntity.of(rootPrincipalLookup.getEntity()) + rootPrincipal .getInternalPropertiesAsMap() .get(PolarisEntityConstants.getClientIdPropertyName())); } @@ -286,15 +274,8 @@ private void checkPolarisServiceBootstrappedForRealm(RealmContext realmContext) CallContext.setCurrentContext(polarisContext); } - EntityResult rootPrincipalLookup = - metaStoreManager.readEntityByName( - polarisContext, - null, - PolarisEntityType.PRINCIPAL, - PolarisEntitySubType.NULL_SUBTYPE, - PolarisEntityConstants.getRootPrincipalName()); - - if (!rootPrincipalLookup.isSuccess()) { + Optional rootPrincipal = metaStoreManager.findRootPrincipal(polarisContext); + if (rootPrincipal.isEmpty()) { LOGGER.error( "\n\n Realm {} is not bootstrapped, could not load root principal. Please run Bootstrap command. \n\n", realmContext.getRealmIdentifier()); diff --git a/polaris-core/src/main/java/org/apache/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java b/polaris-core/src/main/java/org/apache/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java index 8b31096f7d2..bd6d13e40d6 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java @@ -22,6 +22,7 @@ import jakarta.annotation.Nullable; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import java.util.function.Supplier; import org.apache.polaris.core.PolarisCallContext; import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; @@ -29,15 +30,12 @@ import org.apache.polaris.core.config.RealmConfig; import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.context.RealmContext; -import org.apache.polaris.core.entity.PolarisEntity; import org.apache.polaris.core.entity.PolarisEntityConstants; -import org.apache.polaris.core.entity.PolarisEntitySubType; -import org.apache.polaris.core.entity.PolarisEntityType; +import org.apache.polaris.core.entity.PrincipalEntity; import org.apache.polaris.core.persistence.bootstrap.RootCredentialsSet; import org.apache.polaris.core.persistence.cache.EntityCache; import org.apache.polaris.core.persistence.cache.InMemoryEntityCache; import org.apache.polaris.core.persistence.dao.entity.BaseResult; -import org.apache.polaris.core.persistence.dao.entity.EntityResult; import org.apache.polaris.core.persistence.dao.entity.PrincipalSecretsResult; import org.apache.polaris.core.persistence.transactional.TransactionalMetaStoreManagerImpl; import org.apache.polaris.core.persistence.transactional.TransactionalPersistence; @@ -192,14 +190,9 @@ private PrincipalSecretsResult bootstrapServiceAndCreatePolarisPrincipalForRealm CallContext.setCurrentContext(polarisContext); } - EntityResult preliminaryRootPrincipalLookup = - metaStoreManager.readEntityByName( - polarisContext, - null, - PolarisEntityType.PRINCIPAL, - PolarisEntitySubType.NULL_SUBTYPE, - PolarisEntityConstants.getRootPrincipalName()); - if (preliminaryRootPrincipalLookup.isSuccess()) { + Optional preliminaryRootPrincipal = + metaStoreManager.findRootPrincipal(polarisContext); + if (preliminaryRootPrincipal.isPresent()) { String overrideMessage = "It appears this metastore manager has already been bootstrapped. " + "To continue bootstrapping, please first purge the metastore with the `purge` command."; @@ -209,16 +202,11 @@ private PrincipalSecretsResult bootstrapServiceAndCreatePolarisPrincipalForRealm metaStoreManager.bootstrapPolarisService(polarisContext); - EntityResult rootPrincipalLookup = - metaStoreManager.readEntityByName( - polarisContext, - null, - PolarisEntityType.PRINCIPAL, - PolarisEntitySubType.NULL_SUBTYPE, - PolarisEntityConstants.getRootPrincipalName()); + PrincipalEntity rootPrincipal = + metaStoreManager.findRootPrincipal(polarisContext).orElseThrow(); return metaStoreManager.loadPrincipalSecrets( polarisContext, - PolarisEntity.of(rootPrincipalLookup.getEntity()) + rootPrincipal .getInternalPropertiesAsMap() .get(PolarisEntityConstants.getClientIdPropertyName())); } @@ -240,15 +228,8 @@ private void checkPolarisServiceBootstrappedForRealm(RealmContext realmContext) CallContext.setCurrentContext(polarisContext); } - EntityResult rootPrincipalLookup = - metaStoreManager.readEntityByName( - polarisContext, - null, - PolarisEntityType.PRINCIPAL, - PolarisEntitySubType.NULL_SUBTYPE, - PolarisEntityConstants.getRootPrincipalName()); - - if (!rootPrincipalLookup.isSuccess()) { + Optional rootPrincipal = metaStoreManager.findRootPrincipal(polarisContext); + if (rootPrincipal.isEmpty()) { LOGGER.error( "\n\n Realm {} is not bootstrapped, could not load root principal. Please run Bootstrap command. \n\n", realmContext.getRealmIdentifier()); diff --git a/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisEntityManager.java b/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisEntityManager.java index 5f4c88af982..c2e347a19af 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisEntityManager.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisEntityManager.java @@ -25,7 +25,6 @@ import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.entity.PolarisEntity; import org.apache.polaris.core.entity.PolarisEntityConstants; -import org.apache.polaris.core.entity.PolarisEntitySubType; import org.apache.polaris.core.entity.PolarisEntityType; import org.apache.polaris.core.entity.PolarisGrantRecord; import org.apache.polaris.core.entity.PolarisPrivilege; @@ -82,15 +81,11 @@ private synchronized ResolvedPolarisEntity getSimulatedResolvedRootContainerEnti // root entity, then we must actually create a representation of this root entity in the // entity store itself. PolarisEntity serviceAdminPrincipalRole = - PolarisEntity.of( - metaStoreManager - .readEntityByName( - callContext.getPolarisCallContext(), - null, - PolarisEntityType.PRINCIPAL_ROLE, - PolarisEntitySubType.NULL_SUBTYPE, - PolarisEntityConstants.getNameOfPrincipalServiceAdminRole()) - .getEntity()); + metaStoreManager + .findPrincipalRoleByName( + callContext.getPolarisCallContext(), + PolarisEntityConstants.getNameOfPrincipalServiceAdminRole()) + .orElse(null); if (serviceAdminPrincipalRole == null) { throw new IllegalStateException("Failed to resolve service_admin PrincipalRole"); } diff --git a/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManager.java b/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManager.java index b2fec2ddd87..67175e21fba 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManager.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/persistence/PolarisMetaStoreManager.java @@ -29,10 +29,13 @@ import org.apache.polaris.core.entity.LocationBasedEntity; import org.apache.polaris.core.entity.PolarisBaseEntity; import org.apache.polaris.core.entity.PolarisEntity; +import org.apache.polaris.core.entity.PolarisEntityConstants; import org.apache.polaris.core.entity.PolarisEntityCore; import org.apache.polaris.core.entity.PolarisEntityId; import org.apache.polaris.core.entity.PolarisEntitySubType; import org.apache.polaris.core.entity.PolarisEntityType; +import org.apache.polaris.core.entity.PrincipalEntity; +import org.apache.polaris.core.entity.PrincipalRoleEntity; import org.apache.polaris.core.persistence.dao.entity.BaseResult; import org.apache.polaris.core.persistence.dao.entity.ChangeTrackingResult; import org.apache.polaris.core.persistence.dao.entity.CreateCatalogResult; @@ -418,4 +421,38 @@ Optional> hasOverlappingSiblings( default boolean requiresEntityReload() { return true; } + + default Optional findRootPrincipal(PolarisCallContext polarisCallContext) { + return findPrincipalByName(polarisCallContext, PolarisEntityConstants.getRootPrincipalName()); + } + + default Optional findPrincipalByName( + PolarisCallContext polarisCallContext, String principalName) { + EntityResult entityResult = + readEntityByName( + polarisCallContext, + null, + PolarisEntityType.PRINCIPAL, + PolarisEntitySubType.NULL_SUBTYPE, + principalName); + if (!entityResult.isSuccess()) { + return Optional.empty(); + } + return Optional.of(entityResult.getEntity()).map(PrincipalEntity::of); + } + + default Optional findPrincipalRoleByName( + PolarisCallContext polarisCallContext, String principalRoleName) { + EntityResult entityResult = + readEntityByName( + polarisCallContext, + null, + PolarisEntityType.PRINCIPAL_ROLE, + PolarisEntitySubType.NULL_SUBTYPE, + principalRoleName); + if (!entityResult.isSuccess()) { + return Optional.empty(); + } + return Optional.of(entityResult.getEntity()).map(PrincipalRoleEntity::of); + } } diff --git a/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/BaseResolverTest.java b/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/BaseResolverTest.java index 30fab4fb00f..c02dc4155a2 100644 --- a/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/BaseResolverTest.java +++ b/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/BaseResolverTest.java @@ -41,7 +41,6 @@ import org.apache.polaris.core.entity.PrincipalEntity; import org.apache.polaris.core.entity.PrincipalRoleEntity; import org.apache.polaris.core.persistence.cache.InMemoryEntityCache; -import org.apache.polaris.core.persistence.dao.entity.EntityResult; import org.apache.polaris.core.persistence.dao.entity.ResolvedEntityResult; import org.apache.polaris.core.persistence.resolver.Resolver; import org.apache.polaris.core.persistence.resolver.ResolverPath; @@ -477,17 +476,10 @@ private Resolver allocateResolver( scopes -> scopes.stream() .map( - role -> - metaStoreManager() - .readEntityByName( - callCtx(), - null, - PolarisEntityType.PRINCIPAL_ROLE, - PolarisEntitySubType.NULL_SUBTYPE, - role)) - .filter(EntityResult::isSuccess) - .map(EntityResult::getEntity) - .map(PrincipalRoleEntity::of) + roleName -> + metaStoreManager().findPrincipalRoleByName(callCtx(), roleName)) + .filter(Optional::isPresent) + .map(Optional::get) .collect(Collectors.toList())); AuthenticatedPolarisPrincipal authenticatedPrincipal = new AuthenticatedPolarisPrincipal( @@ -774,16 +766,10 @@ private Resolver resolveDriver( // the principal does not exist, check that this is the case if (principalName != null) { // see if the principal exists - EntityResult result = - metaStoreManager() - .readEntityByName( - callCtx(), - null, - PolarisEntityType.PRINCIPAL, - PolarisEntitySubType.NULL_SUBTYPE, - principalName); + Optional principal = + metaStoreManager().findPrincipalByName(callCtx(), principalName); // if found, ensure properly resolved - if (result.getEntity() != null) { + if (principal.isPresent()) { // the principal exist, check that this is the case this.ensureResolved( resolver.getResolvedEntity(PolarisEntityType.PRINCIPAL, principalName), diff --git a/runtime/service/src/test/java/org/apache/polaris/service/quarkus/admin/ManagementServiceTest.java b/runtime/service/src/test/java/org/apache/polaris/service/quarkus/admin/ManagementServiceTest.java index 94af5c9c776..4a4cad57b64 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/quarkus/admin/ManagementServiceTest.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/quarkus/admin/ManagementServiceTest.java @@ -209,7 +209,10 @@ private PolarisAdminService setupPolarisAdminService( @Override public Principal getUserPrincipal() { return new AuthenticatedPolarisPrincipal( - new PrincipalEntity.Builder().setName("root").build(), Set.of("service_admin")); + new PrincipalEntity.Builder() + .setName(PolarisEntityConstants.getRootPrincipalName()) + .build(), + Set.of(PolarisEntityConstants.getNameOfPrincipalServiceAdminRole())); } @Override diff --git a/runtime/service/src/test/java/org/apache/polaris/service/quarkus/admin/PolarisAuthzTestBase.java b/runtime/service/src/test/java/org/apache/polaris/service/quarkus/admin/PolarisAuthzTestBase.java index d1cd1161977..77770cd6b4f 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/quarkus/admin/PolarisAuthzTestBase.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/quarkus/admin/PolarisAuthzTestBase.java @@ -61,8 +61,6 @@ import org.apache.polaris.core.entity.CatalogEntity; import org.apache.polaris.core.entity.CatalogRoleEntity; import org.apache.polaris.core.entity.PolarisBaseEntity; -import org.apache.polaris.core.entity.PolarisEntity; -import org.apache.polaris.core.entity.PolarisEntitySubType; import org.apache.polaris.core.entity.PolarisEntityType; import org.apache.polaris.core.entity.PolarisPrivilege; import org.apache.polaris.core.entity.PrincipalEntity; @@ -245,19 +243,9 @@ public void before(TestInfo testInfo) { callContext = polarisContext; CallContext.setCurrentContext(callContext); - PrincipalEntity rootEntity = - new PrincipalEntity( - PolarisEntity.of( - metaStoreManager - .readEntityByName( - polarisContext, - null, - PolarisEntityType.PRINCIPAL, - PolarisEntitySubType.NULL_SUBTYPE, - "root") - .getEntity())); - - this.authenticatedRoot = new AuthenticatedPolarisPrincipal(rootEntity, Set.of()); + PrincipalEntity rootPrincipal = + metaStoreManager.findRootPrincipal(polarisContext).orElseThrow(); + this.authenticatedRoot = new AuthenticatedPolarisPrincipal(rootPrincipal, Set.of()); this.adminService = new PolarisAdminService( @@ -421,30 +409,15 @@ public void after() { String principalName, PrincipalWithCredentialsCredentials credentials, PolarisCallContext polarisContext) { - EntityResult lookupEntity = - metaStoreManager.readEntityByName( - callContext.getPolarisCallContext(), - null, - PolarisEntityType.PRINCIPAL, - PolarisEntitySubType.NULL_SUBTYPE, - principalName); + PrincipalEntity principal = + metaStoreManager.findPrincipalByName(polarisContext, principalName).orElseThrow(); metaStoreManager.rotatePrincipalSecrets( callContext.getPolarisCallContext(), credentials.getClientId(), - lookupEntity.getEntity().getId(), + principal.getId(), false, credentials.getClientSecret()); // This should actually be the secret's hash - - return new PrincipalEntity( - PolarisEntity.of( - metaStoreManager - .readEntityByName( - polarisContext, - null, - PolarisEntityType.PRINCIPAL, - PolarisEntitySubType.NULL_SUBTYPE, - principalName) - .getEntity())); + return metaStoreManager.findPrincipalByName(polarisContext, principalName).orElseThrow(); } /** diff --git a/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractIcebergCatalogTest.java b/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractIcebergCatalogTest.java index 4b60434d822..9405a8dbe94 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractIcebergCatalogTest.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractIcebergCatalogTest.java @@ -104,7 +104,6 @@ import org.apache.polaris.core.entity.PolarisBaseEntity; import org.apache.polaris.core.entity.PolarisEntity; import org.apache.polaris.core.entity.PolarisEntitySubType; -import org.apache.polaris.core.entity.PolarisEntityType; import org.apache.polaris.core.entity.PrincipalEntity; import org.apache.polaris.core.entity.TaskEntity; import org.apache.polaris.core.persistence.MetaStoreManagerFactory; @@ -299,20 +298,10 @@ public void before(TestInfo testInfo) { // the CallContext.setCurrentContext() but never clears it, whereas the NoSQL one resets it. CallContext.setCurrentContext(polarisContext); - PrincipalEntity rootEntity = - new PrincipalEntity( - PolarisEntity.of( - metaStoreManager - .readEntityByName( - polarisContext, - null, - PolarisEntityType.PRINCIPAL, - PolarisEntitySubType.NULL_SUBTYPE, - "root") - .getEntity())); - + PrincipalEntity rootPrincipal = + metaStoreManager.findRootPrincipal(polarisContext).orElseThrow(); AuthenticatedPolarisPrincipal authenticatedRoot = - new AuthenticatedPolarisPrincipal(rootEntity, Set.of()); + new AuthenticatedPolarisPrincipal(rootPrincipal, Set.of()); securityContext = Mockito.mock(SecurityContext.class); when(securityContext.getUserPrincipal()).thenReturn(authenticatedRoot); diff --git a/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractIcebergCatalogViewTest.java b/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractIcebergCatalogViewTest.java index ddcd71fb40c..7c587f7bc83 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractIcebergCatalogViewTest.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractIcebergCatalogViewTest.java @@ -48,9 +48,6 @@ import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.CatalogEntity; -import org.apache.polaris.core.entity.PolarisEntity; -import org.apache.polaris.core.entity.PolarisEntitySubType; -import org.apache.polaris.core.entity.PolarisEntityType; import org.apache.polaris.core.entity.PrincipalEntity; import org.apache.polaris.core.persistence.MetaStoreManagerFactory; import org.apache.polaris.core.persistence.PolarisEntityManager; @@ -172,19 +169,10 @@ public void before(TestInfo testInfo) { CallContext.setCurrentContext(polarisContext); - PrincipalEntity rootEntity = - new PrincipalEntity( - PolarisEntity.of( - metaStoreManager - .readEntityByName( - polarisContext, - null, - PolarisEntityType.PRINCIPAL, - PolarisEntitySubType.NULL_SUBTYPE, - "root") - .getEntity())); + PrincipalEntity rootPrincipal = + metaStoreManager.findRootPrincipal(polarisContext).orElseThrow(); AuthenticatedPolarisPrincipal authenticatedRoot = - new AuthenticatedPolarisPrincipal(rootEntity, Set.of()); + new AuthenticatedPolarisPrincipal(rootPrincipal, Set.of()); SecurityContext securityContext = Mockito.mock(SecurityContext.class); when(securityContext.getUserPrincipal()).thenReturn(authenticatedRoot); diff --git a/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractPolarisGenericTableCatalogTest.java b/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractPolarisGenericTableCatalogTest.java index 49d8659b36b..5b216ceac66 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractPolarisGenericTableCatalogTest.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractPolarisGenericTableCatalogTest.java @@ -49,8 +49,6 @@ import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.CatalogEntity; import org.apache.polaris.core.entity.PolarisEntity; -import org.apache.polaris.core.entity.PolarisEntitySubType; -import org.apache.polaris.core.entity.PolarisEntityType; import org.apache.polaris.core.entity.PrincipalEntity; import org.apache.polaris.core.entity.table.GenericTableEntity; import org.apache.polaris.core.persistence.MetaStoreManagerFactory; @@ -160,19 +158,9 @@ public void before(TestInfo testInfo) { entityManager = new PolarisEntityManager(metaStoreManager, resolverFactory); - PrincipalEntity rootEntity = - new PrincipalEntity( - PolarisEntity.of( - metaStoreManager - .readEntityByName( - polarisContext, - null, - PolarisEntityType.PRINCIPAL, - PolarisEntitySubType.NULL_SUBTYPE, - "root") - .getEntity())); - - authenticatedRoot = new AuthenticatedPolarisPrincipal(rootEntity, Set.of()); + PrincipalEntity rootPrincipal = + metaStoreManager.findRootPrincipal(polarisContext).orElseThrow(); + authenticatedRoot = new AuthenticatedPolarisPrincipal(rootPrincipal, Set.of()); securityContext = Mockito.mock(SecurityContext.class); when(securityContext.getUserPrincipal()).thenReturn(authenticatedRoot); diff --git a/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractPolicyCatalogTest.java b/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractPolicyCatalogTest.java index e936903ba2c..3853b4efd1e 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractPolicyCatalogTest.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/quarkus/catalog/AbstractPolicyCatalogTest.java @@ -57,8 +57,6 @@ import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.CatalogEntity; import org.apache.polaris.core.entity.PolarisEntity; -import org.apache.polaris.core.entity.PolarisEntitySubType; -import org.apache.polaris.core.entity.PolarisEntityType; import org.apache.polaris.core.entity.PrincipalEntity; import org.apache.polaris.core.persistence.MetaStoreManagerFactory; import org.apache.polaris.core.persistence.PolarisEntityManager; @@ -185,19 +183,9 @@ public void before(TestInfo testInfo) { callContext = polarisContext; - PrincipalEntity rootEntity = - new PrincipalEntity( - PolarisEntity.of( - metaStoreManager - .readEntityByName( - polarisContext, - null, - PolarisEntityType.PRINCIPAL, - PolarisEntitySubType.NULL_SUBTYPE, - "root") - .getEntity())); - - authenticatedRoot = new AuthenticatedPolarisPrincipal(rootEntity, Set.of()); + PrincipalEntity rootPrincipal = + metaStoreManager.findRootPrincipal(polarisContext).orElseThrow(); + authenticatedRoot = new AuthenticatedPolarisPrincipal(rootPrincipal, Set.of()); securityContext = Mockito.mock(SecurityContext.class); when(securityContext.getUserPrincipal()).thenReturn(authenticatedRoot); diff --git a/runtime/service/src/test/java/org/apache/polaris/service/quarkus/test/PolarisIntegrationTestFixture.java b/runtime/service/src/test/java/org/apache/polaris/service/quarkus/test/PolarisIntegrationTestFixture.java index efb4eb1df0a..a01d4b5d2b9 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/quarkus/test/PolarisIntegrationTestFixture.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/quarkus/test/PolarisIntegrationTestFixture.java @@ -38,14 +38,11 @@ import org.apache.polaris.core.admin.model.PrincipalWithCredentials; import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.context.RealmContext; -import org.apache.polaris.core.entity.PolarisEntityConstants; -import org.apache.polaris.core.entity.PolarisEntitySubType; -import org.apache.polaris.core.entity.PolarisEntityType; import org.apache.polaris.core.entity.PolarisPrincipalSecrets; +import org.apache.polaris.core.entity.PrincipalEntity; import org.apache.polaris.core.persistence.BasePersistence; import org.apache.polaris.core.persistence.PolarisMetaStoreManager; import org.apache.polaris.core.persistence.bootstrap.RootCredentialsSet; -import org.apache.polaris.core.persistence.dao.entity.EntityResult; import org.apache.polaris.service.persistence.InMemoryPolarisMetaStoreManagerFactory; import org.apache.polaris.service.quarkus.auth.TokenUtils; import org.junit.jupiter.api.TestInfo; @@ -122,14 +119,7 @@ private PolarisPrincipalSecrets fetchAdminSecrets() { try { PolarisMetaStoreManager metaStoreManager = helper.metaStoreManagerFactory.getOrCreateMetaStoreManager(realmContext); - EntityResult principal = - metaStoreManager.readEntityByName( - polarisContext, - null, - PolarisEntityType.PRINCIPAL, - PolarisEntitySubType.NULL_SUBTYPE, - PolarisEntityConstants.getRootPrincipalName()); - + PrincipalEntity principal = metaStoreManager.findRootPrincipal(polarisContext).orElseThrow(); Map propertiesMap = readInternalProperties(principal); return metaStoreManager .loadPrincipalSecrets(polarisContext, propertiesMap.get("client_id")) @@ -233,10 +223,10 @@ public void destroy() { } } - private Map readInternalProperties(EntityResult principal) { + private Map readInternalProperties(PrincipalEntity principal) { try { return helper.objectMapper.readValue( - principal.getEntity().getInternalProperties(), new TypeReference<>() {}); + principal.getInternalProperties(), new TypeReference<>() {}); } catch (JsonProcessingException e) { throw new RuntimeException(e); } diff --git a/service/common/src/main/java/org/apache/polaris/service/auth/DefaultAuthenticator.java b/service/common/src/main/java/org/apache/polaris/service/auth/DefaultAuthenticator.java index c039bb82f90..eca25ceff9d 100644 --- a/service/common/src/main/java/org/apache/polaris/service/auth/DefaultAuthenticator.java +++ b/service/common/src/main/java/org/apache/polaris/service/auth/DefaultAuthenticator.java @@ -30,7 +30,6 @@ import org.apache.polaris.core.auth.AuthenticatedPolarisPrincipal; import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.entity.PolarisEntity; -import org.apache.polaris.core.entity.PolarisEntitySubType; import org.apache.polaris.core.entity.PolarisEntityType; import org.apache.polaris.core.entity.PrincipalEntity; import org.apache.polaris.core.persistence.MetaStoreManagerFactory; @@ -76,13 +75,10 @@ public Optional authenticate(PrincipalAuthInfo cr PolarisEntityType.PRINCIPAL)); } else if (credentials.getPrincipalName() != null) { principal = - PolarisEntity.of( - metaStoreManager.readEntityByName( - callContext.getPolarisCallContext(), - null, - PolarisEntityType.PRINCIPAL, - PolarisEntitySubType.NULL_SUBTYPE, - credentials.getPrincipalName())); + metaStoreManager + .findPrincipalByName( + callContext.getPolarisCallContext(), credentials.getPrincipalName()) + .orElse(null); } } catch (Exception e) { LOGGER