You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by am...@apache.org on 2020/05/18 04:39:25 UTC
[atlas] branch master updated: ATLAS-3797: Refactoring: Improve
Edge Creation.
This is an automated email from the ASF dual-hosted git repository.
amestry pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git
The following commit(s) were added to refs/heads/master by this push:
new 0571fa4 ATLAS-3797: Refactoring: Improve Edge Creation.
0571fa4 is described below
commit 0571fa42897e33a29baf4d1bd10ee04ae222dc70
Author: Ashutosh Mestry <am...@cloudera.com>
AuthorDate: Fri May 15 12:04:34 2020 -0700
ATLAS-3797: Refactoring: Improve Edge Creation.
---
.../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;
}