Skip to content

Commit 7af85be

Browse files
authored
Use asMap property helpers (#2347)
seems like these helpers existed for a long time but were just not getting used consistently
1 parent f7745c2 commit 7af85be

File tree

7 files changed

+35
-91
lines changed

7 files changed

+35
-91
lines changed

polaris-core/src/main/java/org/apache/polaris/core/entity/PolarisBaseEntity.java

Lines changed: 7 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,9 @@
1919
package org.apache.polaris.core.entity;
2020

2121
import com.fasterxml.jackson.annotation.JsonIgnore;
22-
import com.fasterxml.jackson.core.JsonProcessingException;
23-
import com.fasterxml.jackson.core.type.TypeReference;
24-
import com.fasterxml.jackson.databind.ObjectMapper;
25-
import java.util.HashMap;
2622
import java.util.Map;
2723
import java.util.Objects;
24+
import org.apache.polaris.core.persistence.PolarisObjectMapperUtil;
2825

2926
/**
3027
* Base polaris entity representing all attributes of a Polaris Entity. This is used to exchange
@@ -34,9 +31,6 @@ public class PolarisBaseEntity extends PolarisEntityCore {
3431

3532
public static final String EMPTY_MAP_STRING = "{}";
3633

37-
// to serialize/deserialize properties
38-
private static final ObjectMapper MAPPER = new ObjectMapper();
39-
4034
// the type of the entity when it was resolved
4135
protected final int subTypeCode;
4236

@@ -106,25 +100,15 @@ public PolarisBaseEntity withGrantRecordsVersion(int grantRecordsVersion) {
106100

107101
@JsonIgnore
108102
public Map<String, String> getPropertiesAsMap() {
109-
if (properties == null) {
110-
return new HashMap<>();
111-
}
112-
try {
113-
return MAPPER.readValue(properties, new TypeReference<>() {});
114-
} catch (JsonProcessingException ex) {
115-
throw new IllegalStateException(
116-
String.format("Failed to deserialize json. properties %s", properties), ex);
117-
}
103+
return PolarisObjectMapperUtil.deserializeProperties(getProperties());
118104
}
119105

120106
@JsonIgnore
121-
public static String convertPropertiesToJson(Map<String, String> properties) {
122-
try {
123-
return properties == null ? null : MAPPER.writeValueAsString(properties);
124-
} catch (JsonProcessingException ex) {
125-
throw new IllegalStateException(
126-
String.format("Failed to serialize json. properties %s", properties), ex);
107+
protected static String convertPropertiesToJson(Map<String, String> properties) {
108+
if (properties == null || properties.isEmpty()) {
109+
return EMPTY_MAP_STRING;
127110
}
111+
return PolarisObjectMapperUtil.serializeProperties(properties);
128112
}
129113

130114
public String getInternalProperties() {
@@ -133,17 +117,7 @@ public String getInternalProperties() {
133117

134118
@JsonIgnore
135119
public Map<String, String> getInternalPropertiesAsMap() {
136-
if (this.internalProperties == null) {
137-
return new HashMap<>();
138-
}
139-
try {
140-
return MAPPER.readValue(this.internalProperties, new TypeReference<>() {});
141-
} catch (JsonProcessingException ex) {
142-
throw new IllegalStateException(
143-
String.format(
144-
"Failed to deserialize json. internalProperties %s", this.internalProperties),
145-
ex);
146-
}
120+
return PolarisObjectMapperUtil.deserializeProperties(getInternalProperties());
147121
}
148122

149123
public int getGrantRecordsVersion() {

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

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -858,9 +858,7 @@ private void revokeGrantRecord(
858858
}
859859

860860
PolarisBaseEntity principal = loadEntityResult.getEntity();
861-
Map<String, String> internalProps =
862-
PolarisObjectMapperUtil.deserializeProperties(
863-
principal.getInternalProperties() == null ? "{}" : principal.getInternalProperties());
861+
Map<String, String> internalProps = principal.getInternalPropertiesAsMap();
864862

865863
boolean doReset =
866864
reset
@@ -877,15 +875,13 @@ private void revokeGrantRecord(
877875
PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE)) {
878876
internalProps.put(
879877
PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE, "true");
880-
principalBuilder.internalProperties(
881-
PolarisObjectMapperUtil.serializeProperties(internalProps));
878+
principalBuilder.internalPropertiesAsMap(internalProps);
882879
principalBuilder.entityVersion(principal.getEntityVersion() + 1);
883880
ms.writeEntity(callCtx, principalBuilder.build(), true, principal);
884881
} else if (internalProps.containsKey(
885882
PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE)) {
886883
internalProps.remove(PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE);
887-
principalBuilder.internalProperties(
888-
PolarisObjectMapperUtil.serializeProperties(internalProps));
884+
principalBuilder.internalPropertiesAsMap(internalProps);
889885
principalBuilder.entityVersion(principal.getEntityVersion() + 1);
890886
ms.writeEntity(callCtx, principalBuilder.build(), true, principal);
891887
}
@@ -1230,16 +1226,15 @@ private void revokeGrantRecord(
12301226
PolarisTaskConstants.TASK_DATA, PolarisObjectMapperUtil.serialize(refreshEntityToDrop));
12311227
PolarisBaseEntity.Builder taskEntityBuilder =
12321228
new PolarisBaseEntity.Builder()
1233-
.properties(PolarisObjectMapperUtil.serializeProperties(properties))
1229+
.propertiesAsMap(properties)
12341230
.id(ms.generateNewId(callCtx))
12351231
.catalogId(0L)
12361232
.name("entityCleanup_" + entityToDrop.getId())
12371233
.typeCode(PolarisEntityType.TASK.getCode())
12381234
.subTypeCode(PolarisEntitySubType.NULL_SUBTYPE.getCode())
12391235
.createTimestamp(clock.millis());
12401236
if (cleanupProperties != null) {
1241-
taskEntityBuilder.internalProperties(
1242-
PolarisObjectMapperUtil.serializeProperties(cleanupProperties));
1237+
taskEntityBuilder.internalPropertiesAsMap(cleanupProperties);
12431238
}
12441239
// TODO: Add a way to create the task entities atomically with dropping the entity;
12451240
// in the meantime, if the server fails partway through a dropEntity, it's possible that
@@ -1523,8 +1518,7 @@ private void revokeGrantRecord(
15231518
task -> {
15241519
PolarisBaseEntity.Builder updatedTaskBuilder =
15251520
new PolarisBaseEntity.Builder(task);
1526-
Map<String, String> properties =
1527-
PolarisObjectMapperUtil.deserializeProperties(task.getProperties());
1521+
Map<String, String> properties = task.getPropertiesAsMap();
15281522
properties.put(PolarisTaskConstants.LAST_ATTEMPT_EXECUTOR_ID, executorId);
15291523
properties.put(
15301524
PolarisTaskConstants.LAST_ATTEMPT_START_TIME, String.valueOf(clock.millis()));
@@ -1534,8 +1528,7 @@ private void revokeGrantRecord(
15341528
Integer.parseInt(
15351529
properties.getOrDefault(PolarisTaskConstants.ATTEMPT_COUNT, "0"))
15361530
+ 1));
1537-
updatedTaskBuilder.properties(
1538-
PolarisObjectMapperUtil.serializeProperties(properties));
1531+
updatedTaskBuilder.propertiesAsMap(properties);
15391532
EntityResult result =
15401533
updateEntityPropertiesIfNotChanged(callCtx, null, updatedTaskBuilder.build());
15411534
if (result.getReturnStatus() == BaseResult.ReturnStatus.SUCCESS) {

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ public abstract class BaseMetaStoreManager implements PolarisMetaStoreManager {
3939

4040
public static PolarisStorageConfigurationInfo extractStorageConfiguration(
4141
@Nonnull PolarisDiagnostics diagnostics, PolarisBaseEntity reloadedEntity) {
42-
Map<String, String> propMap =
43-
PolarisObjectMapperUtil.deserializeProperties(reloadedEntity.getInternalProperties());
42+
Map<String, String> propMap = reloadedEntity.getInternalPropertiesAsMap();
4443
String storageConfigInfoStr =
4544
propMap.get(PolarisEntityConstants.getStorageConfigInfoPropertyName());
4645

polaris-core/src/main/java/org/apache/polaris/core/persistence/transactional/TransactionalMetaStoreManagerImpl.java

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -893,9 +893,7 @@ private void bootstrapPolarisService(
893893

894894
PolarisBaseEntity principal = loadEntityResult.getEntity();
895895
PolarisBaseEntity.Builder principalBuilder = new PolarisBaseEntity.Builder(principal);
896-
Map<String, String> internalProps =
897-
PolarisObjectMapperUtil.deserializeProperties(
898-
principal.getInternalProperties() == null ? "{}" : principal.getInternalProperties());
896+
Map<String, String> internalProps = principal.getInternalPropertiesAsMap();
899897

900898
boolean doReset =
901899
reset
@@ -911,15 +909,13 @@ private void bootstrapPolarisService(
911909
PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE)) {
912910
internalProps.put(
913911
PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE, "true");
914-
principalBuilder.internalProperties(
915-
PolarisObjectMapperUtil.serializeProperties(internalProps));
912+
principalBuilder.internalPropertiesAsMap(internalProps);
916913
principalBuilder.entityVersion(principal.getEntityVersion() + 1);
917914
ms.writeEntityInCurrentTxn(callCtx, principalBuilder.build(), true, principal);
918915
} else if (internalProps.containsKey(
919916
PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE)) {
920917
internalProps.remove(PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE);
921-
principalBuilder.internalProperties(
922-
PolarisObjectMapperUtil.serializeProperties(internalProps));
918+
principalBuilder.internalPropertiesAsMap(internalProps);
923919
principalBuilder.entityVersion(principal.getEntityVersion() + 1);
924920
ms.writeEntityInCurrentTxn(callCtx, principalBuilder.build(), true, principal);
925921
}
@@ -1438,10 +1434,9 @@ private void bootstrapPolarisService(
14381434
.typeCode(PolarisEntityType.TASK.getCode())
14391435
.subTypeCode(PolarisEntitySubType.NULL_SUBTYPE.getCode())
14401436
.createTimestamp(clock.millis())
1441-
.properties(PolarisObjectMapperUtil.serializeProperties(properties));
1437+
.propertiesAsMap(properties);
14421438
if (cleanupProperties != null) {
1443-
taskEntityBuilder.internalProperties(
1444-
PolarisObjectMapperUtil.serializeProperties(cleanupProperties));
1439+
taskEntityBuilder.internalPropertiesAsMap(cleanupProperties);
14451440
}
14461441
PolarisBaseEntity taskEntity = taskEntityBuilder.build();
14471442
createEntityIfNotExists(callCtx, ms, null, taskEntity);
@@ -1975,8 +1970,7 @@ private PolarisEntityResolver resolveSecurableToRoleGrant(
19751970
.map(
19761971
task -> {
19771972
PolarisBaseEntity.Builder updatedTask = new PolarisBaseEntity.Builder(task);
1978-
Map<String, String> properties =
1979-
PolarisObjectMapperUtil.deserializeProperties(task.getProperties());
1973+
Map<String, String> properties = task.getPropertiesAsMap();
19801974
properties.put(PolarisTaskConstants.LAST_ATTEMPT_EXECUTOR_ID, executorId);
19811975
properties.put(
19821976
PolarisTaskConstants.LAST_ATTEMPT_START_TIME, String.valueOf(clock.millis()));
@@ -1986,7 +1980,7 @@ private PolarisEntityResolver resolveSecurableToRoleGrant(
19861980
Integer.parseInt(
19871981
properties.getOrDefault(PolarisTaskConstants.ATTEMPT_COUNT, "0"))
19881982
+ 1));
1989-
updatedTask.properties(PolarisObjectMapperUtil.serializeProperties(properties));
1983+
updatedTask.propertiesAsMap(properties);
19901984
EntityResult result =
19911985
updateEntityPropertiesIfNotChanged(callCtx, ms, null, updatedTask.build());
19921986
if (result.getReturnStatus() == BaseResult.ReturnStatus.SUCCESS) {

polaris-core/src/test/java/org/apache/polaris/core/storage/cache/StorageCredentialCacheTest.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import org.apache.polaris.core.entity.PolarisEntitySubType;
3737
import org.apache.polaris.core.entity.PolarisEntityType;
3838
import org.apache.polaris.core.persistence.PolarisMetaStoreManager;
39-
import org.apache.polaris.core.persistence.PolarisObjectMapperUtil;
4039
import org.apache.polaris.core.persistence.dao.entity.BaseResult;
4140
import org.apache.polaris.core.persistence.dao.entity.ScopedCredentialsResult;
4241
import org.apache.polaris.core.persistence.transactional.TransactionalPersistence;
@@ -246,9 +245,7 @@ public void testCacheGenerateNewEntries() {
246245
internalMap.put(
247246
PolarisEntityConstants.getStorageConfigInfoPropertyName(), "newStorageConfig");
248247
PolarisBaseEntity updateEntity =
249-
new PolarisBaseEntity.Builder(entity)
250-
.internalProperties(PolarisObjectMapperUtil.serializeProperties(internalMap))
251-
.build();
248+
new PolarisBaseEntity.Builder(entity).internalPropertiesAsMap(internalMap).build();
252249
storageCredentialCache.getOrGenerateSubScopeCreds(
253250
metaStoreManager,
254251
callCtx,
@@ -286,9 +283,7 @@ public void testCacheGenerateNewEntries() {
286283
internalMap.put(
287284
PolarisEntityConstants.getStorageConfigInfoPropertyName(), "newStorageConfig");
288285
PolarisBaseEntity updateEntity =
289-
new PolarisBaseEntity.Builder(entity)
290-
.internalProperties(PolarisObjectMapperUtil.serializeProperties(internalMap))
291-
.build();
286+
new PolarisBaseEntity.Builder(entity).internalPropertiesAsMap(internalMap).build();
292287
storageCredentialCache.getOrGenerateSubScopeCreds(
293288
metaStoreManager,
294289
callCtx,

polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/BasePolarisMetaStoreManagerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -292,8 +292,8 @@ protected void testLoadTasks() {
292292
entry ->
293293
Assertions.assertThat(entry)
294294
.extracting(
295-
e -> PolarisObjectMapperUtil.deserializeProperties(e.getProperties()))
296-
.asInstanceOf(InstanceOfAssertFactories.map(String.class, String.class))
295+
PolarisBaseEntity::getPropertiesAsMap,
296+
InstanceOfAssertFactories.map(String.class, String.class))
297297
.containsEntry(PolarisTaskConstants.LAST_ATTEMPT_EXECUTOR_ID, executorId)
298298
.containsEntry(PolarisTaskConstants.ATTEMPT_COUNT, "1"));
299299
Set<String> firstTasks =

polaris-core/src/testFixtures/java/org/apache/polaris/core/persistence/PolarisTestMetaStoreManager.java

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
*/
1919
package org.apache.polaris.core.persistence;
2020

21-
import static org.apache.polaris.core.entity.PolarisBaseEntity.convertPropertiesToJson;
22-
2321
import com.fasterxml.jackson.core.JsonProcessingException;
2422
import com.fasterxml.jackson.databind.JsonNode;
2523
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -419,11 +417,8 @@ PolarisBaseEntity createPrincipal(String name) {
419417
.subTypeCode(PolarisEntitySubType.NULL_SUBTYPE.getCode())
420418
.parentId(PolarisEntityConstants.getRootEntityId())
421419
.name(name)
422-
.internalProperties(
423-
PolarisObjectMapperUtil.serializeProperties(
424-
Map.of(
425-
PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE,
426-
"true")))
420+
.internalPropertiesAsMap(
421+
Map.of(PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE, "true"))
427422
.build();
428423

429424
CreatePrincipalResult createPrincipalResult =
@@ -466,8 +461,7 @@ PolarisBaseEntity createPrincipal(String name) {
466461
.isEqualTo(secrets.getSecondarySecretHash());
467462

468463
Map<String, String> internalProperties =
469-
PolarisObjectMapperUtil.deserializeProperties(
470-
createPrincipalResult.getPrincipal().getInternalProperties());
464+
createPrincipalResult.getPrincipal().getInternalPropertiesAsMap();
471465
Assertions.assertThat(
472466
internalProperties.get(
473467
PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE))
@@ -510,8 +504,7 @@ PolarisBaseEntity createPrincipal(String name) {
510504
createPrincipalResult.getPrincipal().getId(),
511505
createPrincipalResult.getPrincipal().getType())
512506
.getEntity();
513-
internalProperties =
514-
PolarisObjectMapperUtil.deserializeProperties(reloadPrincipal.getInternalProperties());
507+
internalProperties = reloadPrincipal.getInternalPropertiesAsMap();
515508
Assertions.assertThat(
516509
internalProperties.get(
517510
PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE))
@@ -567,8 +560,7 @@ PolarisBaseEntity createPrincipal(String name) {
567560
.loadEntity(
568561
this.polarisCallContext, 0L, principalEntity.getId(), principalEntity.getType())
569562
.getEntity();
570-
internalProperties =
571-
PolarisObjectMapperUtil.deserializeProperties(newPrincipal.getInternalProperties());
563+
internalProperties = newPrincipal.getInternalPropertiesAsMap();
572564
Assertions.assertThat(
573565
internalProperties.get(
574566
PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE))
@@ -601,8 +593,7 @@ PolarisBaseEntity createPrincipal(String name) {
601593
.loadEntity(
602594
this.polarisCallContext, 0L, principalEntity.getId(), principalEntity.getType())
603595
.getEntity();
604-
internalProperties =
605-
PolarisObjectMapperUtil.deserializeProperties(finalPrincipal.getInternalProperties());
596+
internalProperties = finalPrincipal.getInternalPropertiesAsMap();
606597
Assertions.assertThat(
607598
internalProperties.get(
608599
PolarisEntityConstants.PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_STATE))
@@ -669,7 +660,7 @@ PolarisBaseEntity createEntity(
669660
.subTypeCode(entitySubType.getCode())
670661
.parentId(parentId)
671662
.name(name)
672-
.properties(convertPropertiesToJson(properties))
663+
.propertiesAsMap(properties)
673664
.build();
674665
PolarisBaseEntity entity =
675666
polarisMetaStoreManager
@@ -870,11 +861,9 @@ void dropEntity(List<PolarisEntityCore> catalogPath, PolarisBaseEntity entityToD
870861
Assertions.assertThat(cleanupTask).isNotNull();
871862
Assertions.assertThat(cleanupTask.getType()).isEqualTo(PolarisEntityType.TASK);
872863
Assertions.assertThat(cleanupTask.getInternalProperties()).isNotNull();
873-
Map<String, String> internalProperties =
874-
PolarisObjectMapperUtil.deserializeProperties(cleanupTask.getInternalProperties());
864+
Map<String, String> internalProperties = cleanupTask.getInternalPropertiesAsMap();
875865
Assertions.assertThat(internalProperties).isEqualTo(cleanupProperties);
876-
Map<String, String> properties =
877-
PolarisObjectMapperUtil.deserializeProperties(cleanupTask.getProperties());
866+
Map<String, String> properties = cleanupTask.getPropertiesAsMap();
878867
Assertions.assertThat(properties).isNotNull();
879868
Assertions.assertThat(properties.get(PolarisTaskConstants.TASK_DATA)).isNotNull();
880869
PolarisBaseEntity droppedEntity =

0 commit comments

Comments
 (0)