This is an automated email from the ASF dual-hosted git repository.
snazy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/polaris.git
The following commit(s) were added to refs/heads/main by this push:
new e46f8c642 Add Principal lookup helpers to PolarisMetaStoreManager
(#2174)
e46f8c642 is described below
commit e46f8c64214b0f3db56b2efcf2879e4c632435aa
Author: Christopher Lambert <[email protected]>
AuthorDate: Mon Jul 28 09:12:59 2025 +0200
Add Principal lookup helpers to PolarisMetaStoreManager (#2174)
`PolarisMetaStoreManager.readEntityByName` is quite a low-level api, so we
can simplify a lot of callers with additional helpers:
- add `PolarisMetaStoreManager.findRootPrincipal`
- add `PolarisMetaStoreManager.findPrincipalByName`
- add `PolarisMetaStoreManager.findPrincipalRoleByName`
also we now prefer `PolarisEntityConstants` where applicable
---
.../polaris/service/it/env/ManagementApi.java | 3 +-
.../PolarisManagementServiceIntegrationTest.java | 17 ++++++---
.../jdbc/JdbcMetaStoreManagerFactory.java | 39 ++++++--------------
.../LocalPolarisMetaStoreManagerFactory.java | 39 ++++++--------------
.../core/persistence/PolarisEntityManager.java | 15 +++-----
.../core/persistence/PolarisMetaStoreManager.java | 37 +++++++++++++++++++
.../polaris/core/persistence/BaseResolverTest.java | 28 ++++-----------
.../quarkus/admin/ManagementServiceTest.java | 5 ++-
.../quarkus/admin/PolarisAuthzTestBase.java | 41 ++++------------------
.../catalog/AbstractIcebergCatalogTest.java | 17 ++-------
.../catalog/AbstractIcebergCatalogViewTest.java | 18 ++--------
.../AbstractPolarisGenericTableCatalogTest.java | 18 ++--------
.../quarkus/catalog/AbstractPolicyCatalogTest.java | 18 ++--------
.../test/PolarisIntegrationTestFixture.java | 18 +++-------
.../polaris/service/auth/DefaultAuthenticator.java | 12 +++----
15 files changed, 115 insertions(+), 210 deletions(-)
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 f2adf3014..72c66cd12 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.PrincipalRoles;
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 class ManagementApi extends RestApi {
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 b10c27c1a..2bbd3830c 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 class PolarisManagementServiceIntegrationTest {
.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 class PolarisManagementServiceIntegrationTest {
.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 class PolarisManagementServiceIntegrationTest {
// 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 class PolarisManagementServiceIntegrationTest {
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 43de79ec1..88fe2ab50 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 jakarta.inject.Inject;
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.PolarisDiagnostics;
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.bootstrap.SchemaOptions;
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 @@ public class JdbcMetaStoreManagerFactory implements
MetaStoreManagerFactory {
CallContext.setCurrentContext(polarisContext);
}
- EntityResult preliminaryRootPrincipalLookup =
- metaStoreManager.readEntityByName(
- polarisContext,
- null,
- PolarisEntityType.PRINCIPAL,
- PolarisEntitySubType.NULL_SUBTYPE,
- PolarisEntityConstants.getRootPrincipalName());
- if (preliminaryRootPrincipalLookup.isSuccess()) {
+ Optional<PrincipalEntity> 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 @@ public class JdbcMetaStoreManagerFactory implements
MetaStoreManagerFactory {
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 @@ public class JdbcMetaStoreManagerFactory implements
MetaStoreManagerFactory {
CallContext.setCurrentContext(polarisContext);
}
- EntityResult rootPrincipalLookup =
- metaStoreManager.readEntityByName(
- polarisContext,
- null,
- PolarisEntityType.PRINCIPAL,
- PolarisEntitySubType.NULL_SUBTYPE,
- PolarisEntityConstants.getRootPrincipalName());
-
- if (!rootPrincipalLookup.isSuccess()) {
+ Optional<PrincipalEntity> 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 8b31096f7..bd6d13e40 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.Nonnull;
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.PolarisDiagnostics;
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 @@ public abstract class
LocalPolarisMetaStoreManagerFactory<StoreType>
CallContext.setCurrentContext(polarisContext);
}
- EntityResult preliminaryRootPrincipalLookup =
- metaStoreManager.readEntityByName(
- polarisContext,
- null,
- PolarisEntityType.PRINCIPAL,
- PolarisEntitySubType.NULL_SUBTYPE,
- PolarisEntityConstants.getRootPrincipalName());
- if (preliminaryRootPrincipalLookup.isSuccess()) {
+ Optional<PrincipalEntity> 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 @@ public abstract class
LocalPolarisMetaStoreManagerFactory<StoreType>
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 @@ public abstract class
LocalPolarisMetaStoreManagerFactory<StoreType>
CallContext.setCurrentContext(polarisContext);
}
- EntityResult rootPrincipalLookup =
- metaStoreManager.readEntityByName(
- polarisContext,
- null,
- PolarisEntityType.PRINCIPAL,
- PolarisEntitySubType.NULL_SUBTYPE,
- PolarisEntityConstants.getRootPrincipalName());
-
- if (!rootPrincipalLookup.isSuccess()) {
+ Optional<PrincipalEntity> 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 5f4c88af9..c2e347a19 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 java.util.List;
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 @@ public class PolarisEntityManager {
// 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 b2fec2ddd..67175e21f 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.auth.PolarisSecretsManager;
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 @@ public interface PolarisMetaStoreManager
default boolean requiresEntityReload() {
return true;
}
+
+ default Optional<PrincipalEntity> findRootPrincipal(PolarisCallContext
polarisCallContext) {
+ return findPrincipalByName(polarisCallContext,
PolarisEntityConstants.getRootPrincipalName());
+ }
+
+ default Optional<PrincipalEntity> 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<PrincipalRoleEntity> 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 30fab4fb0..c02dc4155 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.PolarisPrivilege;
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 @@ public abstract class BaseResolverTest {
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 @@ public abstract class BaseResolverTest {
// 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<PrincipalEntity> 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 94af5c9c7..4a4cad57b 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 @@ public class ManagementServiceTest {
@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 d1cd11619..77770cd6b 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.context.RealmContext;
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 abstract class PolarisAuthzTestBase {
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 abstract class PolarisAuthzTestBase {
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 d1d3868ad..f891301e1 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
@@ -103,7 +103,6 @@ import org.apache.polaris.core.entity.CatalogEntity;
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;
@@ -298,20 +297,10 @@ public abstract class AbstractIcebergCatalogTest extends
CatalogTests<IcebergCat
// 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 ddcd71fb4..7c587f7bc 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.config.PolarisConfigurationStore;
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 abstract class AbstractIcebergCatalogViewTest
extends ViewCatalogTests<Ic
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 49d8659b3..5b216ceac 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.config.PolarisConfigurationStore;
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 abstract class
AbstractPolarisGenericTableCatalogTest {
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 e936903ba..3853b4efd 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.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;
@@ -185,19 +183,9 @@ public abstract class AbstractPolicyCatalogTest {
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 efb4eb1df..a01d4b5d2 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.PrincipalRole;
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 @@ public class PolarisIntegrationTestFixture {
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<String, String> propertiesMap = readInternalProperties(principal);
return metaStoreManager
.loadPrincipalSecrets(polarisContext, propertiesMap.get("client_id"))
@@ -233,10 +223,10 @@ public class PolarisIntegrationTestFixture {
}
}
- private Map<String, String> readInternalProperties(EntityResult principal) {
+ private Map<String, String> 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 c039bb82f..eca25ceff 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.iceberg.exceptions.ServiceFailureException;
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 class DefaultAuthenticator
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