ATLAS-2838: Replace GraphHelper.encodeProperty() with AtlasGraphUtilsV2.encodeProperty()
diff --git a/intg/src/main/java/org/apache/atlas/type/AtlasStructType.java b/intg/src/main/java/org/apache/atlas/type/AtlasStructType.java
index b6b4ccd..0c5c91b 100644
--- a/intg/src/main/java/org/apache/atlas/type/AtlasStructType.java
+++ b/intg/src/main/java/org/apache/atlas/type/AtlasStructType.java
@@ -863,10 +863,13 @@
// Keys copied from org.janusgraph.graphdb.types.system.SystemTypeManager.RESERVED_CHARS
// JanusGraph checks that these chars are not part of any keys hence encoding
- private static String[][] RESERVED_CHAR_ENCODE_MAP = new String[][] {
- new String[] { "{", "_o" },
- new String[] { "}", "_c" },
- new String[] { "\"", "_q" },
+ // also including Titan reserved characters to support migrated property keys
+ private static String[][] RESERVED_CHAR_ENCODE_MAP = new String[][]{
+ new String[] {"{", "_o"},
+ new String[] {"}", "_c"},
+ new String[] {"\"", "_q"},
+ new String[] {"$", "_d"}, //titan reserved character
+ new String[] {"%", "_p"}, //titan reserved characters
};
private static final char[] IDX_QRY_OFFENDING_CHARS = { '@', '/', ' ', '-' };
diff --git a/repository/src/main/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexer.java b/repository/src/main/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexer.java
index cb0cbf3..bae2c3f 100755
--- a/repository/src/main/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexer.java
+++ b/repository/src/main/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexer.java
@@ -42,6 +42,7 @@
import org.apache.atlas.repository.graphdb.AtlasGraphIndex;
import org.apache.atlas.repository.graphdb.AtlasGraphManagement;
import org.apache.atlas.repository.graphdb.AtlasPropertyKey;
+import org.apache.atlas.repository.store.graph.v2.AtlasGraphUtilsV2;
import org.apache.atlas.type.AtlasArrayType;
import org.apache.atlas.type.AtlasClassificationType;
import org.apache.atlas.type.AtlasEntityType;
@@ -315,7 +316,7 @@
}
private void createIndexForAttribute(AtlasGraphManagement management, String typeName, AtlasAttributeDef attributeDef) {
- final String propertyName = GraphHelper.encodePropertyKey(typeName + "." + attributeDef.getName());
+ final String propertyName = AtlasGraphUtilsV2.encodePropertyKey(typeName + "." + attributeDef.getName());
AtlasCardinality cardinality = toAtlasCardinality(attributeDef.getCardinality());
boolean isUnique = attributeDef.getIsUnique();
boolean isIndexable = attributeDef.getIsIndexable();
@@ -729,7 +730,7 @@
}
private void cleanupIndexForAttribute(AtlasGraphManagement management, String typeName, AtlasAttributeDef attributeDef) {
- final String propertyName = GraphHelper.encodePropertyKey(typeName + "." + attributeDef.getName());
+ final String propertyName = AtlasGraphUtilsV2.encodePropertyKey(typeName + "." + attributeDef.getName());
String attribTypeName = attributeDef.getTypeName();
boolean isBuiltInType = AtlasTypeUtil.isBuiltInType(attribTypeName);
boolean isArrayType = isArrayType(attribTypeName);
diff --git a/repository/src/main/java/org/apache/atlas/repository/graph/GraphHelper.java b/repository/src/main/java/org/apache/atlas/repository/graph/GraphHelper.java
index babe267..19069ba 100755
--- a/repository/src/main/java/org/apache/atlas/repository/graph/GraphHelper.java
+++ b/repository/src/main/java/org/apache/atlas/repository/graph/GraphHelper.java
@@ -647,7 +647,7 @@
}
public static <T extends AtlasElement> void setProperty(T element, String propertyName, Object value) {
- String actualPropertyName = GraphHelper.encodePropertyKey(propertyName);
+ String actualPropertyName = AtlasGraphUtilsV2.encodePropertyKey(propertyName);
String elementStr = null;
@@ -688,7 +688,7 @@
* @return
*/
public static <T> T getSingleValuedProperty(AtlasElement element, String propertyName, Class<T> clazz) {
- String actualPropertyName = GraphHelper.encodePropertyKey(propertyName);
+ String actualPropertyName = AtlasGraphUtilsV2.encodePropertyKey(propertyName);
if (LOG.isTraceEnabled()) {
LOG.trace("Reading property {} from {}", actualPropertyName, string(element));
@@ -699,7 +699,7 @@
public static Object getProperty(AtlasVertex<?,?> vertex, String propertyName) {
- String actualPropertyName = GraphHelper.encodePropertyKey(propertyName);
+ String actualPropertyName = AtlasGraphUtilsV2.encodePropertyKey(propertyName);
if (LOG.isTraceEnabled()) {
LOG.trace("Reading property {} from {}", actualPropertyName, string(vertex));
@@ -714,7 +714,7 @@
}
public static Object getProperty(AtlasEdge<?,?> edge, String propertyName) {
- String actualPropertyName = GraphHelper.encodePropertyKey(propertyName);
+ String actualPropertyName = AtlasGraphUtilsV2.encodePropertyKey(propertyName);
if (LOG.isTraceEnabled()) {
LOG.trace("Reading property {} from {}", actualPropertyName, string(edge));
@@ -740,7 +740,7 @@
* @param value
*/
public static void addProperty(AtlasVertex vertex, String propertyName, Object value) {
- String actualPropertyName = GraphHelper.encodePropertyKey(propertyName);
+ String actualPropertyName = AtlasGraphUtilsV2.encodePropertyKey(propertyName);
if (LOG.isDebugEnabled()) {
LOG.debug("Adding property {} = \"{}\" to vertex {}", actualPropertyName, value, string(vertex));
@@ -1686,7 +1686,7 @@
// map elements for primitive types
public static Map<String, Object> getPrimitiveMap(AtlasVertex instanceVertex, String propertyName) {
- Map<String, Object> ret = instanceVertex.getProperty(encodePropertyKey(propertyName), Map.class);
+ Map<String, Object> ret = instanceVertex.getProperty(AtlasGraphUtilsV2.encodePropertyKey(propertyName), Map.class);
if (ret == null) {
ret = new HashMap<>();
@@ -1788,17 +1788,6 @@
}});
- public static String encodePropertyKey(String key) {
- if (StringUtils.isBlank(key)) {
- return key;
- }
-
- for (String str : RESERVED_CHARS_ENCODE_MAP.keySet()) {
- key = key.replace(str, RESERVED_CHARS_ENCODE_MAP.get(str));
- }
- return key;
- }
-
public static String decodePropertyKey(String key) {
if (StringUtils.isBlank(key)) {
return key;
@@ -1840,25 +1829,25 @@
public static void setListPropertyFromElementIds(AtlasVertex<?, ?> instanceVertex, String propertyName,
List<AtlasElement> elements) {
- String actualPropertyName = GraphHelper.encodePropertyKey(propertyName);
+ String actualPropertyName = AtlasGraphUtilsV2.encodePropertyKey(propertyName);
instanceVertex.setPropertyFromElementsIds(actualPropertyName, elements);
}
public static void setPropertyFromElementId(AtlasVertex<?, ?> instanceVertex, String propertyName,
AtlasElement value) {
- String actualPropertyName = GraphHelper.encodePropertyKey(propertyName);
+ String actualPropertyName = AtlasGraphUtilsV2.encodePropertyKey(propertyName);
instanceVertex.setPropertyFromElementId(actualPropertyName, value);
}
public static void setListProperty(AtlasVertex instanceVertex, String propertyName, ArrayList<String> value) {
- String actualPropertyName = GraphHelper.encodePropertyKey(propertyName);
+ String actualPropertyName = AtlasGraphUtilsV2.encodePropertyKey(propertyName);
instanceVertex.setListProperty(actualPropertyName, value);
}
public static List<String> getListProperty(AtlasVertex instanceVertex, String propertyName) {
- String actualPropertyName = GraphHelper.encodePropertyKey(propertyName);
+ String actualPropertyName = AtlasGraphUtilsV2.encodePropertyKey(propertyName);
return instanceVertex.getListProperty(actualPropertyName);
}
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasGraphUtilsV2.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasGraphUtilsV2.java
index ccfd3e5..25770a3 100644
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasGraphUtilsV2.java
+++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasGraphUtilsV2.java
@@ -151,15 +151,11 @@
}
public static String encodePropertyKey(String key) {
- String ret = AtlasStructType.AtlasAttribute.encodePropertyKey(key);
-
- return ret;
+ return AtlasAttribute.encodePropertyKey(key);
}
public static String decodePropertyKey(String key) {
- String ret = AtlasStructType.AtlasAttribute.decodePropertyKey(key);
-
- return ret;
+ return AtlasAttribute.decodePropertyKey(key);
}
/**
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasStructDefStoreV2.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasStructDefStoreV2.java
index c34c94e..bcd805e 100644
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasStructDefStoreV2.java
+++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasStructDefStoreV2.java
@@ -347,17 +347,23 @@
if (StringUtils.isEmpty(attributeDef.getName())) {
throw new AtlasBaseException(AtlasErrorCode.MISSING_MANDATORY_ATTRIBUTE, structDef.getName(), "name");
}
+
if (StringUtils.isEmpty(attributeDef.getTypeName())) {
throw new AtlasBaseException(AtlasErrorCode.MISSING_MANDATORY_ATTRIBUTE, structDef.getName(), "typeName");
}
- String propertyKey = AtlasGraphUtilsV2.getTypeDefPropertyKey(structDef, attributeDef.getName());
+ String propertyKey = AtlasGraphUtilsV2.getTypeDefPropertyKey(structDef, attributeDef.getName());
+ String encodedPropertyKey = AtlasGraphUtilsV2.encodePropertyKey(propertyKey);
- AtlasGraphUtilsV2.setProperty(vertex, propertyKey, toJsonFromAttribute(structType.getAttribute(attributeDef.getName())));
+ vertex.setProperty(encodedPropertyKey, toJsonFromAttribute(structType.getAttribute(attributeDef.getName())));
attrNames.add(attributeDef.getName());
}
- AtlasGraphUtilsV2.setProperty(vertex, AtlasGraphUtilsV2.getTypeDefPropertyKey(structDef), attrNames);
+
+ String typeNamePropertyKey = AtlasGraphUtilsV2.getTypeDefPropertyKey(structDef);
+ String encodedtypeNamePropertyKey = AtlasGraphUtilsV2.encodePropertyKey(typeNamePropertyKey);
+
+ vertex.setProperty(encodedtypeNamePropertyKey, attrNames);
}
public static void updateVertexPreUpdate(AtlasStructDef structDef, AtlasStructType structType,
@@ -427,24 +433,27 @@
}
}
- public static AtlasStructDef toStructDef(AtlasVertex vertex, AtlasStructDef structDef,
- AtlasTypeDefGraphStoreV2 typeDefStore) throws AtlasBaseException {
- AtlasStructDef ret = (structDef != null) ? structDef :new AtlasStructDef();
+ public static AtlasStructDef toStructDef(AtlasVertex vertex, AtlasStructDef structDef, AtlasTypeDefGraphStoreV2 typeDefStore)
+ throws AtlasBaseException {
+ AtlasStructDef ret = (structDef != null) ? structDef : new AtlasStructDef();
typeDefStore.vertexToTypeDef(vertex, ret);
- List<AtlasAttributeDef> attributeDefs = new ArrayList<>();
- List<String> attrNames = vertex.getProperty(AtlasGraphUtilsV2.getTypeDefPropertyKey(ret), List.class);
+ List<AtlasAttributeDef> attributeDefs = new ArrayList<>();
+ String typePropertyKey = AtlasGraphUtilsV2.getTypeDefPropertyKey(ret);
+ String encodedTypePropertyKey = AtlasGraphUtilsV2.encodePropertyKey(typePropertyKey);
+ List<String> attrNames = vertex.getProperty(encodedTypePropertyKey, List.class);
if (CollectionUtils.isNotEmpty(attrNames)) {
for (String attrName : attrNames) {
- String propertyKey = AtlasGraphUtilsV2.getTypeDefPropertyKey(ret, attrName);
- String attribJson = vertex.getProperty(GraphHelper.encodePropertyKey(propertyKey), String.class);
+ String attrPropertyKey = AtlasGraphUtilsV2.getTypeDefPropertyKey(ret, attrName);
+ String encodedAttrPropertyKey = AtlasGraphUtilsV2.encodePropertyKey(attrPropertyKey);
+ String attrJson = vertex.getProperty(encodedAttrPropertyKey, String.class);
- attributeDefs.add(toAttributeDefFromJson(structDef, AtlasType.fromJson(attribJson, Map.class),
- typeDefStore));
+ attributeDefs.add(toAttributeDefFromJson(structDef, AtlasType.fromJson(attrJson, Map.class), typeDefStore));
}
}
+
ret.setAttributeDefs(attributeDefs);
return ret;