Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
atlas
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dataplatform
atlas
Commits
25f3002e
Commit
25f3002e
authored
Apr 29, 2020
by
Ashutosh Mestry
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ATLAS-3762: Improve Edge creator using Genuine iterator.
parent
204275cc
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
110 additions
and
19 deletions
+110
-19
AtlasVertex.java
...java/org/apache/atlas/repository/graphdb/AtlasVertex.java
+10
-0
AtlasJanusGraph.java
...pache/atlas/repository/graphdb/janus/AtlasJanusGraph.java
+30
-6
AtlasJanusVertex.java
...ache/atlas/repository/graphdb/janus/AtlasJanusVertex.java
+17
-0
GraphHelper.java
...n/java/org/apache/atlas/repository/graph/GraphHelper.java
+23
-2
AtlasRelationshipStoreV2.java
...s/repository/store/graph/v2/AtlasRelationshipStoreV2.java
+30
-11
No files found.
graphdb/api/src/main/java/org/apache/atlas/repository/graphdb/AtlasVertex.java
View file @
25f3002e
...
...
@@ -45,6 +45,16 @@ public interface AtlasVertex<V, E> extends AtlasElement {
*/
Iterable
<
AtlasEdge
<
V
,
E
>>
getEdges
(
AtlasEdgeDirection
direction
,
String
[]
edgeLabels
);
long
getEdgesCount
(
AtlasEdgeDirection
direction
,
String
edgeLabel
);
/**
* Does vertex have edges specified by the direction and label
* @param dir
* @param edgeLabel
* @return
*/
boolean
hasEdges
(
AtlasEdgeDirection
dir
,
String
edgeLabel
);
/**
* Gets the edges associated with this vertex going the
* specified direction.
...
...
graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraph.java
View file @
25f3002e
...
...
@@ -18,6 +18,7 @@
package
org
.
apache
.
atlas
.
repository
.
graphdb
.
janus
;
import
com.google.common.base.Function
;
import
com.google.common.collect.Iterables
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
import
org.apache.atlas.ApplicationProperties
;
...
...
@@ -25,7 +26,19 @@ 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.repository.graphdb.*
;
import
org.apache.atlas.repository.graphdb.AtlasEdge
;
import
org.apache.atlas.repository.graphdb.AtlasGraph
;
import
org.apache.atlas.repository.graphdb.AtlasGraphIndexClient
;
import
org.apache.atlas.repository.graphdb.AtlasGraphManagement
;
import
org.apache.atlas.repository.graphdb.AtlasGraphQuery
;
import
org.apache.atlas.repository.graphdb.AtlasGraphTraversal
;
import
org.apache.atlas.repository.graphdb.AtlasIndexQuery
;
import
org.apache.atlas.repository.graphdb.AtlasIndexQueryParameter
;
import
org.apache.atlas.repository.graphdb.AtlasPropertyKey
;
import
org.apache.atlas.repository.graphdb.AtlasSchemaViolationException
;
import
org.apache.atlas.repository.graphdb.AtlasVertex
;
import
org.apache.atlas.repository.graphdb.GraphIndexQueryParameters
;
import
org.apache.atlas.repository.graphdb.GremlinVersion
;
import
org.apache.atlas.repository.graphdb.janus.query.AtlasJanusGraphQuery
;
import
org.apache.atlas.repository.graphdb.utils.IteratorToIterableAdapter
;
import
org.apache.atlas.type.AtlasType
;
...
...
@@ -62,9 +75,12 @@ import javax.script.ScriptEngine;
import
javax.script.ScriptException
;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.StreamSupport
;
import
java.util.Collection
;
import
java.util.HashSet
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
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
;
...
...
@@ -403,7 +419,11 @@ public class AtlasJanusGraph implements AtlasGraph<AtlasJanusVertex, AtlasJanusE
}
public
Iterable
<
AtlasVertex
<
AtlasJanusVertex
,
AtlasJanusEdge
>>
wrapVertices
(
Iterable
<?
extends
Vertex
>
it
)
{
return
StreamSupport
.
stream
(
it
.
spliterator
(),
false
).
map
(
input
->
GraphDbObjectFactory
.
createVertex
(
AtlasJanusGraph
.
this
,
input
)).
collect
(
Collectors
.
toList
());
return
Iterables
.
transform
(
it
,
(
Function
<
Vertex
,
AtlasVertex
<
AtlasJanusVertex
,
AtlasJanusEdge
>>)
input
->
GraphDbObjectFactory
.
createVertex
(
AtlasJanusGraph
.
this
,
input
));
}
public
Iterable
<
AtlasEdge
<
AtlasJanusVertex
,
AtlasJanusEdge
>>
wrapEdges
(
Iterator
<?
extends
Edge
>
it
)
{
...
...
@@ -413,7 +433,11 @@ public class AtlasJanusGraph implements AtlasGraph<AtlasJanusVertex, AtlasJanusE
}
public
Iterable
<
AtlasEdge
<
AtlasJanusVertex
,
AtlasJanusEdge
>>
wrapEdges
(
Iterable
<?
extends
Edge
>
it
)
{
return
StreamSupport
.
stream
(
it
.
spliterator
(),
false
).
map
(
input
->
GraphDbObjectFactory
.
createEdge
(
AtlasJanusGraph
.
this
,
input
)).
collect
(
Collectors
.
toList
());
return
Iterables
.
transform
(
it
,
(
Function
<
Edge
,
AtlasEdge
<
AtlasJanusVertex
,
AtlasJanusEdge
>>)
input
->
GraphDbObjectFactory
.
createEdge
(
AtlasJanusGraph
.
this
,
input
));
}
public
void
addMultiProperties
(
Set
<
String
>
names
)
{
...
...
graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusVertex.java
View file @
25f3002e
...
...
@@ -20,12 +20,14 @@ package org.apache.atlas.repository.graphdb.janus;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.Iterator
;
import
java.util.stream.StreamSupport
;
import
org.apache.atlas.repository.graphdb.AtlasEdge
;
import
org.apache.atlas.repository.graphdb.AtlasEdgeDirection
;
import
org.apache.atlas.repository.graphdb.AtlasSchemaViolationException
;
import
org.apache.atlas.repository.graphdb.AtlasVertex
;
import
org.apache.atlas.repository.graphdb.AtlasVertexQuery
;
import
org.apache.atlas.repository.graphdb.utils.IteratorToIterableAdapter
;
import
org.apache.tinkerpop.gremlin.structure.Direction
;
import
org.apache.tinkerpop.gremlin.structure.Edge
;
import
org.apache.tinkerpop.gremlin.structure.Vertex
;
...
...
@@ -78,6 +80,21 @@ public class AtlasJanusVertex extends AtlasJanusElement<Vertex> implements Atlas
return
graph
.
wrapEdges
(
edges
);
}
@Override
public
long
getEdgesCount
(
AtlasEdgeDirection
dir
,
String
edgeLabel
)
{
Direction
direction
=
AtlasJanusObjectFactory
.
createDirection
(
dir
);
Iterator
<
Edge
>
it
=
getWrappedElement
().
edges
(
direction
,
edgeLabel
);
IteratorToIterableAdapter
<
Edge
>
iterable
=
new
IteratorToIterableAdapter
<>(
it
);
return
StreamSupport
.
stream
(
iterable
.
spliterator
(),
true
).
count
();
}
@Override
public
boolean
hasEdges
(
AtlasEdgeDirection
dir
,
String
edgeLabel
)
{
Direction
direction
=
AtlasJanusObjectFactory
.
createDirection
(
dir
);
Iterator
<
Edge
>
edges
=
getWrappedElement
().
edges
(
direction
,
edgeLabel
);
return
edges
.
hasNext
();
}
private
JanusGraphVertex
getAsJanusVertex
()
{
return
(
JanusGraphVertex
)
getWrappedElement
();
}
...
...
repository/src/main/java/org/apache/atlas/repository/graph/GraphHelper.java
View file @
25f3002e
...
...
@@ -35,7 +35,6 @@ import org.apache.atlas.repository.graphdb.AtlasVertexQuery;
import
org.apache.atlas.repository.store.graph.v2.AtlasGraphUtilsV2
;
import
org.apache.atlas.type.AtlasArrayType
;
import
org.apache.atlas.type.AtlasMapType
;
import
org.apache.atlas.util.AtlasGremlinQueryProvider
;
import
org.apache.atlas.utils.AtlasPerfMetrics
;
import
org.apache.atlas.v1.model.instance.Id
;
import
org.apache.atlas.v1.model.instance.Referenceable
;
...
...
@@ -72,7 +71,6 @@ import java.util.List;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.Set
;
import
java.util.UUID
;
import
static
org
.
apache
.
atlas
.
model
.
instance
.
AtlasEntity
.
Status
.
ACTIVE
;
import
static
org
.
apache
.
atlas
.
model
.
instance
.
AtlasEntity
.
Status
.
DELETED
;
...
...
@@ -269,6 +267,21 @@ public final class GraphHelper {
return
ret
;
}
public
static
long
getAdjacentEdgesCountByLabel
(
AtlasVertex
instanceVertex
,
AtlasEdgeDirection
direction
,
final
String
edgeLabel
)
{
AtlasPerfMetrics
.
MetricRecorder
metric
=
RequestContext
.
get
().
startMetricRecord
(
"getAdjacentEdgesCountByLabel"
);
if
(
LOG
.
isDebugEnabled
())
{
LOG
.
debug
(
"Finding edges for {} with label {}"
,
string
(
instanceVertex
),
edgeLabel
);
}
long
ret
=
0
;
if
(
instanceVertex
!=
null
&&
edgeLabel
!=
null
)
{
ret
=
instanceVertex
.
getEdgesCount
(
direction
,
edgeLabel
);
}
RequestContext
.
get
().
endMetricRecord
(
metric
);
return
ret
;
}
public
static
boolean
isPropagationEnabled
(
AtlasVertex
classificationVertex
)
{
boolean
ret
=
false
;
...
...
@@ -437,6 +450,14 @@ public final class GraphHelper {
return
getAdjacentEdgesByLabel
(
instanceVertex
,
AtlasEdgeDirection
.
OUT
,
edgeLabel
);
}
public
static
long
getOutGoingEdgesCountByLabel
(
AtlasVertex
instanceVertex
,
String
edgeLabel
)
{
return
getAdjacentEdgesCountByLabel
(
instanceVertex
,
AtlasEdgeDirection
.
OUT
,
edgeLabel
);
}
public
static
long
getInComingEdgesCountByLabel
(
AtlasVertex
instanceVertex
,
String
edgeLabel
)
{
return
getAdjacentEdgesCountByLabel
(
instanceVertex
,
AtlasEdgeDirection
.
IN
,
edgeLabel
);
}
public
AtlasEdge
getEdgeForLabel
(
AtlasVertex
vertex
,
String
edgeLabel
,
AtlasRelationshipEdgeDirection
edgeDirection
)
{
AtlasEdge
ret
;
...
...
repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasRelationshipStoreV2.java
View file @
25f3002e
...
...
@@ -19,6 +19,7 @@
package
org
.
apache
.
atlas
.
repository
.
store
.
graph
.
v2
;
import
org.apache.atlas.AtlasErrorCode
;
import
org.apache.atlas.RequestContext
;
import
org.apache.atlas.annotation.GraphTransaction
;
import
org.apache.atlas.authorize.AtlasAuthorizationUtils
;
import
org.apache.atlas.authorize.AtlasPrivilege
;
...
...
@@ -49,6 +50,7 @@ import org.apache.atlas.type.AtlasRelationshipType;
import
org.apache.atlas.type.AtlasStructType.AtlasAttribute
;
import
org.apache.atlas.type.AtlasTypeRegistry
;
import
org.apache.atlas.type.AtlasTypeUtil
;
import
org.apache.atlas.utils.AtlasPerfMetrics
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.collections.MapUtils
;
import
org.apache.commons.lang.StringUtils
;
...
...
@@ -67,24 +69,25 @@ import java.util.Map;
import
java.util.Objects
;
import
java.util.Set
;
import
java.util.UUID
;
import
java.util.function.Function
;
import
static
org
.
apache
.
atlas
.
AtlasConfiguration
.
NOTIFICATION_RELATIONSHIPS_ENABLED
;
import
static
org
.
apache
.
atlas
.
model
.
instance
.
AtlasEntity
.
Status
.
ACTIVE
;
import
static
org
.
apache
.
atlas
.
model
.
instance
.
AtlasEntity
.
Status
.
DELETED
;
import
static
org
.
apache
.
atlas
.
model
.
typedef
.
AtlasRelationshipDef
.
PropagateTags
.*;
import
static
org
.
apache
.
atlas
.
model
.
typedef
.
AtlasRelationshipDef
.
PropagateTags
.
BOTH
;
import
static
org
.
apache
.
atlas
.
model
.
typedef
.
AtlasRelationshipDef
.
PropagateTags
.
NONE
;
import
static
org
.
apache
.
atlas
.
model
.
typedef
.
AtlasRelationshipDef
.
PropagateTags
.
ONE_TO_TWO
;
import
static
org
.
apache
.
atlas
.
model
.
typedef
.
AtlasRelationshipDef
.
PropagateTags
.
TWO_TO_ONE
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
ENTITY_TYPE_PROPERTY_KEY
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
HOME_ID_KEY
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
PROVENANCE_TYPE_KEY
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
RELATIONSHIPTYPE_TAG_PROPAGATION_KEY
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
RELATIONSHIP_GUID_PROPERTY_KEY
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
VERSION_PROPERTY_KEY
;
import
static
org
.
apache
.
atlas
.
AtlasConfiguration
.
NOTIFICATION_RELATIONSHIPS_ENABLED
;
import
static
org
.
apache
.
atlas
.
repository
.
graph
.
GraphHelper
.
getBlockedClassificationIds
;
import
static
org
.
apache
.
atlas
.
repository
.
graph
.
GraphHelper
.
getClassificationEntityGuid
;
import
static
org
.
apache
.
atlas
.
repository
.
graph
.
GraphHelper
.
getClassificationName
;
import
static
org
.
apache
.
atlas
.
repository
.
graph
.
GraphHelper
.
getPropagatableClassifications
;
import
static
org
.
apache
.
atlas
.
repository
.
graph
.
GraphHelper
.
getIncomingEdgesByLabel
;
import
static
org
.
apache
.
atlas
.
repository
.
graph
.
GraphHelper
.
getPropagateTags
;
import
static
org
.
apache
.
atlas
.
repository
.
store
.
graph
.
v2
.
AtlasGraphUtilsV2
.
getState
;
import
static
org
.
apache
.
atlas
.
repository
.
store
.
graph
.
v2
.
AtlasGraphUtilsV2
.
getTypeName
;
...
...
@@ -776,23 +779,39 @@ public class AtlasRelationshipStoreV2 implements AtlasRelationshipStore {
}
public
AtlasEdge
getRelationshipEdge
(
AtlasVertex
fromVertex
,
AtlasVertex
toVertex
,
String
relationshipLabel
)
{
AtlasPerfMetrics
.
MetricRecorder
metric
=
RequestContext
.
get
().
startMetricRecord
(
"getRelationshipEdge"
);
AtlasEdge
ret
=
null
;
Iterator
<
AtlasEdge
>
edgesIterator
=
getIncomingEdgesByLabel
(
toVertex
,
relationshipLabel
);
if
(
toVertex
.
hasEdges
(
AtlasEdgeDirection
.
IN
,
relationshipLabel
)
&&
fromVertex
.
hasEdges
(
AtlasEdgeDirection
.
OUT
,
relationshipLabel
))
{
long
fromVertexOutgoingEdgeCount
=
graphHelper
.
getOutGoingEdgesCountByLabel
(
fromVertex
,
relationshipLabel
);
long
toVertexIncomingEdgeCount
=
graphHelper
.
getInComingEdgesCountByLabel
(
toVertex
,
relationshipLabel
);
if
(
toVertexIncomingEdgeCount
<
fromVertexOutgoingEdgeCount
)
{
Iterator
<
AtlasEdge
>
edgesIteratorIn
=
graphHelper
.
getIncomingEdgesByLabel
(
toVertex
,
relationshipLabel
);
ret
=
getActiveEdgeFromList
(
edgesIteratorIn
,
fromVertex
.
getId
(),
e
->
e
.
getOutVertex
().
getId
());
}
else
{
Iterator
<
AtlasEdge
>
edgesIteratorOut
=
graphHelper
.
getOutGoingEdgesByLabel
(
fromVertex
,
relationshipLabel
);
ret
=
getActiveEdgeFromList
(
edgesIteratorOut
,
toVertex
.
getId
(),
e
->
e
.
getInVertex
().
getId
());
}
}
RequestContext
.
get
().
endMetricRecord
(
metric
);
return
ret
;
}
private
AtlasEdge
getActiveEdgeFromList
(
Iterator
<
AtlasEdge
>
edgesIterator
,
Object
vertexIdToCompare
,
Function
<
AtlasEdge
,
Object
>
edgeIdFn
)
{
while
(
edgesIterator
!=
null
&&
edgesIterator
.
hasNext
())
{
AtlasEdge
edge
=
edgesIterator
.
next
();
if
(
edge
!=
null
)
{
Status
status
=
graphHelper
.
getStatus
(
edge
);
if
((
status
==
null
||
status
==
ACTIVE
)
&&
edge
.
getOutVertex
().
getId
().
equals
(
fromVertex
.
getId
()))
{
ret
=
edge
;
break
;
if
((
status
==
null
||
status
==
ACTIVE
)
&&
edgeIdFn
.
apply
(
edge
).
equals
(
vertexIdToCompare
))
{
return
edge
;
}
}
}
return
ret
;
return
null
;
}
private
Long
getRelationshipVersion
(
AtlasRelationship
relationship
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment