Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
import org.apache.polaris.core.PolarisDefaultDiagServiceImpl;
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.PolarisEntityConstants;
import org.apache.polaris.core.entity.PrincipalEntity;
Expand Down Expand Up @@ -232,9 +231,6 @@ private PrincipalSecretsResult bootstrapServiceAndCreatePolarisPrincipalForRealm
BasePersistence metaStore = sessionSupplierMap.get(realmContext.getRealmIdentifier()).get();
PolarisCallContext polarisContext =
new PolarisCallContext(realmContext, metaStore, diagServices);
if (CallContext.getCurrentContext() == null) {
CallContext.setCurrentContext(polarisContext);
}

Optional<PrincipalEntity> preliminaryRootPrincipal =
metaStoreManager.findRootPrincipal(polarisContext);
Expand Down Expand Up @@ -270,9 +266,6 @@ private void checkPolarisServiceBootstrappedForRealm(RealmContext realmContext)
BasePersistence metaStore = sessionSupplierMap.get(realmContext.getRealmIdentifier()).get();
PolarisCallContext polarisContext =
new PolarisCallContext(realmContext, metaStore, diagServices);
if (CallContext.getCurrentContext() == null) {
CallContext.setCurrentContext(polarisContext);
}

Optional<PrincipalEntity> rootPrincipal = metaStoreManager.findRootPrincipal(polarisContext);
if (rootPrincipal.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,10 @@
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.annotation.Nonnull;
import jakarta.annotation.Nullable;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.util.Map;
import org.apache.polaris.core.PolarisDiagnostics;
import org.apache.polaris.core.admin.model.ConnectionConfigInfo;
import org.apache.polaris.core.admin.model.HadoopConnectionConfigInfo;
import org.apache.polaris.core.admin.model.IcebergRestConnectionConfigInfo;
Expand Down Expand Up @@ -115,15 +113,12 @@ public String serialize() {
}
}

public static @Nullable ConnectionConfigInfoDpo deserialize(
@Nonnull PolarisDiagnostics diagnostics, final @Nonnull String jsonStr) {
public static ConnectionConfigInfoDpo deserialize(final @Nonnull String jsonStr) {
try {
return DEFAULT_MAPPER.readValue(jsonStr, ConnectionConfigInfoDpo.class);
} catch (JsonProcessingException exception) {
diagnostics.fail(
"fail_to_deserialize_connection_configuration", exception, "jsonStr={}", jsonStr);
} catch (JsonProcessingException ex) {
throw new RuntimeException("deserialize failed: " + ex.getMessage(), ex);
}
return null;
}

/** Validates the remote URI. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
import java.util.Optional;
import java.util.Set;
import org.apache.iceberg.exceptions.BadRequestException;
import org.apache.polaris.core.PolarisDefaultDiagServiceImpl;
import org.apache.polaris.core.admin.model.AwsStorageConfigInfo;
import org.apache.polaris.core.admin.model.AzureStorageConfigInfo;
import org.apache.polaris.core.admin.model.Catalog;
Expand Down Expand Up @@ -195,8 +194,7 @@ public String getReplaceNewLocationPrefixWithCatalogDefault() {
String configStr =
getInternalPropertiesAsMap().get(PolarisEntityConstants.getStorageConfigInfoPropertyName());
if (configStr != null) {
return PolarisStorageConfigurationInfo.deserialize(
new PolarisDefaultDiagServiceImpl(), configStr);
return PolarisStorageConfigurationInfo.deserialize(configStr);
}
return null;
}
Expand All @@ -217,7 +215,7 @@ public ConnectionConfigInfoDpo getConnectionConfigInfoDpo() {
getInternalPropertiesAsMap()
.get(PolarisEntityConstants.getConnectionConfigInfoPropertyName());
if (configStr != null) {
return ConnectionConfigInfoDpo.deserialize(new PolarisDefaultDiagServiceImpl(), configStr);
return ConnectionConfigInfoDpo.deserialize(configStr);
}
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@
*/
package org.apache.polaris.core.entity;

import org.apache.polaris.core.PolarisCallContext;
import org.apache.polaris.core.context.CallContext;
import org.apache.polaris.core.persistence.PolarisObjectMapperUtil;

/**
Expand All @@ -40,17 +38,13 @@ public static TaskEntity of(PolarisBaseEntity polarisEntity) {
}

public <T> T readData(Class<T> klass) {
PolarisCallContext polarisCallContext = CallContext.getCurrentContext().getPolarisCallContext();
return PolarisObjectMapperUtil.deserialize(
polarisCallContext, getPropertiesAsMap().get(PolarisTaskConstants.TASK_DATA), klass);
getPropertiesAsMap().get(PolarisTaskConstants.TASK_DATA), klass);
}

public AsyncTaskType getTaskType() {
PolarisCallContext polarisCallContext = CallContext.getCurrentContext().getPolarisCallContext();
return PolarisObjectMapperUtil.deserialize(
polarisCallContext,
getPropertiesAsMap().get(PolarisTaskConstants.TASK_TYPE),
AsyncTaskType.class);
getPropertiesAsMap().get(PolarisTaskConstants.TASK_TYPE), AsyncTaskType.class);
}

public static class Builder extends PolarisEntity.BaseBuilder<TaskEntity, TaskEntity.Builder> {
Expand All @@ -66,20 +60,12 @@ public Builder(TaskEntity original) {
}

public Builder withTaskType(AsyncTaskType taskType) {
PolarisCallContext polarisCallContext =
CallContext.getCurrentContext().getPolarisCallContext();
properties.put(
PolarisTaskConstants.TASK_TYPE,
PolarisObjectMapperUtil.serialize(polarisCallContext, taskType));
properties.put(PolarisTaskConstants.TASK_TYPE, PolarisObjectMapperUtil.serialize(taskType));
return this;
}

public Builder withData(Object data) {
PolarisCallContext polarisCallContext =
CallContext.getCurrentContext().getPolarisCallContext();
properties.put(
PolarisTaskConstants.TASK_DATA,
PolarisObjectMapperUtil.serialize(polarisCallContext, data));
properties.put(PolarisTaskConstants.TASK_DATA, PolarisObjectMapperUtil.serialize(data));
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -246,8 +246,7 @@ private void dropEntity(
// if it is a principal, we also need to drop the secrets
if (entity.getType() == PolarisEntityType.PRINCIPAL) {
// get internal properties
Map<String, String> properties =
this.deserializeProperties(callCtx, entity.getInternalProperties());
Map<String, String> properties = this.deserializeProperties(entity.getInternalProperties());

// get client_id
String clientId = properties.get(PolarisEntityConstants.getClientIdPropertyName());
Expand Down Expand Up @@ -427,7 +426,7 @@ private void revokeGrantRecord(
// validate input
callCtx.getDiagServices().checkNotNull(catalog, "unexpected_null_catalog");

Map<String, String> internalProp = getInternalPropertyMap(callCtx, catalog);
Map<String, String> internalProp = getInternalPropertyMap(catalog);
String integrationIdentifierOrId =
internalProp.get(PolarisEntityConstants.getStorageIntegrationIdentifierPropertyName());
String storageConfigInfoStr =
Expand All @@ -442,8 +441,7 @@ private void revokeGrantRecord(
callCtx,
catalog.getCatalogId(),
catalog.getId(),
PolarisStorageConfigurationInfo.deserialize(
callCtx.getDiagServices(), storageConfigInfoStr));
PolarisStorageConfigurationInfo.deserialize(storageConfigInfoStr));
} else {
integration = null;
}
Expand Down Expand Up @@ -754,7 +752,7 @@ private void revokeGrantRecord(

// get internal properties
Map<String, String> properties =
this.deserializeProperties(callCtx, refreshPrincipal.getInternalProperties());
this.deserializeProperties(refreshPrincipal.getInternalProperties());

// get client_id
String clientId = properties.get(PolarisEntityConstants.getClientIdPropertyName());
Expand Down Expand Up @@ -800,14 +798,14 @@ private void revokeGrantRecord(
.generateNewPrincipalSecrets(callCtx, principal.getName(), principal.getId());

// generate properties
Map<String, String> internalProperties = getInternalPropertyMap(callCtx, principal);
Map<String, String> internalProperties = getInternalPropertyMap(principal);
internalProperties.put(
PolarisEntityConstants.getClientIdPropertyName(), principalSecrets.getPrincipalClientId());

// remember client id
PolarisBaseEntity updatedPrincipal =
new PolarisBaseEntity.Builder(principal)
.internalProperties(this.serializeProperties(callCtx, internalProperties))
.internalProperties(this.serializeProperties(internalProperties))
.build();
// now create and persist new catalog entity
EntityResult lowLevelResult = this.persistNewEntity(callCtx, ms, updatedPrincipal);
Expand Down Expand Up @@ -862,7 +860,6 @@ private void revokeGrantRecord(
PolarisBaseEntity principal = loadEntityResult.getEntity();
Map<String, String> internalProps =
PolarisObjectMapperUtil.deserializeProperties(
callCtx,
principal.getInternalProperties() == null ? "{}" : principal.getInternalProperties());

boolean doReset =
Expand All @@ -881,14 +878,14 @@ private void revokeGrantRecord(
internalProps.put(
PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE, "true");
principalBuilder.internalProperties(
PolarisObjectMapperUtil.serializeProperties(callCtx, internalProps));
PolarisObjectMapperUtil.serializeProperties(internalProps));
principalBuilder.entityVersion(principal.getEntityVersion() + 1);
ms.writeEntity(callCtx, principalBuilder.build(), true, principal);
} else if (internalProps.containsKey(
PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE)) {
internalProps.remove(PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE);
principalBuilder.internalProperties(
PolarisObjectMapperUtil.serializeProperties(callCtx, internalProps));
PolarisObjectMapperUtil.serializeProperties(internalProps));
principalBuilder.entityVersion(principal.getEntityVersion() + 1);
ms.writeEntity(callCtx, principalBuilder.build(), true, principal);
}
Expand Down Expand Up @@ -1228,10 +1225,10 @@ private void revokeGrantRecord(
properties.put(
PolarisTaskConstants.TASK_TYPE,
String.valueOf(AsyncTaskType.ENTITY_CLEANUP_SCHEDULER.typeCode()));
properties.put("data", PolarisObjectMapperUtil.serialize(callCtx, refreshEntityToDrop));
properties.put("data", PolarisObjectMapperUtil.serialize(refreshEntityToDrop));
PolarisBaseEntity.Builder taskEntityBuilder =
new PolarisBaseEntity.Builder()
.properties(PolarisObjectMapperUtil.serializeProperties(callCtx, properties))
.properties(PolarisObjectMapperUtil.serializeProperties(properties))
.id(ms.generateNewId(callCtx))
.catalogId(0L)
.name("entityCleanup_" + entityToDrop.getId())
Expand All @@ -1240,7 +1237,7 @@ private void revokeGrantRecord(
.createTimestamp(callCtx.getClock().millis());
if (cleanupProperties != null) {
taskEntityBuilder.internalProperties(
PolarisObjectMapperUtil.serializeProperties(callCtx, cleanupProperties));
PolarisObjectMapperUtil.serializeProperties(cleanupProperties));
}
// TODO: Add a way to create the task entities atomically with dropping the entity;
// in the meantime, if the server fails partway through a dropEntity, it's possible that
Expand Down Expand Up @@ -1524,7 +1521,7 @@ private void revokeGrantRecord(
PolarisBaseEntity.Builder updatedTaskBuilder =
new PolarisBaseEntity.Builder(task);
Map<String, String> properties =
PolarisObjectMapperUtil.deserializeProperties(callCtx, task.getProperties());
PolarisObjectMapperUtil.deserializeProperties(task.getProperties());
properties.put(PolarisTaskConstants.LAST_ATTEMPT_EXECUTOR_ID, executorId);
properties.put(
PolarisTaskConstants.LAST_ATTEMPT_START_TIME,
Expand All @@ -1536,7 +1533,7 @@ private void revokeGrantRecord(
properties.getOrDefault(PolarisTaskConstants.ATTEMPT_COUNT, "0"))
+ 1));
updatedTaskBuilder.properties(
PolarisObjectMapperUtil.serializeProperties(callCtx, properties));
PolarisObjectMapperUtil.serializeProperties(properties));
EntityResult result =
updateEntityPropertiesIfNotChanged(callCtx, null, updatedTaskBuilder.build());
if (result.getReturnStatus() == BaseResult.ReturnStatus.SUCCESS) {
Expand Down Expand Up @@ -1630,18 +1627,16 @@ private void revokeGrantRecord(
/**
* Get the internal property map for an entity
*
* @param callCtx the polaris call context
* @param entity the target entity
* @return a map of string representing the internal properties
*/
public Map<String, String> getInternalPropertyMap(
@Nonnull PolarisCallContext callCtx, @Nonnull PolarisBaseEntity entity) {
public Map<String, String> getInternalPropertyMap(@Nonnull PolarisBaseEntity entity) {
String internalPropStr = entity.getInternalProperties();
Map<String, String> res = new HashMap<>();
if (internalPropStr == null) {
return res;
}
return deserializeProperties(callCtx, internalPropStr);
return deserializeProperties(internalPropStr);
}

/** {@inheritDoc} */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.annotation.Nonnull;
import java.util.Map;
Expand All @@ -40,8 +39,7 @@ public abstract class BaseMetaStoreManager implements PolarisMetaStoreManager {
public static PolarisStorageConfigurationInfo extractStorageConfiguration(
@Nonnull PolarisCallContext callCtx, PolarisBaseEntity reloadedEntity) {
Map<String, String> propMap =
PolarisObjectMapperUtil.deserializeProperties(
callCtx, reloadedEntity.getInternalProperties());
PolarisObjectMapperUtil.deserializeProperties(reloadedEntity.getInternalProperties());
String storageConfigInfoStr =
propMap.get(PolarisEntityConstants.getStorageConfigInfoPropertyName());

Expand All @@ -53,8 +51,7 @@ public static PolarisStorageConfigurationInfo extractStorageConfiguration(
"catalogId={}, entityId={}",
reloadedEntity.getCatalogId(),
reloadedEntity.getId());
return PolarisStorageConfigurationInfo.deserialize(
callCtx.getDiagServices(), storageConfigInfoStr);
return PolarisStorageConfigurationInfo.deserialize(storageConfigInfoStr);
}

/**
Expand All @@ -63,17 +60,13 @@ public static PolarisStorageConfigurationInfo extractStorageConfiguration(
* @param properties a map of key/value pairs
* @return a String, the JSON representation of the map
*/
public String serializeProperties(PolarisCallContext callCtx, Map<String, String> properties) {

String jsonString = null;
public String serializeProperties(Map<String, String> properties) {
try {
// Deserialize the JSON string to a Map<String, String>
jsonString = MAPPER.writeValueAsString(properties);
return MAPPER.writeValueAsString(properties);
} catch (JsonProcessingException ex) {
callCtx.getDiagServices().fail("got_json_processing_exception", "ex={}", ex);
throw new RuntimeException("serializeProperties failed: " + ex.getMessage(), ex);
}

return jsonString;
}

/**
Expand All @@ -82,19 +75,13 @@ public String serializeProperties(PolarisCallContext callCtx, Map<String, String
* @param properties a JSON string representing the set of properties
* @return a Map of string
*/
public Map<String, String> deserializeProperties(PolarisCallContext callCtx, String properties) {

Map<String, String> retProperties = null;
public Map<String, String> deserializeProperties(String properties) {
try {
// Deserialize the JSON string to a Map<String, String>
retProperties = MAPPER.readValue(properties, new TypeReference<>() {});
} catch (JsonMappingException ex) {
callCtx.getDiagServices().fail("got_json_mapping_exception", "ex={}", ex);
return MAPPER.readValue(properties, new TypeReference<>() {});
} catch (JsonProcessingException ex) {
callCtx.getDiagServices().fail("got_json_processing_exception", "ex={}", ex);
throw new RuntimeException("deserializeProperties failed: " + ex.getMessage(), ex);
}

return retProperties;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
import org.apache.polaris.core.PolarisDefaultDiagServiceImpl;
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.PolarisEntityConstants;
import org.apache.polaris.core.entity.PrincipalEntity;
Expand Down Expand Up @@ -186,9 +185,6 @@ private PrincipalSecretsResult bootstrapServiceAndCreatePolarisPrincipalForRealm
BasePersistence metaStore = sessionSupplierMap.get(realmContext.getRealmIdentifier()).get();
PolarisCallContext polarisContext =
new PolarisCallContext(realmContext, metaStore, diagServices);
if (CallContext.getCurrentContext() == null) {
CallContext.setCurrentContext(polarisContext);
}

Optional<PrincipalEntity> preliminaryRootPrincipal =
metaStoreManager.findRootPrincipal(polarisContext);
Expand Down Expand Up @@ -224,9 +220,6 @@ private void checkPolarisServiceBootstrappedForRealm(RealmContext realmContext)
BasePersistence metaStore = sessionSupplierMap.get(realmContext.getRealmIdentifier()).get();
PolarisCallContext polarisContext =
new PolarisCallContext(realmContext, metaStore, diagServices);
if (CallContext.getCurrentContext() == null) {
CallContext.setCurrentContext(polarisContext);
}

Optional<PrincipalEntity> rootPrincipal = metaStoreManager.findRootPrincipal(polarisContext);
if (rootPrincipal.isEmpty()) {
Expand Down
Loading