Skip to content

Commit 606c0d8

Browse files
committed
Remove noop code in persistence
The `persistStorageIntegrationIfNeeded` function does nothing in any implementation, therefore the corresponding load-function cannot yield anything ever. This change removes both functions. That allows removing the `createStorageIntegration` function as well and let its only call site `getSubscopedCredsForEntity` be implemented once and directly call the storage integration provider. Being able to access object storage without access to entities is a requirement for all currently active tasks proposals. This is one step towards that goal.
1 parent 2b7a18e commit 606c0d8

File tree

21 files changed

+116
-437
lines changed

21 files changed

+116
-437
lines changed

persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/EclipseLinkPolarisMetaStoreManagerFactory.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,21 @@
4343
public class EclipseLinkPolarisMetaStoreManagerFactory
4444
extends LocalPolarisMetaStoreManagerFactory<PolarisEclipseLinkStore> {
4545

46-
@Inject EclipseLinkConfiguration eclipseLinkConfiguration;
47-
@Inject PolarisStorageIntegrationProvider storageIntegrationProvider;
46+
private final EclipseLinkConfiguration eclipseLinkConfiguration;
4847

4948
@SuppressWarnings("unused") // Required by CDI
5049
protected EclipseLinkPolarisMetaStoreManagerFactory() {
51-
this(null, null);
50+
this(null, null, null, null);
5251
}
5352

5453
@Inject
55-
protected EclipseLinkPolarisMetaStoreManagerFactory(Clock clock, PolarisDiagnostics diagnostics) {
56-
super(clock, diagnostics);
54+
protected EclipseLinkPolarisMetaStoreManagerFactory(
55+
Clock clock,
56+
PolarisDiagnostics diagnostics,
57+
PolarisStorageIntegrationProvider storageIntegrationProvider,
58+
EclipseLinkConfiguration eclipseLinkConfiguration) {
59+
super(clock, diagnostics, storageIntegrationProvider);
60+
this.eclipseLinkConfiguration = eclipseLinkConfiguration;
5761
}
5862

5963
@Override
@@ -69,7 +73,6 @@ protected TransactionalPersistence createMetaStoreSession(
6973
@Nonnull PolarisDiagnostics diagnostics) {
7074
return new PolarisEclipseLinkMetaStoreSessionImpl(
7175
store,
72-
storageIntegrationProvider,
7376
realmContext,
7477
configurationFile(),
7578
persistenceUnitName(),

persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,13 @@
5353
import org.apache.polaris.core.entity.PolarisGrantRecord;
5454
import org.apache.polaris.core.entity.PolarisPrincipalSecrets;
5555
import org.apache.polaris.core.exceptions.AlreadyExistsException;
56-
import org.apache.polaris.core.persistence.BaseMetaStoreManager;
5756
import org.apache.polaris.core.persistence.PrincipalSecretsGenerator;
5857
import org.apache.polaris.core.persistence.RetryOnConcurrencyException;
5958
import org.apache.polaris.core.persistence.pagination.EntityIdToken;
6059
import org.apache.polaris.core.persistence.pagination.Page;
6160
import org.apache.polaris.core.persistence.pagination.PageToken;
6261
import org.apache.polaris.core.persistence.transactional.AbstractTransactionalPersistence;
6362
import org.apache.polaris.core.policy.PolarisPolicyMappingRecord;
64-
import org.apache.polaris.core.storage.PolarisStorageConfigurationInfo;
65-
import org.apache.polaris.core.storage.PolarisStorageIntegration;
66-
import org.apache.polaris.core.storage.PolarisStorageIntegrationProvider;
6763
import org.apache.polaris.extension.persistence.impl.eclipselink.models.ModelEntity;
6864
import org.apache.polaris.extension.persistence.impl.eclipselink.models.ModelEntityActive;
6965
import org.apache.polaris.extension.persistence.impl.eclipselink.models.ModelEntityChangeTracking;
@@ -93,21 +89,18 @@ public class PolarisEclipseLinkMetaStoreSessionImpl extends AbstractTransactiona
9389
private final ThreadLocal<EntityManager> localSession = new ThreadLocal<>();
9490

9591
private final PolarisEclipseLinkStore store;
96-
private final PolarisStorageIntegrationProvider storageIntegrationProvider;
9792
private final PrincipalSecretsGenerator secretsGenerator;
9893

9994
/**
10095
* Create a meta store session against provided realm. Each realm has its own database.
10196
*
10297
* @param store Backing store of EclipseLink implementation
103-
* @param storageIntegrationProvider Storage integration provider
10498
* @param realmContext Realm context used to communicate with different database.
10599
* @param confFile Optional EclipseLink configuration file. Default to 'META-INF/persistence.xml'.
106100
* @param persistenceUnitName Optional persistence-unit name in confFile. Default to 'polaris'.
107101
*/
108102
public PolarisEclipseLinkMetaStoreSessionImpl(
109103
@Nonnull PolarisEclipseLinkStore store,
110-
@Nonnull PolarisStorageIntegrationProvider storageIntegrationProvider,
111104
@Nonnull RealmContext realmContext,
112105
@Nullable String confFile,
113106
@Nullable String persistenceUnitName,
@@ -121,7 +114,6 @@ public PolarisEclipseLinkMetaStoreSessionImpl(
121114
try (EntityManager session = emf.createEntityManager()) {
122115
this.store.initialize(session);
123116
}
124-
this.storageIntegrationProvider = storageIntegrationProvider;
125117
this.secretsGenerator = secretsGenerator;
126118
}
127119

@@ -276,16 +268,6 @@ public void writeToEntitiesInCurrentTxn(
276268
this.store.writeToEntities(localSession.get(), entity);
277269
}
278270

279-
/** {@inheritDoc} */
280-
@Override
281-
public <T extends PolarisStorageConfigurationInfo>
282-
void persistStorageIntegrationIfNeededInCurrentTxn(
283-
@Nonnull PolarisCallContext callContext,
284-
@Nonnull PolarisBaseEntity entity,
285-
@Nullable PolarisStorageIntegration<T> storageIntegration) {
286-
// not implemented for eclipselink store
287-
}
288-
289271
/** {@inheritDoc} */
290272
@Override
291273
public void writeToEntitiesActiveInCurrentTxn(
@@ -661,28 +643,6 @@ public void deletePrincipalSecretsInCurrentTxn(
661643
this.store.deletePrincipalSecrets(localSession.get(), clientId);
662644
}
663645

664-
/** {@inheritDoc} */
665-
@Override
666-
public @Nullable <T extends PolarisStorageConfigurationInfo>
667-
PolarisStorageIntegration<T> createStorageIntegrationInCurrentTxn(
668-
@Nonnull PolarisCallContext callCtx,
669-
long catalogId,
670-
long entityId,
671-
PolarisStorageConfigurationInfo polarisStorageConfigurationInfo) {
672-
return storageIntegrationProvider.getStorageIntegrationForConfig(
673-
polarisStorageConfigurationInfo);
674-
}
675-
676-
/** {@inheritDoc} */
677-
@Override
678-
public @Nullable <T extends PolarisStorageConfigurationInfo>
679-
PolarisStorageIntegration<T> loadPolarisStorageIntegrationInCurrentTxn(
680-
@Nonnull PolarisCallContext callCtx, @Nonnull PolarisBaseEntity entity) {
681-
PolarisStorageConfigurationInfo storageConfig =
682-
BaseMetaStoreManager.extractStorageConfiguration(callCtx.getDiagServices(), entity);
683-
return storageIntegrationProvider.getStorageIntegrationForConfig(storageConfig);
684-
}
685-
686646
/** {@inheritDoc} */
687647
@Override
688648
public void writeToPolicyMappingRecordsInCurrentTxn(

persistence/eclipselink/src/test/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreManagerTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,9 @@ protected PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() {
8686
RealmContext realmContext = () -> "realm";
8787
PolarisEclipseLinkMetaStoreSessionImpl session =
8888
new PolarisEclipseLinkMetaStoreSessionImpl(
89-
store, Mockito.mock(), realmContext, null, "polaris", RANDOM_SECRETS);
89+
store, realmContext, null, "polaris", RANDOM_SECRETS);
9090
TransactionalMetaStoreManagerImpl metaStoreManager =
91-
new TransactionalMetaStoreManagerImpl(clock);
91+
new TransactionalMetaStoreManagerImpl(clock, Mockito.mock());
9292
PolarisCallContext callCtx = new PolarisCallContext(realmContext, session, diagServices);
9393
return new PolarisTestMetaStoreManager(metaStoreManager, callCtx);
9494
}
@@ -104,7 +104,7 @@ void testCreateStoreSession(String confFile, boolean success) {
104104
try {
105105
var session =
106106
new PolarisEclipseLinkMetaStoreSessionImpl(
107-
store, Mockito.mock(), () -> "realm", confFile, "polaris", RANDOM_SECRETS);
107+
store, () -> "realm", confFile, "polaris", RANDOM_SECRETS);
108108
assertNotNull(session);
109109
assertTrue(success);
110110
} catch (Exception e) {

persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcBasePersistenceImpl.java

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
import org.apache.polaris.core.entity.PolarisEntityType;
4848
import org.apache.polaris.core.entity.PolarisGrantRecord;
4949
import org.apache.polaris.core.entity.PolarisPrincipalSecrets;
50-
import org.apache.polaris.core.persistence.BaseMetaStoreManager;
5150
import org.apache.polaris.core.persistence.BasePersistence;
5251
import org.apache.polaris.core.persistence.EntityAlreadyExistsException;
5352
import org.apache.polaris.core.persistence.IntegrationPersistence;
@@ -60,9 +59,6 @@
6059
import org.apache.polaris.core.policy.PolarisPolicyMappingRecord;
6160
import org.apache.polaris.core.policy.PolicyEntity;
6261
import org.apache.polaris.core.policy.PolicyType;
63-
import org.apache.polaris.core.storage.PolarisStorageConfigurationInfo;
64-
import org.apache.polaris.core.storage.PolarisStorageIntegration;
65-
import org.apache.polaris.core.storage.PolarisStorageIntegrationProvider;
6662
import org.apache.polaris.core.storage.StorageLocation;
6763
import org.apache.polaris.persistence.relational.jdbc.models.ModelEntity;
6864
import org.apache.polaris.persistence.relational.jdbc.models.ModelGrantRecord;
@@ -78,7 +74,6 @@ public class JdbcBasePersistenceImpl implements BasePersistence, IntegrationPers
7874

7975
private final DatasourceOperations datasourceOperations;
8076
private final PrincipalSecretsGenerator secretsGenerator;
81-
private final PolarisStorageIntegrationProvider storageIntegrationProvider;
8277
private final String realmId;
8378
private final int schemaVersion;
8479

@@ -88,12 +83,10 @@ public class JdbcBasePersistenceImpl implements BasePersistence, IntegrationPers
8883
public JdbcBasePersistenceImpl(
8984
DatasourceOperations databaseOperations,
9085
PrincipalSecretsGenerator secretsGenerator,
91-
PolarisStorageIntegrationProvider storageIntegrationProvider,
9286
String realmId,
9387
int schemaVersion) {
9488
this.datasourceOperations = databaseOperations;
9589
this.secretsGenerator = secretsGenerator;
96-
this.storageIntegrationProvider = storageIntegrationProvider;
9790
this.realmId = realmId;
9891
this.schemaVersion = schemaVersion;
9992
}
@@ -1103,34 +1096,6 @@ private List<PolarisPolicyMappingRecord> fetchPolicyMappingRecords(
11031096
}
11041097
}
11051098

1106-
@Nullable
1107-
@Override
1108-
public <T extends PolarisStorageConfigurationInfo>
1109-
PolarisStorageIntegration<T> createStorageIntegration(
1110-
@Nonnull PolarisCallContext callCtx,
1111-
long catalogId,
1112-
long entityId,
1113-
PolarisStorageConfigurationInfo polarisStorageConfigurationInfo) {
1114-
return storageIntegrationProvider.getStorageIntegrationForConfig(
1115-
polarisStorageConfigurationInfo);
1116-
}
1117-
1118-
@Override
1119-
public <T extends PolarisStorageConfigurationInfo> void persistStorageIntegrationIfNeeded(
1120-
@Nonnull PolarisCallContext callContext,
1121-
@Nonnull PolarisBaseEntity entity,
1122-
@Nullable PolarisStorageIntegration<T> storageIntegration) {}
1123-
1124-
@Nullable
1125-
@Override
1126-
public <T extends PolarisStorageConfigurationInfo>
1127-
PolarisStorageIntegration<T> loadPolarisStorageIntegration(
1128-
@Nonnull PolarisCallContext callContext, @Nonnull PolarisBaseEntity entity) {
1129-
PolarisStorageConfigurationInfo storageConfig =
1130-
BaseMetaStoreManager.extractStorageConfiguration(callContext.getDiagServices(), entity);
1131-
return storageIntegrationProvider.getStorageIntegrationForConfig(storageConfig);
1132-
}
1133-
11341099
@FunctionalInterface
11351100
private interface QueryAction {
11361101
Integer apply(Connection connection, QueryGenerator.PreparedQuery query) throws SQLException;

persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcMetaStoreManagerFactory.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ protected PrincipalSecretsGenerator secretsGenerator(
8787
}
8888

8989
protected PolarisMetaStoreManager createNewMetaStoreManager() {
90-
return new AtomicOperationMetaStoreManager(clock);
90+
return new AtomicOperationMetaStoreManager(clock, storageIntegrationProvider);
9191
}
9292

9393
private void initializeForRealm(
@@ -105,7 +105,6 @@ private void initializeForRealm(
105105
new JdbcBasePersistenceImpl(
106106
datasourceOperations,
107107
secretsGenerator(realmId, rootCredentialsSet),
108-
storageIntegrationProvider,
109108
realmId,
110109
schemaVersion));
111110

persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/AtomicMetastoreManagerWithJdbcBasePersistenceImplTest.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,9 @@ protected PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() {
6464
RealmContext realmContext = () -> "REALM";
6565
JdbcBasePersistenceImpl basePersistence =
6666
new JdbcBasePersistenceImpl(
67-
datasourceOperations,
68-
RANDOM_SECRETS,
69-
Mockito.mock(),
70-
realmContext.getRealmIdentifier(),
71-
schemaVersion);
72-
AtomicOperationMetaStoreManager metaStoreManager = new AtomicOperationMetaStoreManager(clock);
67+
datasourceOperations, RANDOM_SECRETS, realmContext.getRealmIdentifier(), schemaVersion);
68+
AtomicOperationMetaStoreManager metaStoreManager =
69+
new AtomicOperationMetaStoreManager(clock, Mockito.mock());
7370
PolarisCallContext callCtx =
7471
new PolarisCallContext(realmContext, basePersistence, diagServices);
7572
return new PolarisTestMetaStoreManager(metaStoreManager, callCtx);

polaris-core/src/main/java/org/apache/polaris/core/persistence/AtomicOperationMetaStoreManager.java

Lines changed: 4 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -64,16 +64,13 @@
6464
import org.apache.polaris.core.persistence.dao.entity.PrincipalSecretsResult;
6565
import org.apache.polaris.core.persistence.dao.entity.PrivilegeResult;
6666
import org.apache.polaris.core.persistence.dao.entity.ResolvedEntityResult;
67-
import org.apache.polaris.core.persistence.dao.entity.ScopedCredentialsResult;
6867
import org.apache.polaris.core.persistence.pagination.Page;
6968
import org.apache.polaris.core.persistence.pagination.PageToken;
7069
import org.apache.polaris.core.policy.PolarisPolicyMappingRecord;
7170
import org.apache.polaris.core.policy.PolicyEntity;
7271
import org.apache.polaris.core.policy.PolicyMappingUtil;
7372
import org.apache.polaris.core.policy.PolicyType;
74-
import org.apache.polaris.core.storage.AccessConfig;
75-
import org.apache.polaris.core.storage.PolarisStorageConfigurationInfo;
76-
import org.apache.polaris.core.storage.PolarisStorageIntegration;
73+
import org.apache.polaris.core.storage.PolarisStorageIntegrationProvider;
7774
import org.slf4j.Logger;
7875
import org.slf4j.LoggerFactory;
7976

@@ -87,7 +84,9 @@ public class AtomicOperationMetaStoreManager extends BaseMetaStoreManager {
8784

8885
private final Clock clock;
8986

90-
public AtomicOperationMetaStoreManager(Clock clock) {
87+
public AtomicOperationMetaStoreManager(
88+
Clock clock, PolarisStorageIntegrationProvider storageIntegrationProvider) {
89+
super(storageIntegrationProvider);
9190
this.clock = clock;
9291
}
9392

@@ -433,26 +432,6 @@ private void revokeGrantRecord(
433432
// validate input
434433
callCtx.getDiagServices().checkNotNull(catalog, "unexpected_null_catalog");
435434

436-
Map<String, String> internalProp = getInternalPropertyMap(catalog);
437-
String integrationIdentifierOrId =
438-
internalProp.get(PolarisEntityConstants.getStorageIntegrationIdentifierPropertyName());
439-
String storageConfigInfoStr =
440-
internalProp.get(PolarisEntityConstants.getStorageConfigInfoPropertyName());
441-
PolarisStorageIntegration<?> integration;
442-
// storageConfigInfo's presence is needed to create a storage integration
443-
// and the catalog should not have an internal property of storage identifier or id yet
444-
if (storageConfigInfoStr != null && integrationIdentifierOrId == null) {
445-
integration =
446-
((IntegrationPersistence) ms)
447-
.createStorageIntegration(
448-
callCtx,
449-
catalog.getCatalogId(),
450-
catalog.getId(),
451-
PolarisStorageConfigurationInfo.deserialize(storageConfigInfoStr));
452-
} else {
453-
integration = null;
454-
}
455-
456435
// check if that catalog has already been created
457436
// This can be done safely as a separate atomic operation before trying to create the catalog
458437
// because same-id idempotent-retry collisions of this sort are necessarily sequential, so
@@ -489,7 +468,6 @@ private void revokeGrantRecord(
489468
// done, return the existing catalog
490469
return new CreateCatalogResult(refreshCatalog, catalogAdminRole);
491470
}
492-
((IntegrationPersistence) ms).persistStorageIntegrationIfNeeded(callCtx, catalog, integration);
493471

494472
// now create and persist new catalog entity
495473
EntityResult lowLevelResult = this.persistNewEntity(callCtx, ms, catalog);
@@ -1568,65 +1546,6 @@ private void revokeGrantRecord(
15681546
return EntitiesResult.fromPage(Page.fromItems(loadedTasks));
15691547
}
15701548

1571-
/** {@inheritDoc} */
1572-
@Override
1573-
public @Nonnull ScopedCredentialsResult getSubscopedCredsForEntity(
1574-
@Nonnull PolarisCallContext callCtx,
1575-
long catalogId,
1576-
long entityId,
1577-
PolarisEntityType entityType,
1578-
boolean allowListOperation,
1579-
@Nonnull Set<String> allowedReadLocations,
1580-
@Nonnull Set<String> allowedWriteLocations) {
1581-
1582-
// get meta store session we should be using
1583-
BasePersistence ms = callCtx.getMetaStore();
1584-
callCtx
1585-
.getDiagServices()
1586-
.check(
1587-
!allowedReadLocations.isEmpty() || !allowedWriteLocations.isEmpty(),
1588-
"allowed_locations_to_subscope_is_required");
1589-
1590-
// reload the entity, error out if not found
1591-
EntityResult reloadedEntity = loadEntity(callCtx, catalogId, entityId, entityType);
1592-
if (reloadedEntity.getReturnStatus() != BaseResult.ReturnStatus.SUCCESS) {
1593-
return new ScopedCredentialsResult(
1594-
reloadedEntity.getReturnStatus(), reloadedEntity.getExtraInformation());
1595-
}
1596-
1597-
// TODO: Consider whether this independent lookup is safe for the model already or whether
1598-
// we need better atomicity semantics between the base entity and the embedded storage
1599-
// integration.
1600-
1601-
// get storage integration
1602-
PolarisStorageIntegration<PolarisStorageConfigurationInfo> storageIntegration =
1603-
((IntegrationPersistence) ms)
1604-
.loadPolarisStorageIntegration(callCtx, reloadedEntity.getEntity());
1605-
1606-
// cannot be null
1607-
callCtx
1608-
.getDiagServices()
1609-
.checkNotNull(
1610-
storageIntegration,
1611-
"storage_integration_not_exists",
1612-
"catalogId={}, entityId={}",
1613-
catalogId,
1614-
entityId);
1615-
1616-
try {
1617-
AccessConfig accessConfig =
1618-
storageIntegration.getSubscopedCreds(
1619-
callCtx.getRealmConfig(),
1620-
allowListOperation,
1621-
allowedReadLocations,
1622-
allowedWriteLocations);
1623-
return new ScopedCredentialsResult(accessConfig);
1624-
} catch (Exception ex) {
1625-
return new ScopedCredentialsResult(
1626-
BaseResult.ReturnStatus.SUBSCOPE_CREDS_ERROR, ex.getMessage());
1627-
}
1628-
}
1629-
16301549
/**
16311550
* Get the internal property map for an entity
16321551
*

0 commit comments

Comments
 (0)