This is an automated email from the ASF dual-hosted git repository.

dimas 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 3c5dbaf2b Add findPrincipalById helper (#2810)
3c5dbaf2b is described below

commit 3c5dbaf2bc93bb2861b5fb0407ffc1597e48bdd2
Author: Christopher Lambert <[email protected]>
AuthorDate: Fri Oct 17 19:39:21 2025 +0200

    Add findPrincipalById helper (#2810)
    
    * Add findPrincipalById helper
    
    this simplifies frequent usage of the lower level `loadEntity` api (similar 
to the
    existing `findPrincipalByName` helper)
---
 .../AtomicOperationMetaStoreManager.java           | 15 +++++------
 .../core/persistence/PolarisMetaStoreManager.java  | 14 ++++++++++
 .../persistence/PolarisTestMetaStoreManager.java   | 31 +++++++++-------------
 .../polaris/service/admin/PolarisAdminService.java | 18 +++++++------
 .../polaris/service/auth/DefaultAuthenticator.java | 12 +++------
 .../service/auth/internal/broker/JWTBroker.java    | 22 ++++-----------
 .../broker/JWTSymmetricKeyGeneratorTest.java       | 24 ++++++-----------
 .../internal/broker/RSAKeyPairJWTBrokerTest.java   | 24 ++++++-----------
 8 files changed, 68 insertions(+), 92 deletions(-)

diff --git 
a/polaris-core/src/main/java/org/apache/polaris/core/persistence/AtomicOperationMetaStoreManager.java
 
b/polaris-core/src/main/java/org/apache/polaris/core/persistence/AtomicOperationMetaStoreManager.java
index e2c46c151..c3841486a 100644
--- 
a/polaris-core/src/main/java/org/apache/polaris/core/persistence/AtomicOperationMetaStoreManager.java
+++ 
b/polaris-core/src/main/java/org/apache/polaris/core/persistence/AtomicOperationMetaStoreManager.java
@@ -844,14 +844,12 @@ public class AtomicOperationMetaStoreManager extends 
BaseMetaStoreManager {
     BasePersistence ms = callCtx.getMetaStore();
 
     // if not found, the principal must have been dropped
-    EntityResult loadEntityResult =
-        loadEntity(
-            callCtx, PolarisEntityConstants.getNullId(), principalId, 
PolarisEntityType.PRINCIPAL);
-    if (loadEntityResult.getReturnStatus() != BaseResult.ReturnStatus.SUCCESS) 
{
+    Optional<PrincipalEntity> principalLookup = findPrincipalById(callCtx, 
principalId);
+    if (principalLookup.isEmpty()) {
       return new 
PrincipalSecretsResult(BaseResult.ReturnStatus.ENTITY_NOT_FOUND, null);
     }
 
-    PolarisBaseEntity principal = loadEntityResult.getEntity();
+    PrincipalEntity principal = principalLookup.get();
     Map<String, String> internalProps = principal.getInternalPropertiesAsMap();
 
     boolean doReset =
@@ -895,11 +893,10 @@ public class AtomicOperationMetaStoreManager extends 
BaseMetaStoreManager {
       String customClientSecret) {
     // get metastore we should be using
     BasePersistence ms = callCtx.getMetaStore();
+
     // if not found, the principal must have been dropped
-    EntityResult loadEntityResult =
-        loadEntity(
-            callCtx, PolarisEntityConstants.getNullId(), principalId, 
PolarisEntityType.PRINCIPAL);
-    if (loadEntityResult.getReturnStatus() != BaseResult.ReturnStatus.SUCCESS) 
{
+    Optional<PrincipalEntity> principalEntity = findPrincipalById(callCtx, 
principalId);
+    if (principalEntity.isEmpty()) {
       return new 
PrincipalSecretsResult(BaseResult.ReturnStatus.ENTITY_NOT_FOUND, null);
     }
 
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 566b10e64..cf3912fa9 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
@@ -470,6 +470,20 @@ public interface PolarisMetaStoreManager
     return findPrincipalByName(polarisCallContext, 
PolarisEntityConstants.getRootPrincipalName());
   }
 
+  default Optional<PrincipalEntity> findPrincipalById(
+      PolarisCallContext polarisCallContext, long principalId) {
+    EntityResult loadResult =
+        loadEntity(
+            polarisCallContext,
+            PolarisEntityConstants.getNullId(),
+            principalId,
+            PolarisEntityType.PRINCIPAL);
+    if (!loadResult.isSuccess()) {
+      return Optional.empty();
+    }
+    return Optional.of(loadResult.getEntity()).map(PrincipalEntity::of);
+  }
+
   default Optional<PrincipalEntity> findPrincipalByName(
       PolarisCallContext polarisCallContext, String principalName) {
     EntityResult entityResult =
diff --git 
a/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/PolarisTestMetaStoreManager.java
 
b/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/PolarisTestMetaStoreManager.java
index 514a14c30..c8e486ee6 100644
--- 
a/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/PolarisTestMetaStoreManager.java
+++ 
b/polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/PolarisTestMetaStoreManager.java
@@ -404,7 +404,7 @@ public class PolarisTestMetaStoreManager {
   }
 
   /** Create a principal */
-  PolarisBaseEntity createPrincipal(String name) {
+  PrincipalEntity createPrincipal(String name) {
     // create new principal identity
     PrincipalEntity principalEntity =
         new PrincipalEntity.Builder()
@@ -490,14 +490,11 @@ public class PolarisTestMetaStoreManager {
             .getPrincipalSecrets();
     
Assertions.assertThat(secrets.getMainSecret()).isNotEqualTo(reloadSecrets.getMainSecret());
 
-    PolarisBaseEntity reloadPrincipal =
+    PrincipalEntity reloadPrincipal =
         polarisMetaStoreManager
-            .loadEntity(
-                this.polarisCallContext,
-                0L,
-                createPrincipalResult.getPrincipal().getId(),
-                createPrincipalResult.getPrincipal().getType())
-            .getEntity();
+            .findPrincipalById(
+                this.polarisCallContext, 
createPrincipalResult.getPrincipal().getId())
+            .orElseThrow();
     internalProperties = reloadPrincipal.getInternalPropertiesAsMap();
     Assertions.assertThat(
             internalProperties.get(
@@ -549,11 +546,10 @@ public class PolarisTestMetaStoreManager {
     
Assertions.assertThat(reloadSecrets.getMainSecretHash()).isNotEqualTo(newMainSecretHash);
     
Assertions.assertThat(reloadSecrets.getSecondarySecretHash()).isNotEqualTo(newMainSecretHash);
 
-    PolarisBaseEntity newPrincipal =
+    PrincipalEntity newPrincipal =
         polarisMetaStoreManager
-            .loadEntity(
-                this.polarisCallContext, 0L, principalEntity.getId(), 
principalEntity.getType())
-            .getEntity();
+            .findPrincipalById(this.polarisCallContext, 
principalEntity.getId())
+            .orElseThrow();
     internalProperties = newPrincipal.getInternalPropertiesAsMap();
     Assertions.assertThat(
             internalProperties.get(
@@ -582,11 +578,10 @@ public class PolarisTestMetaStoreManager {
     Assertions.assertThat(postResetCredentials.getSecondarySecretHash())
         .isNotEqualTo(reloadSecrets.getSecondarySecretHash());
 
-    PolarisBaseEntity finalPrincipal =
+    PrincipalEntity finalPrincipal =
         polarisMetaStoreManager
-            .loadEntity(
-                this.polarisCallContext, 0L, principalEntity.getId(), 
principalEntity.getType())
-            .getEntity();
+            .findPrincipalById(this.polarisCallContext, 
principalEntity.getId())
+            .orElseThrow();
     internalProperties = finalPrincipal.getInternalPropertiesAsMap();
     Assertions.assertThat(
             internalProperties.get(
@@ -1342,8 +1337,8 @@ public class PolarisTestMetaStoreManager {
     grantToGrantee(catalog, R2, PR2, PolarisPrivilege.CATALOG_ROLE_USAGE);
 
     // also create two new principals
-    PolarisBaseEntity P1 = this.createPrincipal("P1");
-    PolarisBaseEntity P2 = this.createPrincipal("P2");
+    PrincipalEntity P1 = this.createPrincipal("P1");
+    PrincipalEntity P2 = this.createPrincipal("P2");
 
     // assign PR1 and PR2 to this principal
     grantToGrantee(null, PR1, P1, PolarisPrivilege.PRINCIPAL_ROLE_USAGE);
diff --git 
a/runtime/service/src/main/java/org/apache/polaris/service/admin/PolarisAdminService.java
 
b/runtime/service/src/main/java/org/apache/polaris/service/admin/PolarisAdminService.java
index 9c9074dba..67ae7ad6e 100644
--- 
a/runtime/service/src/main/java/org/apache/polaris/service/admin/PolarisAdminService.java
+++ 
b/runtime/service/src/main/java/org/apache/polaris/service/admin/PolarisAdminService.java
@@ -1182,15 +1182,17 @@ public class PolarisAdminService {
               "Failed to %s secrets for principal '%s'",
               shouldReset ? "reset" : "rotate", principalName));
     }
-    PolarisEntity newPrincipal =
-        PolarisEntity.of(
-            metaStoreManager.loadEntity(
-                getCurrentPolarisContext(),
-                0L,
-                currentPrincipalEntity.getId(),
-                currentPrincipalEntity.getType()));
+    Optional<PrincipalEntity> updatedPrincipalEntity =
+        metaStoreManager.findPrincipalById(
+            getCurrentPolarisContext(), currentPrincipalEntity.getId());
+    if (updatedPrincipalEntity.isEmpty()) {
+      throw new IllegalStateException(
+          String.format(
+              "Failed to reload principal '%s' by id: %s",
+              principalName, currentPrincipalEntity.getId()));
+    }
     return new PrincipalWithCredentials(
-        PrincipalEntity.of(newPrincipal).asPrincipal(),
+        updatedPrincipalEntity.get().asPrincipal(),
         new PrincipalWithCredentialsCredentials(
             newSecrets.getPrincipalClientId(), newSecrets.getMainSecret()));
   }
diff --git 
a/runtime/service/src/main/java/org/apache/polaris/service/auth/DefaultAuthenticator.java
 
b/runtime/service/src/main/java/org/apache/polaris/service/auth/DefaultAuthenticator.java
index 9abc75e38..83a3a419d 100644
--- 
a/runtime/service/src/main/java/org/apache/polaris/service/auth/DefaultAuthenticator.java
+++ 
b/runtime/service/src/main/java/org/apache/polaris/service/auth/DefaultAuthenticator.java
@@ -115,14 +115,10 @@ public class DefaultAuthenticator implements 
Authenticator {
       // otherwise, use the principal name to load the entity.
       if (credentials.getPrincipalId() != null && credentials.getPrincipalId() 
> 0) {
         principal =
-            PrincipalEntity.of(
-                metaStoreManager
-                    .loadEntity(
-                        callContext.getPolarisCallContext(),
-                        0L,
-                        credentials.getPrincipalId(),
-                        PolarisEntityType.PRINCIPAL)
-                    .getEntity());
+            metaStoreManager
+                .findPrincipalById(
+                    callContext.getPolarisCallContext(), 
credentials.getPrincipalId())
+                .orElse(null);
       } else if (credentials.getPrincipalName() != null) {
         principal =
             metaStoreManager
diff --git 
a/runtime/service/src/main/java/org/apache/polaris/service/auth/internal/broker/JWTBroker.java
 
b/runtime/service/src/main/java/org/apache/polaris/service/auth/internal/broker/JWTBroker.java
index 1cb13f5aa..71ea0d054 100644
--- 
a/runtime/service/src/main/java/org/apache/polaris/service/auth/internal/broker/JWTBroker.java
+++ 
b/runtime/service/src/main/java/org/apache/polaris/service/auth/internal/broker/JWTBroker.java
@@ -28,10 +28,8 @@ import java.util.Optional;
 import java.util.UUID;
 import org.apache.iceberg.exceptions.NotAuthorizedException;
 import org.apache.polaris.core.PolarisCallContext;
-import org.apache.polaris.core.entity.PolarisEntityType;
 import org.apache.polaris.core.entity.PrincipalEntity;
 import org.apache.polaris.core.persistence.PolarisMetaStoreManager;
-import org.apache.polaris.core.persistence.dao.entity.EntityResult;
 import org.apache.polaris.core.persistence.dao.entity.PrincipalSecretsResult;
 import org.apache.polaris.service.auth.DefaultAuthenticator;
 import org.apache.polaris.service.auth.PolarisCredential;
@@ -106,11 +104,9 @@ public abstract class JWTBroker implements TokenBroker {
       LOGGER.error("Failed to verify the token", e.getCause());
       return TokenResponse.of(OAuthError.invalid_client);
     }
-    EntityResult principalLookup =
-        metaStoreManager.loadEntity(
-            polarisCallContext, 0L, decodedToken.getPrincipalId(), 
PolarisEntityType.PRINCIPAL);
-    if (!principalLookup.isSuccess()
-        || principalLookup.getEntity().getType() != 
PolarisEntityType.PRINCIPAL) {
+    Optional<PrincipalEntity> principalLookup =
+        metaStoreManager.findPrincipalById(polarisCallContext, 
decodedToken.getPrincipalId());
+    if (principalLookup.isEmpty()) {
       return TokenResponse.of(OAuthError.unauthorized_client);
     }
     String tokenString =
@@ -191,15 +187,7 @@ public abstract class JWTBroker implements TokenBroker {
     if (!principalSecrets.getPrincipalSecrets().matchesSecret(clientSecret)) {
       return Optional.empty();
     }
-    EntityResult result =
-        metaStoreManager.loadEntity(
-            polarisCallContext,
-            0L,
-            principalSecrets.getPrincipalSecrets().getPrincipalId(),
-            PolarisEntityType.PRINCIPAL);
-    if (!result.isSuccess() || result.getEntity().getType() != 
PolarisEntityType.PRINCIPAL) {
-      return Optional.empty();
-    }
-    return Optional.of(PrincipalEntity.of(result.getEntity()));
+    return metaStoreManager.findPrincipalById(
+        polarisCallContext, 
principalSecrets.getPrincipalSecrets().getPrincipalId());
   }
 }
diff --git 
a/runtime/service/src/test/java/org/apache/polaris/service/auth/internal/broker/JWTSymmetricKeyGeneratorTest.java
 
b/runtime/service/src/test/java/org/apache/polaris/service/auth/internal/broker/JWTSymmetricKeyGeneratorTest.java
index e3ff0518e..651fc1a9d 100644
--- 
a/runtime/service/src/test/java/org/apache/polaris/service/auth/internal/broker/JWTSymmetricKeyGeneratorTest.java
+++ 
b/runtime/service/src/test/java/org/apache/polaris/service/auth/internal/broker/JWTSymmetricKeyGeneratorTest.java
@@ -24,13 +24,11 @@ import com.auth0.jwt.JWT;
 import com.auth0.jwt.JWTVerifier;
 import com.auth0.jwt.algorithms.Algorithm;
 import com.auth0.jwt.interfaces.DecodedJWT;
+import java.util.Optional;
 import org.apache.polaris.core.PolarisCallContext;
-import org.apache.polaris.core.entity.PolarisBaseEntity;
-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.PolarisMetaStoreManager;
-import org.apache.polaris.core.persistence.dao.entity.EntityResult;
 import org.apache.polaris.core.persistence.dao.entity.PrincipalSecretsResult;
 import org.apache.polaris.service.types.TokenType;
 import org.junit.jupiter.api.Test;
@@ -43,23 +41,17 @@ public class JWTSymmetricKeyGeneratorTest {
   public void testJWTSymmetricKeyGenerator() {
     PolarisCallContext polarisCallContext = new PolarisCallContext(null, null, 
null);
     PolarisMetaStoreManager metastoreManager = 
Mockito.mock(PolarisMetaStoreManager.class);
+    long principalId = 123L;
     String mainSecret = "test_secret";
     String clientId = "test_client_id";
     PolarisPrincipalSecrets principalSecrets =
-        new PolarisPrincipalSecrets(1L, clientId, mainSecret, "otherSecret");
+        new PolarisPrincipalSecrets(principalId, clientId, mainSecret, 
"otherSecret");
     Mockito.when(metastoreManager.loadPrincipalSecrets(polarisCallContext, 
clientId))
         .thenReturn(new PrincipalSecretsResult(principalSecrets));
-    PolarisBaseEntity principal =
-        new PolarisBaseEntity(
-            0L,
-            1L,
-            PolarisEntityType.PRINCIPAL,
-            PolarisEntitySubType.NULL_SUBTYPE,
-            0L,
-            "principal");
-    Mockito.when(
-            metastoreManager.loadEntity(polarisCallContext, 0L, 1L, 
PolarisEntityType.PRINCIPAL))
-        .thenReturn(new EntityResult(principal));
+    PrincipalEntity principal =
+        new 
PrincipalEntity.Builder().setId(principalId).setName("principal").build();
+    Mockito.when(metastoreManager.findPrincipalById(polarisCallContext, 
principalId))
+        .thenReturn(Optional.of(principal));
     TokenBroker generator = new SymmetricKeyJWTBroker(metastoreManager, 666, 
() -> "polaris");
     TokenResponse token =
         generator.generateFromClientSecrets(
diff --git 
a/runtime/service/src/test/java/org/apache/polaris/service/auth/internal/broker/RSAKeyPairJWTBrokerTest.java
 
b/runtime/service/src/test/java/org/apache/polaris/service/auth/internal/broker/RSAKeyPairJWTBrokerTest.java
index 3bc4ff6a6..13bd7f3df 100644
--- 
a/runtime/service/src/test/java/org/apache/polaris/service/auth/internal/broker/RSAKeyPairJWTBrokerTest.java
+++ 
b/runtime/service/src/test/java/org/apache/polaris/service/auth/internal/broker/RSAKeyPairJWTBrokerTest.java
@@ -28,14 +28,12 @@ import io.quarkus.test.junit.QuarkusTest;
 import jakarta.inject.Inject;
 import java.security.interfaces.RSAPrivateKey;
 import java.security.interfaces.RSAPublicKey;
+import java.util.Optional;
 import org.apache.polaris.core.PolarisCallContext;
 import org.apache.polaris.core.config.PolarisConfigurationStore;
-import org.apache.polaris.core.entity.PolarisBaseEntity;
-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.PolarisMetaStoreManager;
-import org.apache.polaris.core.persistence.dao.entity.EntityResult;
 import org.apache.polaris.core.persistence.dao.entity.PrincipalSecretsResult;
 import org.apache.polaris.service.types.TokenType;
 import org.junit.jupiter.api.Test;
@@ -50,6 +48,7 @@ public class RSAKeyPairJWTBrokerTest {
   public void testSuccessfulTokenGeneration() throws Exception {
     var keyPair = PemUtils.generateKeyPair();
 
+    final long principalId = 123L;
     final String clientId = "test-client-id";
     final String scope = "PRINCIPAL_ROLE:TEST";
 
@@ -57,20 +56,13 @@ public class RSAKeyPairJWTBrokerTest {
     PolarisMetaStoreManager metastoreManager = 
Mockito.mock(PolarisMetaStoreManager.class);
     String mainSecret = "client-secret";
     PolarisPrincipalSecrets principalSecrets =
-        new PolarisPrincipalSecrets(1L, clientId, mainSecret, "otherSecret");
+        new PolarisPrincipalSecrets(principalId, clientId, mainSecret, 
"otherSecret");
     Mockito.when(metastoreManager.loadPrincipalSecrets(polarisCallContext, 
clientId))
         .thenReturn(new PrincipalSecretsResult(principalSecrets));
-    PolarisBaseEntity principal =
-        new PolarisBaseEntity(
-            0L,
-            1L,
-            PolarisEntityType.PRINCIPAL,
-            PolarisEntitySubType.NULL_SUBTYPE,
-            0L,
-            "principal");
-    Mockito.when(
-            metastoreManager.loadEntity(polarisCallContext, 0L, 1L, 
PolarisEntityType.PRINCIPAL))
-        .thenReturn(new EntityResult(principal));
+    PrincipalEntity principal =
+        new 
PrincipalEntity.Builder().setId(principalId).setName("principal").build();
+    Mockito.when(metastoreManager.findPrincipalById(polarisCallContext, 
principalId))
+        .thenReturn(Optional.of(principal));
     KeyProvider provider = new LocalRSAKeyProvider(keyPair);
     TokenBroker tokenBroker = new RSAKeyPairJWTBroker(metastoreManager, 420, 
provider);
     TokenResponse token =

Reply via email to