Commit 0ed9f0e2 by Sarath Subramanian

ATLAS-2838: Replace GraphHelper.encodeProperty() with AtlasGraphUtilsV2.encodeProperty()

parent b6a664df
...@@ -863,10 +863,13 @@ public class AtlasStructType extends AtlasType { ...@@ -863,10 +863,13 @@ public class AtlasStructType extends AtlasType {
// Keys copied from org.janusgraph.graphdb.types.system.SystemTypeManager.RESERVED_CHARS // Keys copied from org.janusgraph.graphdb.types.system.SystemTypeManager.RESERVED_CHARS
// JanusGraph checks that these chars are not part of any keys hence encoding // JanusGraph checks that these chars are not part of any keys hence encoding
private static String[][] RESERVED_CHAR_ENCODE_MAP = new String[][] { // also including Titan reserved characters to support migrated property keys
new String[] { "{", "_o" }, private static String[][] RESERVED_CHAR_ENCODE_MAP = new String[][]{
new String[] { "}", "_c" }, new String[] {"{", "_o"},
new String[] { "\"", "_q" }, 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 = { '@', '/', ' ', '-' }; private static final char[] IDX_QRY_OFFENDING_CHARS = { '@', '/', ' ', '-' };
......
...@@ -42,6 +42,7 @@ import org.apache.atlas.repository.graphdb.AtlasGraph; ...@@ -42,6 +42,7 @@ import org.apache.atlas.repository.graphdb.AtlasGraph;
import org.apache.atlas.repository.graphdb.AtlasGraphIndex; import org.apache.atlas.repository.graphdb.AtlasGraphIndex;
import org.apache.atlas.repository.graphdb.AtlasGraphManagement; import org.apache.atlas.repository.graphdb.AtlasGraphManagement;
import org.apache.atlas.repository.graphdb.AtlasPropertyKey; 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.AtlasArrayType;
import org.apache.atlas.type.AtlasClassificationType; import org.apache.atlas.type.AtlasClassificationType;
import org.apache.atlas.type.AtlasEntityType; import org.apache.atlas.type.AtlasEntityType;
...@@ -315,7 +316,7 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang ...@@ -315,7 +316,7 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang
} }
private void createIndexForAttribute(AtlasGraphManagement management, String typeName, AtlasAttributeDef attributeDef) { 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()); AtlasCardinality cardinality = toAtlasCardinality(attributeDef.getCardinality());
boolean isUnique = attributeDef.getIsUnique(); boolean isUnique = attributeDef.getIsUnique();
boolean isIndexable = attributeDef.getIsIndexable(); boolean isIndexable = attributeDef.getIsIndexable();
...@@ -729,7 +730,7 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang ...@@ -729,7 +730,7 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang
} }
private void cleanupIndexForAttribute(AtlasGraphManagement management, String typeName, AtlasAttributeDef attributeDef) { 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(); String attribTypeName = attributeDef.getTypeName();
boolean isBuiltInType = AtlasTypeUtil.isBuiltInType(attribTypeName); boolean isBuiltInType = AtlasTypeUtil.isBuiltInType(attribTypeName);
boolean isArrayType = isArrayType(attribTypeName); boolean isArrayType = isArrayType(attribTypeName);
......
...@@ -647,7 +647,7 @@ public final class GraphHelper { ...@@ -647,7 +647,7 @@ public final class GraphHelper {
} }
public static <T extends AtlasElement> void setProperty(T element, String propertyName, Object value) { 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; String elementStr = null;
...@@ -688,7 +688,7 @@ public final class GraphHelper { ...@@ -688,7 +688,7 @@ public final class GraphHelper {
* @return * @return
*/ */
public static <T> T getSingleValuedProperty(AtlasElement element, String propertyName, Class<T> clazz) { 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()) { if (LOG.isTraceEnabled()) {
LOG.trace("Reading property {} from {}", actualPropertyName, string(element)); LOG.trace("Reading property {} from {}", actualPropertyName, string(element));
...@@ -699,7 +699,7 @@ public final class GraphHelper { ...@@ -699,7 +699,7 @@ public final class GraphHelper {
public static Object getProperty(AtlasVertex<?,?> vertex, String propertyName) { public static Object getProperty(AtlasVertex<?,?> vertex, String propertyName) {
String actualPropertyName = GraphHelper.encodePropertyKey(propertyName); String actualPropertyName = AtlasGraphUtilsV2.encodePropertyKey(propertyName);
if (LOG.isTraceEnabled()) { if (LOG.isTraceEnabled()) {
LOG.trace("Reading property {} from {}", actualPropertyName, string(vertex)); LOG.trace("Reading property {} from {}", actualPropertyName, string(vertex));
...@@ -714,7 +714,7 @@ public final class GraphHelper { ...@@ -714,7 +714,7 @@ public final class GraphHelper {
} }
public static Object getProperty(AtlasEdge<?,?> edge, String propertyName) { public static Object getProperty(AtlasEdge<?,?> edge, String propertyName) {
String actualPropertyName = GraphHelper.encodePropertyKey(propertyName); String actualPropertyName = AtlasGraphUtilsV2.encodePropertyKey(propertyName);
if (LOG.isTraceEnabled()) { if (LOG.isTraceEnabled()) {
LOG.trace("Reading property {} from {}", actualPropertyName, string(edge)); LOG.trace("Reading property {} from {}", actualPropertyName, string(edge));
...@@ -740,7 +740,7 @@ public final class GraphHelper { ...@@ -740,7 +740,7 @@ public final class GraphHelper {
* @param value * @param value
*/ */
public static void addProperty(AtlasVertex vertex, String propertyName, Object value) { public static void addProperty(AtlasVertex vertex, String propertyName, Object value) {
String actualPropertyName = GraphHelper.encodePropertyKey(propertyName); String actualPropertyName = AtlasGraphUtilsV2.encodePropertyKey(propertyName);
if (LOG.isDebugEnabled()) { if (LOG.isDebugEnabled()) {
LOG.debug("Adding property {} = \"{}\" to vertex {}", actualPropertyName, value, string(vertex)); LOG.debug("Adding property {} = \"{}\" to vertex {}", actualPropertyName, value, string(vertex));
...@@ -1686,7 +1686,7 @@ public final class GraphHelper { ...@@ -1686,7 +1686,7 @@ public final class GraphHelper {
// map elements for primitive types // map elements for primitive types
public static Map<String, Object> getPrimitiveMap(AtlasVertex instanceVertex, String propertyName) { 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) { if (ret == null) {
ret = new HashMap<>(); ret = new HashMap<>();
...@@ -1788,17 +1788,6 @@ public final class GraphHelper { ...@@ -1788,17 +1788,6 @@ public final class GraphHelper {
}}); }});
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) { public static String decodePropertyKey(String key) {
if (StringUtils.isBlank(key)) { if (StringUtils.isBlank(key)) {
return key; return key;
...@@ -1840,25 +1829,25 @@ public final class GraphHelper { ...@@ -1840,25 +1829,25 @@ public final class GraphHelper {
public static void setListPropertyFromElementIds(AtlasVertex<?, ?> instanceVertex, String propertyName, public static void setListPropertyFromElementIds(AtlasVertex<?, ?> instanceVertex, String propertyName,
List<AtlasElement> elements) { List<AtlasElement> elements) {
String actualPropertyName = GraphHelper.encodePropertyKey(propertyName); String actualPropertyName = AtlasGraphUtilsV2.encodePropertyKey(propertyName);
instanceVertex.setPropertyFromElementsIds(actualPropertyName, elements); instanceVertex.setPropertyFromElementsIds(actualPropertyName, elements);
} }
public static void setPropertyFromElementId(AtlasVertex<?, ?> instanceVertex, String propertyName, public static void setPropertyFromElementId(AtlasVertex<?, ?> instanceVertex, String propertyName,
AtlasElement value) { AtlasElement value) {
String actualPropertyName = GraphHelper.encodePropertyKey(propertyName); String actualPropertyName = AtlasGraphUtilsV2.encodePropertyKey(propertyName);
instanceVertex.setPropertyFromElementId(actualPropertyName, value); instanceVertex.setPropertyFromElementId(actualPropertyName, value);
} }
public static void setListProperty(AtlasVertex instanceVertex, String propertyName, ArrayList<String> 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); instanceVertex.setListProperty(actualPropertyName, value);
} }
public static List<String> getListProperty(AtlasVertex instanceVertex, String propertyName) { public static List<String> getListProperty(AtlasVertex instanceVertex, String propertyName) {
String actualPropertyName = GraphHelper.encodePropertyKey(propertyName); String actualPropertyName = AtlasGraphUtilsV2.encodePropertyKey(propertyName);
return instanceVertex.getListProperty(actualPropertyName); return instanceVertex.getListProperty(actualPropertyName);
} }
......
...@@ -151,15 +151,11 @@ public class AtlasGraphUtilsV2 { ...@@ -151,15 +151,11 @@ public class AtlasGraphUtilsV2 {
} }
public static String encodePropertyKey(String key) { public static String encodePropertyKey(String key) {
String ret = AtlasStructType.AtlasAttribute.encodePropertyKey(key); return AtlasAttribute.encodePropertyKey(key);
return ret;
} }
public static String decodePropertyKey(String key) { public static String decodePropertyKey(String key) {
String ret = AtlasStructType.AtlasAttribute.decodePropertyKey(key); return AtlasAttribute.decodePropertyKey(key);
return ret;
} }
/** /**
......
...@@ -347,17 +347,23 @@ public class AtlasStructDefStoreV2 extends AtlasAbstractDefStoreV2<AtlasStructDe ...@@ -347,17 +347,23 @@ public class AtlasStructDefStoreV2 extends AtlasAbstractDefStoreV2<AtlasStructDe
if (StringUtils.isEmpty(attributeDef.getName())) { if (StringUtils.isEmpty(attributeDef.getName())) {
throw new AtlasBaseException(AtlasErrorCode.MISSING_MANDATORY_ATTRIBUTE, structDef.getName(), "name"); throw new AtlasBaseException(AtlasErrorCode.MISSING_MANDATORY_ATTRIBUTE, structDef.getName(), "name");
} }
if (StringUtils.isEmpty(attributeDef.getTypeName())) { if (StringUtils.isEmpty(attributeDef.getTypeName())) {
throw new AtlasBaseException(AtlasErrorCode.MISSING_MANDATORY_ATTRIBUTE, structDef.getName(), "typeName"); 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()); 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, public static void updateVertexPreUpdate(AtlasStructDef structDef, AtlasStructType structType,
...@@ -427,24 +433,27 @@ public class AtlasStructDefStoreV2 extends AtlasAbstractDefStoreV2<AtlasStructDe ...@@ -427,24 +433,27 @@ public class AtlasStructDefStoreV2 extends AtlasAbstractDefStoreV2<AtlasStructDe
} }
} }
public static AtlasStructDef toStructDef(AtlasVertex vertex, AtlasStructDef structDef, public static AtlasStructDef toStructDef(AtlasVertex vertex, AtlasStructDef structDef, AtlasTypeDefGraphStoreV2 typeDefStore)
AtlasTypeDefGraphStoreV2 typeDefStore) throws AtlasBaseException { throws AtlasBaseException {
AtlasStructDef ret = (structDef != null) ? structDef :new AtlasStructDef(); AtlasStructDef ret = (structDef != null) ? structDef : new AtlasStructDef();
typeDefStore.vertexToTypeDef(vertex, ret); typeDefStore.vertexToTypeDef(vertex, ret);
List<AtlasAttributeDef> attributeDefs = new ArrayList<>(); List<AtlasAttributeDef> attributeDefs = new ArrayList<>();
List<String> attrNames = vertex.getProperty(AtlasGraphUtilsV2.getTypeDefPropertyKey(ret), List.class); String typePropertyKey = AtlasGraphUtilsV2.getTypeDefPropertyKey(ret);
String encodedTypePropertyKey = AtlasGraphUtilsV2.encodePropertyKey(typePropertyKey);
List<String> attrNames = vertex.getProperty(encodedTypePropertyKey, List.class);
if (CollectionUtils.isNotEmpty(attrNames)) { if (CollectionUtils.isNotEmpty(attrNames)) {
for (String attrName : attrNames) { for (String attrName : attrNames) {
String propertyKey = AtlasGraphUtilsV2.getTypeDefPropertyKey(ret, attrName); String attrPropertyKey = AtlasGraphUtilsV2.getTypeDefPropertyKey(ret, attrName);
String attribJson = vertex.getProperty(GraphHelper.encodePropertyKey(propertyKey), String.class); String encodedAttrPropertyKey = AtlasGraphUtilsV2.encodePropertyKey(attrPropertyKey);
String attrJson = vertex.getProperty(encodedAttrPropertyKey, String.class);
attributeDefs.add(toAttributeDefFromJson(structDef, AtlasType.fromJson(attribJson, Map.class), attributeDefs.add(toAttributeDefFromJson(structDef, AtlasType.fromJson(attrJson, Map.class), typeDefStore));
typeDefStore));
} }
} }
ret.setAttributeDefs(attributeDefs); ret.setAttributeDefs(attributeDefs);
return ret; return ret;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment