This is an automated email from the ASF dual-hosted git repository.
honahx 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 a53419317 [Policy Store] Add policyTypeCode to Slice/Index for Future
Filtering Support and Update Policy Persistence Method (#1628)
a53419317 is described below
commit a53419317b11dacffaf08b5556159202779a5206
Author: Honah (Jonas) J. <[email protected]>
AuthorDate: Thu May 22 16:34:15 2025 -0500
[Policy Store] Add policyTypeCode to Slice/Index for Future Filtering
Support and Update Policy Persistence Method (#1628)
This PR adds policyTypeCode to the in-memory tree map store's slice and the
SQL index on policy_mapping_records (already done in JDBC in #1468). This
prepares for future features that need to filter efficiently by policy type,
like listing all entities with a data compaction policy.
It also updates the loadAllTargetsOnPolicy method to accept policyTypeCode,
enabling it to use the new index for better performance.
---
.../PolarisEclipseLinkMetaStoreSessionImpl.java | 11 ++++--
.../impl/eclipselink/PolarisEclipseLinkStore.java | 26 ++++++++++----
.../jpa/models/ModelPolicyMappingRecord.java | 2 +-
.../relational/jdbc/JdbcBasePersistenceImpl.java | 17 +++++++--
.../relational/jdbc/QueryGenerator.java | 33 ++++++++---------
.../AtomicOperationMetaStoreManager.java | 11 ++++--
.../AbstractTransactionalPersistence.java | 12 +++++--
.../TransactionalMetaStoreManagerImpl.java | 12 +++++--
.../transactional/TreeMapMetaStore.java | 3 +-
.../TreeMapTransactionalPersistenceImpl.java | 42 ++++++++++++++--------
.../core/policy/PolicyMappingPersistence.java | 10 ++++--
.../TransactionalPolicyMappingPersistence.java | 9 +++--
.../persistence/PolarisTestMetaStoreManager.java | 3 +-
13 files changed, 131 insertions(+), 60 deletions(-)
diff --git
a/extension/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java
b/extension/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java
index b6bd23762..151d1a548 100644
---
a/extension/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java
+++
b/extension/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java
@@ -703,7 +703,7 @@ public class PolarisEclipseLinkMetaStoreSessionImpl extends
AbstractTransactiona
@Override
public void deleteAllEntityPolicyMappingRecordsInCurrentTxn(
@Nonnull PolarisCallContext callCtx,
- @Nonnull PolarisEntityCore entity,
+ @Nonnull PolarisBaseEntity entity,
@Nonnull List<PolarisPolicyMappingRecord> mappingOnTarget,
@Nonnull List<PolarisPolicyMappingRecord> mappingOnPolicy) {
this.store.deleteAllEntityPolicyMappingRecords(localSession.get(), entity);
@@ -760,8 +760,13 @@ public class PolarisEclipseLinkMetaStoreSessionImpl
extends AbstractTransactiona
@Nonnull
@Override
public List<PolarisPolicyMappingRecord> loadAllTargetsOnPolicyInCurrentTxn(
- @Nonnull PolarisCallContext callCtx, long policyCatalogId, long
policyId) {
- return this.store.loadAllTargetsOnPolicy(localSession.get(),
policyCatalogId, policyId).stream()
+ @Nonnull PolarisCallContext callCtx,
+ long policyCatalogId,
+ long policyId,
+ int policyTypeCode) {
+ return this.store
+ .loadAllTargetsOnPolicy(localSession.get(), policyCatalogId, policyId,
policyTypeCode)
+ .stream()
.map(ModelPolicyMappingRecord::toPolicyMappingRecord)
.toList();
}
diff --git
a/extension/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkStore.java
b/extension/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkStore.java
index 4e992e07f..16fb32356 100644
---
a/extension/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkStore.java
+++
b/extension/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkStore.java
@@ -37,6 +37,7 @@ import org.apache.polaris.core.entity.PolarisGrantRecord;
import org.apache.polaris.core.entity.PolarisPrincipalSecrets;
import org.apache.polaris.core.persistence.pagination.PageToken;
import org.apache.polaris.core.policy.PolarisPolicyMappingRecord;
+import org.apache.polaris.core.policy.PolicyEntity;
import org.apache.polaris.jpa.models.ModelEntity;
import org.apache.polaris.jpa.models.ModelEntityActive;
import org.apache.polaris.jpa.models.ModelEntityChangeTracking;
@@ -461,20 +462,29 @@ public class PolarisEclipseLinkStore {
session.remove(lookupPolicyMappingRecord);
}
- void deleteAllEntityPolicyMappingRecords(EntityManager session,
PolarisEntityCore entity) {
+ void deleteAllEntityPolicyMappingRecords(EntityManager session,
PolarisBaseEntity entity) {
diagnosticServices.check(session != null, "session_is_null");
checkInitialized();
- loadAllTargetsOnPolicy(session, entity.getCatalogId(),
entity.getId()).forEach(session::remove);
- loadAllPoliciesOnTarget(session, entity.getCatalogId(), entity.getId())
- .forEach(session::remove);
+ if (entity.getType() == PolarisEntityType.POLICY) {
+ PolicyEntity policyEntity = PolicyEntity.of(entity);
+ loadAllTargetsOnPolicy(
+ session,
+ policyEntity.getCatalogId(),
+ policyEntity.getId(),
+ policyEntity.getPolicyTypeCode())
+ .forEach(session::remove);
+ } else {
+ loadAllPoliciesOnTarget(session, entity.getCatalogId(), entity.getId())
+ .forEach(session::remove);
+ }
}
ModelPolicyMappingRecord lookupPolicyMappingRecord(
EntityManager session,
long targetCatalogId,
long targetId,
- long policyTypeCode,
+ int policyTypeCode,
long policyCatalogId,
long policyId) {
diagnosticServices.check(session != null, "session_is_null");
@@ -534,16 +544,18 @@ public class PolarisEclipseLinkStore {
}
List<ModelPolicyMappingRecord> loadAllTargetsOnPolicy(
- EntityManager session, long policyCatalogId, long policyId) {
+ EntityManager session, long policyCatalogId, long policyId, int
policyTypeCode) {
diagnosticServices.check(session != null, "session_is_null");
checkInitialized();
return session
.createQuery(
"SELECT m from ModelPolicyMappingRecord m "
- + "where m.policyCatalogId=:policyCatalogId "
+ + "where m.policyTypeCode=:policyTypeCode "
+ + "and m.policyCatalogId=:policyCatalogId "
+ "and m.policyId=:policyId",
ModelPolicyMappingRecord.class)
+ .setParameter("policyTypeCode", policyTypeCode)
.setParameter("policyCatalogId", policyCatalogId)
.setParameter("policyId", policyId)
.getResultList();
diff --git
a/extension/persistence/jpa-model/src/main/java/org/apache/polaris/jpa/models/ModelPolicyMappingRecord.java
b/extension/persistence/jpa-model/src/main/java/org/apache/polaris/jpa/models/ModelPolicyMappingRecord.java
index 0448dec67..0a6f587c4 100644
---
a/extension/persistence/jpa-model/src/main/java/org/apache/polaris/jpa/models/ModelPolicyMappingRecord.java
+++
b/extension/persistence/jpa-model/src/main/java/org/apache/polaris/jpa/models/ModelPolicyMappingRecord.java
@@ -33,7 +33,7 @@ import org.eclipse.persistence.annotations.PrimaryKey;
indexes = {
@Index(
name = "POLICY_MAPPING_RECORDS_BY_POLICY_INDEX",
- columnList = "policyCatalogId,policyId,targetCatalogId,targetId")
+ columnList =
"policyTypeCode,policyCatalogId,policyId,targetCatalogId,targetId")
})
@PrimaryKey(
columns = {
diff --git
a/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/JdbcBasePersistenceImpl.java
b/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/JdbcBasePersistenceImpl.java
index e229100fe..5fdb32006 100644
---
a/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/JdbcBasePersistenceImpl.java
+++
b/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/JdbcBasePersistenceImpl.java
@@ -780,7 +780,7 @@ public class JdbcBasePersistenceImpl implements
BasePersistence, IntegrationPers
@Override
public void deleteAllEntityPolicyMappingRecords(
@Nonnull PolarisCallContext callCtx,
- @Nonnull PolarisEntityCore entity,
+ @Nonnull PolarisBaseEntity entity,
@Nonnull List<PolarisPolicyMappingRecord> mappingOnTarget,
@Nonnull List<PolarisPolicyMappingRecord> mappingOnPolicy) {
try {
@@ -855,9 +855,20 @@ public class JdbcBasePersistenceImpl implements
BasePersistence, IntegrationPers
@Nonnull
@Override
public List<PolarisPolicyMappingRecord> loadAllTargetsOnPolicy(
- @Nonnull PolarisCallContext callCtx, long policyCatalogId, long
policyId) {
+ @Nonnull PolarisCallContext callCtx,
+ long policyCatalogId,
+ long policyId,
+ int policyTypeCode) {
Map<String, Object> params =
- Map.of("policy_catalog_id", policyCatalogId, "policy_id", policyId,
"realm_id", realmId);
+ Map.of(
+ "policy_type_code",
+ policyTypeCode,
+ "policy_catalog_id",
+ policyCatalogId,
+ "policy_id",
+ policyId,
+ "realm_id",
+ realmId);
String query = generateSelectQuery(new ModelPolicyMappingRecord(), params);
return fetchPolicyMappingRecords(query);
}
diff --git
a/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/QueryGenerator.java
b/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/QueryGenerator.java
index d8f8d0864..ccd457b6a 100644
---
a/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/QueryGenerator.java
+++
b/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/QueryGenerator.java
@@ -21,10 +21,14 @@ package
org.apache.polaris.extension.persistence.relational.jdbc;
import com.google.common.annotations.VisibleForTesting;
import jakarta.annotation.Nonnull;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.polaris.core.entity.PolarisBaseEntity;
import org.apache.polaris.core.entity.PolarisEntityCore;
import org.apache.polaris.core.entity.PolarisEntityId;
+import org.apache.polaris.core.entity.PolarisEntityType;
+import org.apache.polaris.core.policy.PolicyEntity;
import
org.apache.polaris.extension.persistence.relational.jdbc.models.Converter;
import
org.apache.polaris.extension.persistence.relational.jdbc.models.ModelEntity;
import
org.apache.polaris.extension.persistence.relational.jdbc.models.ModelGrantRecord;
@@ -60,23 +64,20 @@ public class QueryGenerator {
}
public static String generateDeleteQueryForEntityPolicyMappingRecords(
- @Nonnull PolarisEntityCore entity, @Nonnull String realmId) {
- String targetCondition =
- String.format(
- "target_id = %s AND target_catalog_id = %s", entity.getId(),
entity.getCatalogId());
- String sourceCondition =
- String.format(
- "policy_id = %s AND policy_catalog_id = %s", entity.getId(),
entity.getCatalogId());
+ @Nonnull PolarisBaseEntity entity, @Nonnull String realmId) {
+ Map<String, Object> queryParams = new HashMap<>();
+ if (entity.getType() == PolarisEntityType.POLICY) {
+ PolicyEntity policyEntity = PolicyEntity.of(entity);
+ queryParams.put("policy_type_code", policyEntity.getPolicyTypeCode());
+ queryParams.put("policy_catalog_id", policyEntity.getCatalogId());
+ queryParams.put("policy_id", policyEntity.getId());
+ } else {
+ queryParams.put("target_catalog_id", entity.getCatalogId());
+ queryParams.put("target_id", entity.getId());
+ }
+ queryParams.put("realm_id", realmId);
- String whereClause =
- " WHERE ("
- + targetCondition
- + " OR "
- + sourceCondition
- + ") AND realm_id = '"
- + realmId
- + "'";
- return generateDeleteQuery(ModelPolicyMappingRecord.class, whereClause);
+ return generateDeleteQuery(ModelPolicyMappingRecord.class, queryParams);
}
public static String generateSelectQueryWithEntityIds(
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 2a32fb6f9..92ccc6eed 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
@@ -203,7 +203,11 @@ public class AtomicOperationMetaStoreManager extends
BaseMetaStoreManager {
try {
final List<PolarisPolicyMappingRecord> mappingOnPolicy =
(entity.getType() == PolarisEntityType.POLICY)
- ? ms.loadAllTargetsOnPolicy(callCtx, entity.getCatalogId(),
entity.getId())
+ ? ms.loadAllTargetsOnPolicy(
+ callCtx,
+ entity.getCatalogId(),
+ entity.getId(),
+ PolicyEntity.of(entity).getPolicyTypeCode())
: List.of();
final List<PolarisPolicyMappingRecord> mappingOnTarget =
(entity.getType() == PolarisEntityType.POLICY)
@@ -1209,7 +1213,10 @@ public class AtomicOperationMetaStoreManager extends
BaseMetaStoreManager {
// need to check if the policy is attached to any entity
List<PolarisPolicyMappingRecord> records =
ms.loadAllTargetsOnPolicy(
- callCtx, refreshEntityToDrop.getCatalogId(),
refreshEntityToDrop.getId());
+ callCtx,
+ refreshEntityToDrop.getCatalogId(),
+ refreshEntityToDrop.getId(),
+ PolicyEntity.of(refreshEntityToDrop).getPolicyTypeCode());
if (!records.isEmpty()) {
return new
DropEntityResult(BaseResult.ReturnStatus.POLICY_HAS_MAPPINGS, null);
}
diff --git
a/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/AbstractTransactionalPersistence.java
b/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/AbstractTransactionalPersistence.java
index e63ea6fed..f08b85e12 100644
---
a/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/AbstractTransactionalPersistence.java
+++
b/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/AbstractTransactionalPersistence.java
@@ -722,7 +722,7 @@ public abstract class AbstractTransactionalPersistence
implements TransactionalP
@Override
public void deleteAllEntityPolicyMappingRecords(
@Nonnull PolarisCallContext callCtx,
- @Nonnull PolarisEntityCore entity,
+ @Nonnull PolarisBaseEntity entity,
@Nonnull List<PolarisPolicyMappingRecord> mappingOnTarget,
@Nonnull List<PolarisPolicyMappingRecord> mappingOnPolicy) {
this.runActionInTransaction(
@@ -778,8 +778,14 @@ public abstract class AbstractTransactionalPersistence
implements TransactionalP
@Override
@Nonnull
public List<PolarisPolicyMappingRecord> loadAllTargetsOnPolicy(
- @Nonnull PolarisCallContext callCtx, long policyCatalogId, long
policyId) {
+ @Nonnull PolarisCallContext callCtx,
+ long policyCatalogId,
+ long policyId,
+ int policyTypeCode) {
return this.runInReadTransaction(
- callCtx, () -> this.loadAllTargetsOnPolicyInCurrentTxn(callCtx,
policyCatalogId, policyId));
+ callCtx,
+ () ->
+ this.loadAllTargetsOnPolicyInCurrentTxn(
+ callCtx, policyCatalogId, policyId, policyTypeCode));
}
}
diff --git
a/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TransactionalMetaStoreManagerImpl.java
b/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TransactionalMetaStoreManagerImpl.java
index 62f526a6d..0224dec49 100644
---
a/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TransactionalMetaStoreManagerImpl.java
+++
b/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TransactionalMetaStoreManagerImpl.java
@@ -205,7 +205,10 @@ public class TransactionalMetaStoreManagerImpl extends
BaseMetaStoreManager {
final List<PolarisPolicyMappingRecord> mappingOnPolicy =
(entity.getType() == PolarisEntityType.POLICY)
? ms.loadAllTargetsOnPolicyInCurrentTxn(
- callCtx, entity.getCatalogId(), entity.getId())
+ callCtx,
+ entity.getCatalogId(),
+ entity.getId(),
+ PolicyEntity.of(entity).getPolicyTypeCode())
: List.of();
final List<PolarisPolicyMappingRecord> mappingOnTarget =
(entity.getType() == PolarisEntityType.POLICY)
@@ -1397,7 +1400,10 @@ public class TransactionalMetaStoreManagerImpl extends
BaseMetaStoreManager {
try {
List<PolarisPolicyMappingRecord> records =
ms.loadAllTargetsOnPolicyInCurrentTxn(
- callCtx, refreshEntityToDrop.getCatalogId(),
refreshEntityToDrop.getId());
+ callCtx,
+ refreshEntityToDrop.getCatalogId(),
+ refreshEntityToDrop.getId(),
+ PolicyEntity.of(refreshEntityToDrop).getPolicyTypeCode());
if (!records.isEmpty()) {
return new
DropEntityResult(BaseResult.ReturnStatus.POLICY_HAS_MAPPINGS, null);
}
@@ -2448,7 +2454,7 @@ public class TransactionalMetaStoreManagerImpl extends
BaseMetaStoreManager {
}
/** See {@link #loadPoliciesOnEntityByType(PolarisCallContext,
PolarisEntityCore, PolicyType)} */
- public LoadPolicyMappingsResult doLoadPoliciesOnEntityByType(
+ private LoadPolicyMappingsResult doLoadPoliciesOnEntityByType(
@Nonnull PolarisCallContext callCtx,
@Nonnull TransactionalPersistence ms,
@Nonnull PolarisEntityCore target,
diff --git
a/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TreeMapMetaStore.java
b/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TreeMapMetaStore.java
index c91414040..781732e42 100644
---
a/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TreeMapMetaStore.java
+++
b/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TreeMapMetaStore.java
@@ -287,7 +287,8 @@ public class TreeMapMetaStore {
new Slice<>(
policyMappingRecord ->
String.format(
- "%d::%d::%d::%d",
+ "%d::%d::%d::%d::%d",
+ policyMappingRecord.getPolicyTypeCode(),
policyMappingRecord.getPolicyCatalogId(),
policyMappingRecord.getPolicyId(),
policyMappingRecord.getTargetCatalogId(),
diff --git
a/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TreeMapTransactionalPersistenceImpl.java
b/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TreeMapTransactionalPersistenceImpl.java
index 304ac0ce9..44b37c276 100644
---
a/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TreeMapTransactionalPersistenceImpl.java
+++
b/polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TreeMapTransactionalPersistenceImpl.java
@@ -43,6 +43,7 @@ import
org.apache.polaris.core.persistence.pagination.HasPageSize;
import org.apache.polaris.core.persistence.pagination.Page;
import org.apache.polaris.core.persistence.pagination.PageToken;
import org.apache.polaris.core.policy.PolarisPolicyMappingRecord;
+import org.apache.polaris.core.policy.PolicyEntity;
import org.apache.polaris.core.storage.PolarisStorageConfigurationInfo;
import org.apache.polaris.core.storage.PolarisStorageIntegration;
import org.apache.polaris.core.storage.PolarisStorageIntegrationProvider;
@@ -588,20 +589,30 @@ public class TreeMapTransactionalPersistenceImpl extends
AbstractTransactionalPe
@Override
public void deleteAllEntityPolicyMappingRecordsInCurrentTxn(
@Nonnull PolarisCallContext callCtx,
- @Nonnull PolarisEntityCore entity,
+ @Nonnull PolarisBaseEntity entity,
@Nonnull List<PolarisPolicyMappingRecord> mappingOnTarget,
@Nonnull List<PolarisPolicyMappingRecord> mappingOnPolicy) {
- // build composite prefix key and delete policy mapping records on the
indexed side of each
- // mapping table
- String prefix = this.store.buildPrefixKeyComposite(entity.getCatalogId(),
entity.getId());
- this.store.getSlicePolicyMappingRecords().deleteRange(prefix);
- this.store.getSlicePolicyMappingRecordsByPolicy().deleteRange(prefix);
-
- // also delete the other side. We need to delete these mapping one at a
time versus doing a
- // range delete
- mappingOnTarget.forEach(
- record ->
this.store.getSlicePolicyMappingRecordsByPolicy().delete(record));
- mappingOnPolicy.forEach(record ->
this.store.getSlicePolicyMappingRecords().delete(record));
+ if (entity.getType() == PolarisEntityType.POLICY) {
+ PolicyEntity policyEntity = PolicyEntity.of(entity);
+ this.store
+ .getSlicePolicyMappingRecordsByPolicy()
+ .deleteRange(
+ this.store.buildPrefixKeyComposite(
+ policyEntity.getPolicyTypeCode(),
+ policyEntity.getCatalogId(),
+ policyEntity.getId()));
+ // also delete the other side. We need to delete these mapping one at a
time versus doing a
+ // range delete
+ mappingOnPolicy.forEach(record ->
this.store.getSlicePolicyMappingRecords().delete(record));
+ } else {
+ this.store
+ .getSlicePolicyMappingRecords()
+
.deleteRange(this.store.buildPrefixKeyComposite(entity.getCatalogId(),
entity.getId()));
+ // also delete the other side. We need to delete these mapping one at a
time versus doing a
+ // range delete
+ mappingOnTarget.forEach(
+ record ->
this.store.getSlicePolicyMappingRecordsByPolicy().delete(record));
+ }
}
/** {@inheritDoc} */
@@ -644,9 +655,12 @@ public class TreeMapTransactionalPersistenceImpl extends
AbstractTransactionalPe
/** {@inheritDoc} */
@Override
public @Nonnull List<PolarisPolicyMappingRecord>
loadAllTargetsOnPolicyInCurrentTxn(
- @Nonnull PolarisCallContext callCtx, long policyCatalogId, long
policyId) {
+ @Nonnull PolarisCallContext callCtx,
+ long policyCatalogId,
+ long policyId,
+ int policyTypeCode) {
return this.store
.getSlicePolicyMappingRecordsByPolicy()
- .readRange(this.store.buildPrefixKeyComposite(policyCatalogId,
policyId));
+ .readRange(this.store.buildPrefixKeyComposite(policyTypeCode,
policyCatalogId, policyId));
}
}
diff --git
a/polaris-core/src/main/java/org/apache/polaris/core/policy/PolicyMappingPersistence.java
b/polaris-core/src/main/java/org/apache/polaris/core/policy/PolicyMappingPersistence.java
index 33a754668..0456f7b32 100644
---
a/polaris-core/src/main/java/org/apache/polaris/core/policy/PolicyMappingPersistence.java
+++
b/polaris-core/src/main/java/org/apache/polaris/core/policy/PolicyMappingPersistence.java
@@ -22,7 +22,7 @@ import jakarta.annotation.Nonnull;
import jakarta.annotation.Nullable;
import java.util.List;
import org.apache.polaris.core.PolarisCallContext;
-import org.apache.polaris.core.entity.PolarisEntityCore;
+import org.apache.polaris.core.entity.PolarisBaseEntity;
/**
* Interface for interacting with the Polaris persistence backend for Policy
Mapping operations.
@@ -73,7 +73,7 @@ public interface PolicyMappingPersistence {
*/
default void deleteAllEntityPolicyMappingRecords(
@Nonnull PolarisCallContext callCtx,
- @Nonnull PolarisEntityCore entity,
+ @Nonnull PolarisBaseEntity entity,
@Nonnull List<PolarisPolicyMappingRecord> mappingOnTarget,
@Nonnull List<PolarisPolicyMappingRecord> mappingOnPolicy) {
throw new UnsupportedOperationException("Not Implemented");
@@ -141,11 +141,15 @@ public interface PolicyMappingPersistence {
* @param callCtx call context
* @param policyCatalogId catalog id of the policy entity, NULL_ID if the
entity is top-level
* @param policyId id of the policy entity
+ * @param policyTypeCode type code of the policy entity
* @return the list of policy mapping records for the specified policy entity
*/
@Nonnull
default List<PolarisPolicyMappingRecord> loadAllTargetsOnPolicy(
- @Nonnull PolarisCallContext callCtx, long policyCatalogId, long
policyId) {
+ @Nonnull PolarisCallContext callCtx,
+ long policyCatalogId,
+ long policyId,
+ int policyTypeCode) {
throw new UnsupportedOperationException("Not Implemented");
}
}
diff --git
a/polaris-core/src/main/java/org/apache/polaris/core/policy/TransactionalPolicyMappingPersistence.java
b/polaris-core/src/main/java/org/apache/polaris/core/policy/TransactionalPolicyMappingPersistence.java
index 6ad1ac80c..398ddb1a1 100644
---
a/polaris-core/src/main/java/org/apache/polaris/core/policy/TransactionalPolicyMappingPersistence.java
+++
b/polaris-core/src/main/java/org/apache/polaris/core/policy/TransactionalPolicyMappingPersistence.java
@@ -22,7 +22,7 @@ import jakarta.annotation.Nonnull;
import jakarta.annotation.Nullable;
import java.util.List;
import org.apache.polaris.core.PolarisCallContext;
-import org.apache.polaris.core.entity.PolarisEntityCore;
+import org.apache.polaris.core.entity.PolarisBaseEntity;
public interface TransactionalPolicyMappingPersistence {
/** See {@link PolicyMappingPersistence#writeToPolicyMappingRecords} */
@@ -54,7 +54,7 @@ public interface TransactionalPolicyMappingPersistence {
/** See {@link PolicyMappingPersistence#deleteAllEntityPolicyMappingRecords}
*/
default void deleteAllEntityPolicyMappingRecordsInCurrentTxn(
@Nonnull PolarisCallContext callCtx,
- @Nonnull PolarisEntityCore entity,
+ @Nonnull PolarisBaseEntity entity,
@Nonnull List<PolarisPolicyMappingRecord> mappingOnTarget,
@Nonnull List<PolarisPolicyMappingRecord> mappingOnPolicy) {
throw new UnsupportedOperationException("Not Implemented");
@@ -92,7 +92,10 @@ public interface TransactionalPolicyMappingPersistence {
/** See {@link PolicyMappingPersistence#loadAllTargetsOnPolicy} */
@Nonnull
default List<PolarisPolicyMappingRecord> loadAllTargetsOnPolicyInCurrentTxn(
- @Nonnull PolarisCallContext callCtx, long policyCatalogId, long
policyId) {
+ @Nonnull PolarisCallContext callCtx,
+ long policyCatalogId,
+ long policyId,
+ int policyTypeCode) {
throw new UnsupportedOperationException("Not Implemented");
}
}
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 8cddecae3..7d90ab23d 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
@@ -2888,7 +2888,8 @@ public class PolarisTestMetaStoreManager {
BasePersistence ms = polarisCallContext.getMetaStore();
Assertions.assertThat(
- ms.loadAllTargetsOnPolicy(polarisCallContext,
N1_P1.getCatalogId(), N1_P1.getId()))
+ ms.loadAllTargetsOnPolicy(
+ polarisCallContext, N1_P1.getCatalogId(), N1_P1.getId(),
N1_P1.getPolicyTypeCode()))
.isEmpty();
attachPolicyToTarget(List.of(catalog, N1, N1_N2), N1_N2_T1,
List.of(catalog, N1), N1_P2);