This is an automated email from the ASF dual-hosted git repository. madhan pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/atlas.git
commit 3294324f240dca9cef7733d026a2288fea88f9d2 Author: Ashutosh Mestry <[email protected]> AuthorDate: Fri May 15 12:04:34 2020 -0700 ATLAS-3797: Refactoring: Improve Edge Creation. (cherry picked from commit 0571fa42897e33a29baf4d1bd10ee04ae222dc70) --- .../repository/graphdb/janus/AtlasJanusGraph.java | 24 +++++++++++++++++----- .../apache/atlas/repository/graph/GraphHelper.java | 17 ++++++++------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraph.java b/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraph.java index 35274c9..0dd573b 100644 --- a/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraph.java +++ b/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraph.java @@ -26,6 +26,7 @@ import org.apache.atlas.AtlasErrorCode; import org.apache.atlas.AtlasException; import org.apache.atlas.exception.AtlasBaseException; import org.apache.atlas.groovy.GroovyExpression; +import org.apache.atlas.model.instance.AtlasEntity; import org.apache.atlas.repository.graphdb.AtlasEdge; import org.apache.atlas.repository.graphdb.AtlasGraph; import org.apache.atlas.repository.graphdb.AtlasGraphIndexClient; @@ -85,6 +86,7 @@ import java.util.Set; import static org.apache.atlas.repository.Constants.INDEX_SEARCH_VERTEX_PREFIX_DEFAULT; import static org.apache.atlas.repository.Constants.INDEX_SEARCH_VERTEX_PREFIX_PROPERTY; import static org.apache.atlas.repository.graphdb.janus.AtlasJanusGraphDatabase.getGraphInstance; +import static org.apache.atlas.type.Constants.STATE_PROPERTY_KEY; /** * Janus implementation of AtlasGraph. @@ -174,12 +176,11 @@ public class AtlasJanusGraph implements AtlasGraph<AtlasJanusVertex, AtlasJanusE @Override public AtlasEdge getEdgeBetweenVertices(AtlasVertex fromVertex, AtlasVertex toVertex, String edgeLabel) { GraphTraversal gt = V(fromVertex.getId()).outE(edgeLabel).where(__.otherV().hasId(toVertex.getId())); - Object o = gt.hasNext() ? gt.next() : null; - if (o == null) { - return null; - } - return GraphDbObjectFactory.createEdge(this, (Edge) o); + Edge gremlinEdge = getFirstActiveEdge(gt); + return (gremlinEdge != null) + ? GraphDbObjectFactory.createEdge(this, gremlinEdge) + : null; } @Override @@ -567,9 +568,22 @@ public class AtlasJanusGraph implements AtlasGraph<AtlasJanusVertex, AtlasJanusE private final class ConvertGremlinValueFunction implements Function<Object, Object> { + @Override public Object apply(Object input) { return convertGremlinValue(input); } } + private Edge getFirstActiveEdge(GraphTraversal gt) { + while (gt.hasNext()) { + Edge gremlinEdge = (Edge) gt.next(); + if (gremlinEdge != null && gremlinEdge.property(STATE_PROPERTY_KEY).isPresent() && + gremlinEdge.property(STATE_PROPERTY_KEY).value().equals(AtlasEntity.Status.ACTIVE.toString()) + ) { + return gremlinEdge; + } + } + + return null; + } } 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 b1368e5..7b7ec65 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 @@ -150,21 +150,18 @@ public final class GraphHelper { } public AtlasEdge getOrCreateEdge(AtlasVertex outVertex, AtlasVertex inVertex, String edgeLabel) throws RepositoryException { + AtlasPerfMetrics.MetricRecorder metric = RequestContext.get().startMetricRecord("getOrCreateEdge"); + for (int numRetries = 0; numRetries < maxRetries; numRetries++) { try { if (LOG.isDebugEnabled()) { LOG.debug("Running edge creation attempt {}", numRetries); } - Iterator<AtlasEdge> edges = getAdjacentEdgesByLabel(inVertex, AtlasEdgeDirection.IN, edgeLabel); - - while (edges.hasNext()) { - AtlasEdge edge = edges.next(); - if (edge.getOutVertex().getId().equals(outVertex.getId())) { - Id.EntityState edgeState = getState(edge); - if (edgeState == null || edgeState == Id.EntityState.ACTIVE) { - return edge; - } + if (inVertex.hasEdges(AtlasEdgeDirection.IN, edgeLabel) && outVertex.hasEdges(AtlasEdgeDirection.OUT, edgeLabel)) { + AtlasEdge edge = graph.getEdgeBetweenVertices(outVertex, inVertex, edgeLabel); + if (edge != null) { + return edge; } } @@ -186,6 +183,8 @@ public final class GraphHelper { } } } + + RequestContext.get().endMetricRecord(metric); return null; }
