Repository: atlas Updated Branches: refs/heads/branch-1.0 0e632a4ed -> 905cdc226
ATLAS-2838: Replace GraphHelper.encodeProperty() with AtlasGraphUtilsV2.encodeProperty() (cherry picked from commit 0ed9f0e25d2b064bb7728b2d8481968ba4375ba2) Project: http://git-wip-us.apache.org/repos/asf/atlas/repo Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/905cdc22 Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/905cdc22 Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/905cdc22 Branch: refs/heads/branch-1.0 Commit: 905cdc2264f08f5085b40b8c9b9b805484bcb36e Parents: 0e632a4 Author: Sarath Subramanian <ssubraman...@hortonworks.com> Authored: Sat Aug 25 12:06:50 2018 -0700 Committer: Sarath Subramanian <ssubraman...@hortonworks.com> Committed: Sat Aug 25 12:08:03 2018 -0700 ---------------------------------------------------------------------- .../org/apache/atlas/type/AtlasStructType.java | 11 ++++--- .../graph/GraphBackedSearchIndexer.java | 5 +-- .../atlas/repository/graph/GraphHelper.java | 31 ++++++------------ .../store/graph/v2/AtlasGraphUtilsV2.java | 8 ++--- .../store/graph/v2/AtlasStructDefStoreV2.java | 33 +++++++++++++------- 5 files changed, 43 insertions(+), 45 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/atlas/blob/905cdc22/intg/src/main/java/org/apache/atlas/type/AtlasStructType.java ---------------------------------------------------------------------- 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 @@ public class AtlasStructType extends AtlasType { // 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 = { '@', '/', ' ', '-' }; http://git-wip-us.apache.org/repos/asf/atlas/blob/905cdc22/repository/src/main/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexer.java ---------------------------------------------------------------------- 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.AtlasGraph; 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 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang } 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 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang } 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); http://git-wip-us.apache.org/repos/asf/atlas/blob/905cdc22/repository/src/main/java/org/apache/atlas/repository/graph/GraphHelper.java ---------------------------------------------------------------------- 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 final class GraphHelper { } 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 @@ public final class GraphHelper { * @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 final class GraphHelper { 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 final class GraphHelper { } 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 @@ public final class GraphHelper { * @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 @@ public final class GraphHelper { // 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 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) { if (StringUtils.isBlank(key)) { return key; @@ -1840,25 +1829,25 @@ public final class GraphHelper { 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); } http://git-wip-us.apache.org/repos/asf/atlas/blob/905cdc22/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasGraphUtilsV2.java ---------------------------------------------------------------------- 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 class AtlasGraphUtilsV2 { } 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); } /** http://git-wip-us.apache.org/repos/asf/atlas/blob/905cdc22/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasStructDefStoreV2.java ---------------------------------------------------------------------- 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 @@ public class AtlasStructDefStoreV2 extends AtlasAbstractDefStoreV2<AtlasStructDe 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 class AtlasStructDefStoreV2 extends AtlasAbstractDefStoreV2<AtlasStructDe } } - 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;