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
37b27107
Commit
37b27107
authored
7 years ago
by
Sarath Subramanian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ATLAS-2420: Create indexes for relationship attributes
parent
d7ac76c4
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
317 additions
and
239 deletions
+317
-239
Constants.java
.../src/main/java/org/apache/atlas/repository/Constants.java
+2
-0
AtlasGraphManagement.java
...apache/atlas/repository/graphdb/AtlasGraphManagement.java
+28
-18
AtlasJanusGraphManagement.java
...s/repository/graphdb/janus/AtlasJanusGraphManagement.java
+64
-43
AbstractGraphDatabaseTest.java
...s/repository/graphdb/janus/AbstractGraphDatabaseTest.java
+3
-4
AtlasJanusDatabaseTest.java
...tlas/repository/graphdb/janus/AtlasJanusDatabaseTest.java
+1
-4
Titan0GraphManagement.java
...tlas/repository/graphdb/titan0/Titan0GraphManagement.java
+25
-16
AbstractGraphDatabaseTest.java
.../repository/graphdb/titan0/AbstractGraphDatabaseTest.java
+3
-4
Titan0DatabaseTest.java
...e/atlas/repository/graphdb/titan0/Titan0DatabaseTest.java
+1
-1
GraphBackedSearchIndexer.java
...ache/atlas/repository/graph/GraphBackedSearchIndexer.java
+188
-147
GraphHelper.java
...n/java/org/apache/atlas/repository/graph/GraphHelper.java
+1
-1
AtlasRelationshipStoreV1.java
...s/repository/store/graph/v1/AtlasRelationshipStoreV1.java
+1
-1
No files found.
common/src/main/java/org/apache/atlas/repository/Constants.java
View file @
37b27107
...
...
@@ -29,7 +29,9 @@ public final class Constants {
*/
public
static
final
String
INTERNAL_PROPERTY_KEY_PREFIX
=
"__"
;
public
static
final
String
RELATIONSHIP_PROPERTY_KEY_PREFIX
=
"_r"
;
public
static
final
String
GUID_PROPERTY_KEY
=
INTERNAL_PROPERTY_KEY_PREFIX
+
"guid"
;
public
static
final
String
RELATIONSHIP_GUID_PROPERTY_KEY
=
RELATIONSHIP_PROPERTY_KEY_PREFIX
+
GUID_PROPERTY_KEY
;
/**
* Entity type name property key.
...
...
This diff is collapsed.
Click to expand it.
graphdb/api/src/main/java/org/apache/atlas/repository/graphdb/AtlasGraphManagement.java
View file @
37b27107
...
...
@@ -35,15 +35,6 @@ public interface AtlasGraphManagement {
boolean
containsPropertyKey
(
String
key
);
/**
* Creates a full text index for the given property.
*
* @param indexName the name of the index to create
* @param propertyKey full text property to index
* @param backingIndex the name of the backing index to use
*/
void
createFullTextIndex
(
String
indexName
,
AtlasPropertyKey
propertyKey
,
String
backingIndex
);
/**
* Rolls back the changes that have been made to the management system.
*/
void
rollback
();
...
...
@@ -87,13 +78,22 @@ public interface AtlasGraphManagement {
AtlasEdgeLabel
getEdgeLabel
(
String
label
);
/**
* Creates a composite index for the graph.
* Creates a composite vertex index for the graph.
*
* @param propertyName
* @param isUnique
* @param propertyKeys
*/
void
createVertexCompositeIndex
(
String
propertyName
,
boolean
isUnique
,
List
<
AtlasPropertyKey
>
propertyKeys
);
/**
* Creates a composite edge index for the graph.
*
* @param propertyName
* @param isUnique
* @param propertyKeys
*/
void
createE
xactMatch
Index
(
String
propertyName
,
boolean
isUnique
,
List
<
AtlasPropertyKey
>
propertyKeys
);
void
createE
dgeComposite
Index
(
String
propertyName
,
boolean
isUnique
,
List
<
AtlasPropertyKey
>
propertyKeys
);
/**
* Looks up the index with the specified name in the graph. Returns null if
...
...
@@ -109,23 +109,33 @@ public interface AtlasGraphManagement {
*
* @param name the name of the index to create
* @param backingIndex the name of the backing index to use
* @param propertyKeys list of propertyKeys to be added to the index
*/
void
createVertexIndex
(
String
name
,
String
backingIndex
,
List
<
AtlasPropertyKey
>
propertyKeys
);
void
createVertex
Mixed
Index
(
String
name
,
String
backingIndex
,
List
<
AtlasPropertyKey
>
propertyKeys
);
/**
*
Adds a property key to the given index in
the graph.
*
Creates a mixed Edge index for
the graph.
*
* @param vertexIndex
* @param propertyKey
* @param index the name of the index to create
* @param backingIndex the name of the backing index to use
* @param propertyKeys list of propertyKeys to be added to the index
*/
void
addVertexIndexKey
(
String
vertexIndex
,
AtlasPropertyKey
propertyKey
);
void
createEdgeMixedIndex
(
String
index
,
String
backingIndex
,
List
<
AtlasPropertyKey
>
propertyKeys
);
/**
* Creates a
mixed Edge index for the graph
.
* Creates a
full text index for the given property
.
*
* @param index the name of the index to create
* @param backingIndex the name of the backing index to use
* @param propertyKeys list of propertyKeys to be added to the index
*/
void
create
EdgeIndex
(
String
index
,
String
backingIndex
);
void
create
FullTextMixedIndex
(
String
index
,
String
backingIndex
,
List
<
AtlasPropertyKey
>
propertyKeys
);
/**
* Adds a property key to the given index in the graph.
*
* @param vertexIndex
* @param propertyKey
*/
void
addMixedIndex
(
String
vertexIndex
,
AtlasPropertyKey
propertyKey
);
}
This diff is collapsed.
Click to expand it.
graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraphManagement.java
View file @
37b27107
...
...
@@ -25,6 +25,7 @@ import org.janusgraph.core.schema.Mapping;
import
org.janusgraph.core.schema.PropertyKeyMaker
;
import
org.janusgraph.core.schema.JanusGraphIndex
;
import
org.janusgraph.core.schema.JanusGraphManagement
;
import
org.janusgraph.core.schema.JanusGraphManagement.IndexBuilder
;
import
org.janusgraph.graphdb.internal.Token
;
import
org.apache.atlas.repository.graphdb.AtlasCardinality
;
import
org.apache.atlas.repository.graphdb.AtlasEdgeLabel
;
...
...
@@ -33,7 +34,6 @@ import org.apache.atlas.repository.graphdb.AtlasGraphManagement;
import
org.apache.atlas.repository.graphdb.AtlasPropertyKey
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.tinkerpop.gremlin.structure.Edge
;
import
org.apache.tinkerpop.gremlin.structure.Element
;
import
org.apache.tinkerpop.gremlin.structure.Vertex
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
...
...
@@ -46,50 +46,52 @@ import java.util.Set;
* Janus implementation of AtlasGraphManagement.
*/
public
class
AtlasJanusGraphManagement
implements
AtlasGraphManagement
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
AtlasJanusGraphManagement
.
class
);
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
AtlasJanusGraphManagement
.
class
);
private
static
final
char
[]
RESERVED_CHARS
=
{
'{'
,
'}'
,
'"'
,
'$'
,
Token
.
SEPARATOR_CHAR
};
private
AtlasJanusGraph
graph
;
private
AtlasJanusGraph
graph
;
private
JanusGraphManagement
management
;
private
Set
<
String
>
newMultProperties
=
new
HashSet
<>();
private
Set
<
String
>
newMultProperties
=
new
HashSet
<>();
public
AtlasJanusGraphManagement
(
AtlasJanusGraph
graph
,
JanusGraphManagement
managementSystem
)
{
this
.
management
=
managementSystem
;
this
.
graph
=
graph
;
this
.
graph
=
graph
;
}
@Override
public
void
createVertexIndex
(
String
propertyName
,
String
backingIndex
,
List
<
AtlasPropertyKey
>
propertyKeys
)
{
public
void
createVertexMixedIndex
(
String
indexName
,
String
backingIndex
,
List
<
AtlasPropertyKey
>
propertyKeys
)
{
IndexBuilder
indexBuilder
=
management
.
buildIndex
(
indexName
,
Vertex
.
class
);
JanusGraphManagement
.
IndexBuilder
indexBuilder
=
management
.
buildIndex
(
propertyName
,
Vertex
.
class
);
for
(
AtlasPropertyKey
key
:
propertyKeys
)
{
PropertyKey
janusKey
=
AtlasJanusObjectFactory
.
createPropertyKey
(
key
);
indexBuilder
.
addKey
(
janusKey
);
}
indexBuilder
.
buildMixedIndex
(
backingIndex
);
}
@Override
public
void
createEdgeIndex
(
String
index
,
String
backingIndex
)
{
buildMixedIndex
(
index
,
Edge
.
class
,
backingIndex
);
}
public
void
createEdgeMixedIndex
(
String
indexName
,
String
backingIndex
,
List
<
AtlasPropertyKey
>
propertyKeys
)
{
IndexBuilder
indexBuilder
=
management
.
buildIndex
(
indexName
,
Edge
.
class
);
private
void
buildMixedIndex
(
String
index
,
Class
<?
extends
Element
>
janusClass
,
String
backingIndex
)
{
for
(
AtlasPropertyKey
key
:
propertyKeys
)
{
PropertyKey
janusKey
=
AtlasJanusObjectFactory
.
createPropertyKey
(
key
);
indexBuilder
.
addKey
(
janusKey
);
}
management
.
buildIndex
(
index
,
janusClass
)
.
buildMixedIndex
(
backingIndex
);
indexBuilder
.
buildMixedIndex
(
backingIndex
);
}
@Override
public
void
createFullTextIndex
(
String
indexName
,
AtlasPropertyKey
propertyKey
,
String
backingIndex
)
{
public
void
createFullTextMixedIndex
(
String
indexName
,
String
backingIndex
,
List
<
AtlasPropertyKey
>
propertyKeys
)
{
IndexBuilder
indexBuilder
=
management
.
buildIndex
(
indexName
,
Vertex
.
class
);
PropertyKey
fullText
=
AtlasJanusObjectFactory
.
createPropertyKey
(
propertyKey
);
for
(
AtlasPropertyKey
key
:
propertyKeys
)
{
PropertyKey
janusKey
=
AtlasJanusObjectFactory
.
createPropertyKey
(
key
);
indexBuilder
.
addKey
(
janusKey
,
org
.
janusgraph
.
core
.
schema
.
Parameter
.
of
(
"mapping"
,
Mapping
.
TEXT
));
}
management
.
buildIndex
(
indexName
,
Vertex
.
class
)
.
addKey
(
fullText
,
org
.
janusgraph
.
core
.
schema
.
Parameter
.
of
(
"mapping"
,
Mapping
.
TEXT
))
.
buildMixedIndex
(
backingIndex
);
indexBuilder
.
buildMixedIndex
(
backingIndex
);
}
@Override
...
...
@@ -114,25 +116,28 @@ public class AtlasJanusGraphManagement implements AtlasGraphManagement {
//for some reason, name checking was removed from StandardPropertyKeyMaker.make()
//in Janus. For consistency, do the check here.
Preconditions
.
checkArgument
(
StringUtils
.
isNotBlank
(
name
),
"Need to specify name"
);
for
(
char
c
:
RESERVED_CHARS
)
{
Preconditions
.
checkArgument
(
name
.
indexOf
(
c
)
<
0
,
"Name can not contains reserved character %s: %s"
,
c
,
name
);
Preconditions
.
checkArgument
(
name
.
indexOf
(
c
)
<
0
,
"Name can not contains reserved character %s: %s"
,
c
,
name
);
}
}
@Override
public
AtlasPropertyKey
makePropertyKey
(
String
propertyName
,
Class
propertyClass
,
AtlasCardinality
cardinality
)
{
if
(
cardinality
.
isMany
())
{
newMultProperties
.
add
(
propertyName
);
}
PropertyKeyMaker
propertyKeyBuilder
=
management
.
makePropertyKey
(
propertyName
).
dataType
(
propertyClass
);
if
(
cardinality
!=
null
)
{
Cardinality
janusCardinality
=
AtlasJanusObjectFactory
.
createCardinality
(
cardinality
);
propertyKeyBuilder
.
cardinality
(
janusCardinality
);
}
PropertyKey
propertyKey
=
propertyKeyBuilder
.
make
();
return
GraphDbObjectFactory
.
createPropertyKey
(
propertyKey
);
}
...
...
@@ -151,6 +156,7 @@ public class AtlasJanusGraphManagement implements AtlasGraphManagement {
for
(
int
i
=
0
;;
i
++)
{
String
deletedKeyName
=
janusPropertyKey
+
"_deleted_"
+
i
;
if
(
null
==
management
.
getPropertyKey
(
deletedKeyName
))
{
management
.
changeName
(
janusPropertyKey
,
deletedKeyName
);
break
;
...
...
@@ -161,6 +167,7 @@ public class AtlasJanusGraphManagement implements AtlasGraphManagement {
@Override
public
AtlasPropertyKey
getPropertyKey
(
String
propertyName
)
{
checkName
(
propertyName
);
return
GraphDbObjectFactory
.
createPropertyKey
(
management
.
getPropertyKey
(
propertyName
));
}
...
...
@@ -169,37 +176,50 @@ public class AtlasJanusGraphManagement implements AtlasGraphManagement {
return
GraphDbObjectFactory
.
createEdgeLabel
(
management
.
getEdgeLabel
(
label
));
}
public
void
createExactMatchVertexIndex
(
String
propertyName
,
boolean
enforceUniqueness
,
List
<
AtlasPropertyKey
>
propertyKeys
)
{
JanusGraphManagement
.
IndexBuilder
indexBuilder
=
management
.
buildIndex
(
propertyName
,
Vertex
.
class
);
for
(
AtlasPropertyKey
key
:
propertyKeys
)
{
PropertyKey
janusKey
=
AtlasJanusObjectFactory
.
createPropertyKey
(
key
);
indexBuilder
.
addKey
(
janusKey
);
}
if
(
enforceUniqueness
)
{
indexBuilder
.
unique
();
}
indexBuilder
.
buildCompositeIndex
();
}
@Override
public
void
add
VertexIndexKey
(
String
indexName
,
AtlasPropertyKey
propertyKey
)
{
PropertyKey
janusKey
=
AtlasJanusObjectFactory
.
createPropertyKey
(
propertyKey
);
public
void
add
MixedIndex
(
String
indexName
,
AtlasPropertyKey
propertyKey
)
{
PropertyKey
janusKey
=
AtlasJanusObjectFactory
.
createPropertyKey
(
propertyKey
);
JanusGraphIndex
vertexIndex
=
management
.
getGraphIndex
(
indexName
);
management
.
addIndexKey
(
vertexIndex
,
janusKey
);
}
@Override
public
AtlasGraphIndex
getGraphIndex
(
String
indexName
)
{
JanusGraphIndex
index
=
management
.
getGraphIndex
(
indexName
);
return
GraphDbObjectFactory
.
createGraphIndex
(
index
);
}
@Override
public
void
createExactMatchIndex
(
String
propertyName
,
boolean
isUnique
,
List
<
AtlasPropertyKey
>
propertyKeys
)
{
createExactMatchVertexIndex
(
propertyName
,
isUnique
,
propertyKeys
);
public
void
createVertexCompositeIndex
(
String
propertyName
,
boolean
isUnique
,
List
<
AtlasPropertyKey
>
propertyKeys
)
{
IndexBuilder
indexBuilder
=
management
.
buildIndex
(
propertyName
,
Vertex
.
class
);
for
(
AtlasPropertyKey
key
:
propertyKeys
)
{
PropertyKey
janusKey
=
AtlasJanusObjectFactory
.
createPropertyKey
(
key
);
indexBuilder
.
addKey
(
janusKey
);
}
if
(
isUnique
)
{
indexBuilder
.
unique
();
}
indexBuilder
.
buildCompositeIndex
();
}
}
@Override
public
void
createEdgeCompositeIndex
(
String
propertyName
,
boolean
isUnique
,
List
<
AtlasPropertyKey
>
propertyKeys
)
{
IndexBuilder
indexBuilder
=
management
.
buildIndex
(
propertyName
,
Edge
.
class
);
for
(
AtlasPropertyKey
key
:
propertyKeys
)
{
PropertyKey
janusKey
=
AtlasJanusObjectFactory
.
createPropertyKey
(
key
);
indexBuilder
.
addKey
(
janusKey
);
}
if
(
isUnique
)
{
indexBuilder
.
unique
();
}
indexBuilder
.
buildCompositeIndex
();
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
graphdb/janus/src/test/java/org/apache/atlas/repository/graphdb/janus/AbstractGraphDatabaseTest.java
View file @
37b27107
...
...
@@ -56,8 +56,7 @@ public abstract class AbstractGraphDatabaseTest {
AtlasGraphManagement
mgmt
=
db
.
getGraph
().
getManagementSystem
();
if
(
mgmt
.
getGraphIndex
(
BACKING_INDEX_NAME
)
==
null
)
{
mgmt
.
createVertexIndex
(
BACKING_INDEX_NAME
,
Constants
.
BACKING_INDEX
,
Collections
.<
AtlasPropertyKey
>
emptyList
());
mgmt
.
createVertexMixedIndex
(
BACKING_INDEX_NAME
,
Constants
.
BACKING_INDEX
,
Collections
.
emptyList
());
}
mgmt
.
makePropertyKey
(
"age13"
,
Integer
.
class
,
AtlasCardinality
.
SINGLE
);
...
...
@@ -100,14 +99,14 @@ public abstract class AbstractGraphDatabaseTest {
AtlasPropertyKey
key
=
management
.
makePropertyKey
(
propertyName
,
propertyClass
,
cardinality
);
try
{
if
(
propertyClass
!=
Integer
.
class
)
{
management
.
add
VertexIndexKey
(
BACKING_INDEX_NAME
,
key
);
management
.
add
MixedIndex
(
BACKING_INDEX_NAME
,
key
);
}
}
catch
(
Throwable
t
)
{
//ok
t
.
printStackTrace
();
}
try
{
management
.
create
ExactMatch
Index
(
propertyName
,
isUnique
,
Collections
.
singletonList
(
key
));
management
.
create
VertexComposite
Index
(
propertyName
,
isUnique
,
Collections
.
singletonList
(
key
));
}
catch
(
Throwable
t
)
{
//ok
...
...
This diff is collapsed.
Click to expand it.
graphdb/janus/src/test/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusDatabaseTest.java
View file @
37b27107
...
...
@@ -30,10 +30,8 @@ import org.apache.atlas.repository.graphdb.AtlasGraphQuery;
import
org.apache.atlas.repository.graphdb.AtlasGraphQuery.ComparisionOperator
;
import
org.apache.atlas.repository.graphdb.AtlasPropertyKey
;
import
org.apache.atlas.repository.graphdb.AtlasVertex
;
import
org.apache.atlas.runner.LocalSolrRunner
;
import
org.apache.atlas.typesystem.types.DataTypes.TypeCategory
;
import
org.testng.annotations.AfterClass
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
java.math.BigDecimal
;
...
...
@@ -43,7 +41,6 @@ import java.util.Collection;
import
java.util.Collections
;
import
java.util.List
;
import
static
org
.
apache
.
atlas
.
graph
.
GraphSandboxUtil
.
useLocalSolr
;
import
static
org
.
testng
.
Assert
.*;
/**
...
...
@@ -67,7 +64,7 @@ public class AtlasJanusDatabaseTest {
AtlasPropertyKey
propertyKey
=
mgmt
.
getPropertyKey
(
propertyName
);
if
(
propertyKey
==
null
)
{
propertyKey
=
mgmt
.
makePropertyKey
(
propertyName
,
String
.
class
,
AtlasCardinality
.
SET
);
mgmt
.
create
ExactMatch
Index
(
propertyName
,
false
,
Collections
.
singletonList
(
propertyKey
));
mgmt
.
create
VertexComposite
Index
(
propertyName
,
false
,
Collections
.
singletonList
(
propertyKey
));
}
}
mgmt
.
commit
();
...
...
This diff is collapsed.
Click to expand it.
graphdb/titan0/src/main/java/org/apache/atlas/repository/graphdb/titan0/Titan0GraphManagement.java
View file @
37b27107
...
...
@@ -58,23 +58,16 @@ public class Titan0GraphManagement implements AtlasGraphManagement {
}
@Override
public
void
createEdgeIndex
(
String
index
,
String
backingIndex
)
{
buildMixedIndex
(
index
,
Edge
.
class
,
backingIndex
);
}
private
void
buildMixedIndex
(
String
index
,
Class
<?
extends
Element
>
titanClass
,
String
backingIndex
)
{
management
.
buildIndex
(
index
,
titanClass
).
buildMixedIndex
(
backingIndex
);
public
void
createEdgeMixedIndex
(
String
index
,
String
backingIndex
,
List
<
AtlasPropertyKey
>
propertyKeys
)
{
}
@Override
public
void
createFullTextIndex
(
String
indexName
,
AtlasPropertyKey
propertyKey
,
String
backingIndex
)
{
public
void
createFullTextMixedIndex
(
String
index
,
String
backingIndex
,
List
<
AtlasPropertyKey
>
propertyKeys
)
{
}
PropertyKey
fullText
=
TitanObjectFactory
.
createPropertyKey
(
propertyKey
);
private
void
buildMixedIndex
(
String
index
,
Class
<?
extends
Element
>
titanClass
,
String
backingIndex
)
{
management
.
buildIndex
(
indexName
,
Vertex
.
class
)
.
addKey
(
fullText
,
com
.
thinkaurelius
.
titan
.
core
.
schema
.
Parameter
.
of
(
"mapping"
,
Mapping
.
TEXT
))
.
buildMixedIndex
(
backingIndex
);
management
.
buildIndex
(
index
,
titanClass
).
buildMixedIndex
(
backingIndex
);
}
@Override
...
...
@@ -146,8 +139,8 @@ public class Titan0GraphManagement implements AtlasGraphManagement {
}
@Override
public
void
create
ExactMatch
Index
(
String
propertyName
,
boolean
enforceUniqueness
,
List
<
AtlasPropertyKey
>
propertyKeys
)
{
public
void
create
VertexComposite
Index
(
String
propertyName
,
boolean
enforceUniqueness
,
List
<
AtlasPropertyKey
>
propertyKeys
)
{
TitanManagement
.
IndexBuilder
indexBuilder
=
management
.
buildIndex
(
propertyName
,
Vertex
.
class
);
for
(
AtlasPropertyKey
key
:
propertyKeys
)
{
...
...
@@ -161,7 +154,23 @@ public class Titan0GraphManagement implements AtlasGraphManagement {
}
@Override
public
void
createVertexIndex
(
String
propertyName
,
String
backingIndex
,
List
<
AtlasPropertyKey
>
propertyKeys
)
{
public
void
createEdgeCompositeIndex
(
String
propertyName
,
boolean
isUnique
,
List
<
AtlasPropertyKey
>
propertyKeys
)
{
TitanManagement
.
IndexBuilder
indexBuilder
=
management
.
buildIndex
(
propertyName
,
Edge
.
class
);
for
(
AtlasPropertyKey
key
:
propertyKeys
)
{
PropertyKey
titanKey
=
TitanObjectFactory
.
createPropertyKey
(
key
);
indexBuilder
.
addKey
(
titanKey
);
}
if
(
isUnique
)
{
indexBuilder
.
unique
();
}
indexBuilder
.
buildCompositeIndex
();
}
@Override
public
void
createVertexMixedIndex
(
String
propertyName
,
String
backingIndex
,
List
<
AtlasPropertyKey
>
propertyKeys
)
{
TitanManagement
.
IndexBuilder
indexBuilder
=
management
.
buildIndex
(
propertyName
,
Vertex
.
class
);
for
(
AtlasPropertyKey
key
:
propertyKeys
)
{
...
...
@@ -173,7 +182,7 @@ public class Titan0GraphManagement implements AtlasGraphManagement {
@Override
public
void
add
VertexIndexKey
(
String
indexName
,
AtlasPropertyKey
propertyKey
)
{
public
void
add
MixedIndex
(
String
indexName
,
AtlasPropertyKey
propertyKey
)
{
PropertyKey
titanKey
=
TitanObjectFactory
.
createPropertyKey
(
propertyKey
);
TitanGraphIndex
vertexIndex
=
management
.
getGraphIndex
(
indexName
);
management
.
addIndexKey
(
vertexIndex
,
titanKey
);
...
...
This diff is collapsed.
Click to expand it.
graphdb/titan0/src/test/java/org/apache/atlas/repository/graphdb/titan0/AbstractGraphDatabaseTest.java
View file @
37b27107
...
...
@@ -55,8 +55,7 @@ public abstract class AbstractGraphDatabaseTest {
AtlasGraphManagement
mgmt
=
db
.
getGraph
().
getManagementSystem
();
if
(
mgmt
.
getGraphIndex
(
BACKING_INDEX_NAME
)
==
null
)
{
mgmt
.
createVertexIndex
(
BACKING_INDEX_NAME
,
Constants
.
BACKING_INDEX
,
Collections
.<
AtlasPropertyKey
>
emptyList
());
mgmt
.
createVertexMixedIndex
(
BACKING_INDEX_NAME
,
Constants
.
BACKING_INDEX
,
Collections
.
emptyList
());
}
mgmt
.
makePropertyKey
(
"age13"
,
Integer
.
class
,
AtlasCardinality
.
SINGLE
);
...
...
@@ -100,14 +99,14 @@ public abstract class AbstractGraphDatabaseTest {
AtlasPropertyKey
key
=
management
.
makePropertyKey
(
propertyName
,
propertyClass
,
cardinality
);
try
{
if
(
propertyClass
!=
Integer
.
class
)
{
management
.
add
VertexIndexKey
(
BACKING_INDEX_NAME
,
key
);
management
.
add
MixedIndex
(
BACKING_INDEX_NAME
,
key
);
}
}
catch
(
Throwable
t
)
{
//ok
t
.
printStackTrace
();
}
try
{
management
.
create
ExactMatch
Index
(
propertyName
,
isUnique
,
Collections
.
singletonList
(
key
));
management
.
create
VertexComposite
Index
(
propertyName
,
isUnique
,
Collections
.
singletonList
(
key
));
}
catch
(
Throwable
t
)
{
//ok
...
...
This diff is collapsed.
Click to expand it.
graphdb/titan0/src/test/java/org/apache/atlas/repository/graphdb/titan0/Titan0DatabaseTest.java
View file @
37b27107
...
...
@@ -65,7 +65,7 @@ public class Titan0DatabaseTest {
AtlasPropertyKey
propertyKey
=
mgmt
.
getPropertyKey
(
propertyName
);
if
(
propertyKey
==
null
)
{
propertyKey
=
mgmt
.
makePropertyKey
(
propertyName
,
String
.
class
,
AtlasCardinality
.
SET
);
mgmt
.
create
ExactMatch
Index
(
propertyName
,
false
,
Collections
.
singletonList
(
propertyKey
));
mgmt
.
create
VertexComposite
Index
(
propertyName
,
false
,
Collections
.
singletonList
(
propertyKey
));
}
}
mgmt
.
commit
();
...
...
This diff is collapsed.
Click to expand it.
repository/src/main/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexer.java
View file @
37b27107
...
...
@@ -44,6 +44,7 @@ import org.apache.atlas.repository.graphdb.AtlasPropertyKey;
import
org.apache.atlas.type.AtlasClassificationType
;
import
org.apache.atlas.type.AtlasEntityType
;
import
org.apache.atlas.type.AtlasEnumType
;
import
org.apache.atlas.type.AtlasRelationshipType
;
import
org.apache.atlas.type.AtlasStructType
;
import
org.apache.atlas.type.AtlasType
;
import
org.apache.atlas.type.AtlasTypeRegistry
;
...
...
@@ -64,6 +65,26 @@ import java.util.List;
import
java.util.Set
;
import
static
org
.
apache
.
atlas
.
model
.
typedef
.
AtlasBaseTypeDef
.*;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
BACKING_INDEX
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
CREATED_BY_KEY
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
EDGE_INDEX
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
ENTITY_TEXT_PROPERTY_KEY
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
ENTITY_TYPE_PROPERTY_KEY
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
FULLTEXT_INDEX
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
GUID_PROPERTY_KEY
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
MODIFICATION_TIMESTAMP_PROPERTY_KEY
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
MODIFIED_BY_KEY
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
RELATIONSHIP_GUID_PROPERTY_KEY
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
STATE_PROPERTY_KEY
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
SUPER_TYPES_PROPERTY_KEY
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
TIMESTAMP_PROPERTY_KEY
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
TRAIT_NAMES_PROPERTY_KEY
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
TYPENAME_PROPERTY_KEY
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
VERTEX_INDEX
;
import
static
org
.
apache
.
atlas
.
repository
.
Constants
.
VERTEX_TYPE_PROPERTY_KEY
;
import
static
org
.
apache
.
atlas
.
repository
.
graphdb
.
AtlasCardinality
.
LIST
;
import
static
org
.
apache
.
atlas
.
repository
.
graphdb
.
AtlasCardinality
.
SET
;
import
static
org
.
apache
.
atlas
.
repository
.
graphdb
.
AtlasCardinality
.
SINGLE
;
/**
...
...
@@ -73,8 +94,8 @@ import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.*;
public
class
GraphBackedSearchIndexer
implements
SearchIndexer
,
ActiveStateChangeHandler
,
TypeDefChangeListener
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
GraphBackedSearchIndexer
.
class
);
private
static
final
List
<
Class
>
VERTEX_INDEX_EXCLUSION
S
=
new
ArrayList
()
{
private
static
final
List
<
Class
>
INDEX_EXCLUSION_CLASSE
S
=
new
ArrayList
()
{
{
add
(
Boolean
.
class
);
add
(
BigDecimal
.
class
);
...
...
@@ -97,7 +118,7 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang
}
@VisibleForTesting
GraphBackedSearchIndexer
(
IAtlasGraphProvider
provider
,
Configuration
configuration
,
AtlasTypeRegistry
typeRegistry
)
GraphBackedSearchIndexer
(
IAtlasGraphProvider
provider
,
Configuration
configuration
,
AtlasTypeRegistry
typeRegistry
)
throws
IndexException
,
RepositoryException
{
this
.
provider
=
provider
;
this
.
typeRegistry
=
typeRegistry
;
...
...
@@ -178,7 +199,7 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang
management
=
provider
.
get
().
getManagementSystem
();
if
(
management
!=
null
)
{
AtlasGraphIndex
vertexIndex
=
management
.
getGraphIndex
(
Constants
.
VERTEX_INDEX
);
AtlasGraphIndex
vertexIndex
=
management
.
getGraphIndex
(
VERTEX_INDEX
);
if
(
vertexIndex
!=
null
)
{
recomputeIndexedKeys
=
false
;
...
...
@@ -214,12 +235,11 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang
* Initializes the indices for the graph - create indices for Global AtlasVertex Keys
*/
private
void
initialize
()
throws
RepositoryException
,
IndexException
{
initialize
(
provider
.
get
());
initialize
(
provider
.
get
());
}
/**
* Initializes the indices for the graph - create indices for Global AtlasVertex Keys
* Initializes the indices for the graph - create indices for Global AtlasVertex
and AtlasEdge
Keys
*/
private
void
initialize
(
AtlasGraph
graph
)
throws
RepositoryException
,
IndexException
{
AtlasGraphManagement
management
=
graph
.
getManagementSystem
();
...
...
@@ -227,64 +247,45 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang
try
{
LOG
.
info
(
"Creating indexes for graph."
);
if
(
management
.
getGraphIndex
(
Constants
.
VERTEX_INDEX
)
==
null
)
{
management
.
createVertex
Index
(
Constants
.
VERTEX_INDEX
,
Constants
.
BACKING_INDEX
,
Collections
.<
AtlasPropertyKey
>
emptyList
());
if
(
management
.
getGraphIndex
(
VERTEX_INDEX
)
==
null
)
{
management
.
createVertex
MixedIndex
(
VERTEX_INDEX
,
BACKING_INDEX
,
Collections
.
emptyList
());
LOG
.
info
(
"Created index
{}"
,
Constants
.
VERTEX_INDEX
);
LOG
.
info
(
"Created index
: {}"
,
VERTEX_INDEX
);
}
if
(
management
.
getGraphIndex
(
Constants
.
EDGE_INDEX
)
==
null
)
{
management
.
createEdge
Index
(
Constants
.
EDGE_INDEX
,
Constants
.
BACKING_INDEX
);
if
(
management
.
getGraphIndex
(
EDGE_INDEX
)
==
null
)
{
management
.
createEdge
MixedIndex
(
EDGE_INDEX
,
BACKING_INDEX
,
Collections
.
emptyList
()
);
LOG
.
info
(
"Created index
{}"
,
Constants
.
EDGE_INDEX
);
LOG
.
info
(
"Created index
: {}"
,
EDGE_INDEX
);
}
if
(
management
.
getGraphIndex
(
FULLTEXT_INDEX
)
==
null
)
{
management
.
createFullTextMixedIndex
(
FULLTEXT_INDEX
,
BACKING_INDEX
,
Collections
.
emptyList
());
// create a composite index for guid as its unique
createIndexes
(
management
,
Constants
.
GUID_PROPERTY_KEY
,
String
.
class
,
true
,
AtlasCardinality
.
SINGLE
,
true
,
true
);
// Add creation_timestamp property to Vertex Index (mixed index)
createIndexes
(
management
,
Constants
.
TIMESTAMP_PROPERTY_KEY
,
Long
.
class
,
false
,
AtlasCardinality
.
SINGLE
,
false
,
false
);
// Add modification_timestamp property to Vertex Index (mixed index)
createIndexes
(
management
,
Constants
.
MODIFICATION_TIMESTAMP_PROPERTY_KEY
,
Long
.
class
,
false
,
AtlasCardinality
.
SINGLE
,
false
,
false
);
// create a mixed index for entity state. Set systemProperty flag deliberately to false
// so that it doesnt create a composite index which has issues with
// titan 0.5.4 - Refer https://groups.google.com/forum/#!searchin/aureliusgraphs/hemanth/aureliusgraphs/bx7T843mzXU/fjAsclx7GAAJ
createIndexes
(
management
,
Constants
.
STATE_PROPERTY_KEY
,
String
.
class
,
false
,
AtlasCardinality
.
SINGLE
,
false
,
false
);
// Create a composite and mixed index for created by property
createIndexes
(
management
,
Constants
.
CREATED_BY_KEY
,
String
.
class
,
false
,
AtlasCardinality
.
SINGLE
,
true
,
true
);
// Create a composite and mixed index for modified by property
createIndexes
(
management
,
Constants
.
MODIFIED_BY_KEY
,
String
.
class
,
false
,
AtlasCardinality
.
SINGLE
,
true
,
true
);
// create a composite and mixed index for type since it can be combined with other keys
createIndexes
(
management
,
Constants
.
ENTITY_TYPE_PROPERTY_KEY
,
String
.
class
,
false
,
AtlasCardinality
.
SINGLE
,
true
,
true
);
// create a composite and mixed index for type since it can be combined with other keys
createIndexes
(
management
,
Constants
.
SUPER_TYPES_PROPERTY_KEY
,
String
.
class
,
false
,
AtlasCardinality
.
SET
,
true
,
true
);
// create a composite and mixed index for traitNames since it can be combined with other
// keys. Traits must be a set and not a list.
createIndexes
(
management
,
Constants
.
TRAIT_NAMES_PROPERTY_KEY
,
String
.
class
,
false
,
AtlasCardinality
.
SET
,
true
,
true
);
// Index for full text search
createFullTextIndex
(
management
);
LOG
.
info
(
"Created index : {}"
,
FULLTEXT_INDEX
);
}
//Indexes for graph backed type system store
createTypeStoreIndexes
(
management
);
// create vertex indexes
createVertexIndex
(
management
,
GUID_PROPERTY_KEY
,
String
.
class
,
true
,
SINGLE
,
true
,
true
);
createVertexIndex
(
management
,
TIMESTAMP_PROPERTY_KEY
,
Long
.
class
,
false
,
SINGLE
,
false
,
false
);
createVertexIndex
(
management
,
MODIFICATION_TIMESTAMP_PROPERTY_KEY
,
Long
.
class
,
false
,
SINGLE
,
false
,
false
);
createVertexIndex
(
management
,
STATE_PROPERTY_KEY
,
String
.
class
,
false
,
SINGLE
,
false
,
false
);
createVertexIndex
(
management
,
CREATED_BY_KEY
,
String
.
class
,
false
,
SINGLE
,
true
,
true
);
createVertexIndex
(
management
,
MODIFIED_BY_KEY
,
String
.
class
,
false
,
SINGLE
,
true
,
true
);
createVertexIndex
(
management
,
ENTITY_TYPE_PROPERTY_KEY
,
String
.
class
,
false
,
SINGLE
,
true
,
true
);
createVertexIndex
(
management
,
SUPER_TYPES_PROPERTY_KEY
,
String
.
class
,
false
,
SET
,
true
,
true
);
createVertexIndex
(
management
,
TRAIT_NAMES_PROPERTY_KEY
,
String
.
class
,
false
,
SET
,
true
,
true
);
createVertexIndex
(
management
,
TYPENAME_PROPERTY_KEY
,
String
.
class
,
true
,
SINGLE
,
true
,
true
);
createVertexIndex
(
management
,
VERTEX_TYPE_PROPERTY_KEY
,
String
.
class
,
false
,
SINGLE
,
true
,
true
);
// create edge indexes
createEdgeIndex
(
management
,
RELATIONSHIP_GUID_PROPERTY_KEY
,
String
.
class
,
SINGLE
,
true
);
// create fulltext indexes
createFullTextIndex
(
management
,
ENTITY_TEXT_PROPERTY_KEY
,
String
.
class
,
SINGLE
);
commit
(
management
);
LOG
.
info
(
"Index creation for global keys complete."
);
}
catch
(
Throwable
t
)
{
rollback
(
management
);
...
...
@@ -292,27 +293,6 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang
}
}
private
void
createFullTextIndex
(
AtlasGraphManagement
management
)
{
if
(!
management
.
containsPropertyKey
(
Constants
.
ENTITY_TEXT_PROPERTY_KEY
))
{
AtlasPropertyKey
fullText
=
management
.
makePropertyKey
(
Constants
.
ENTITY_TEXT_PROPERTY_KEY
,
String
.
class
,
AtlasCardinality
.
SINGLE
);
management
.
createFullTextIndex
(
Constants
.
FULLTEXT_INDEX
,
fullText
,
Constants
.
BACKING_INDEX
);
LOG
.
info
(
"Created index {}"
,
Constants
.
ENTITY_TEXT_PROPERTY_KEY
);
}
}
private
void
createTypeStoreIndexes
(
AtlasGraphManagement
management
)
{
//Create unique index on typeName
createIndexes
(
management
,
Constants
.
TYPENAME_PROPERTY_KEY
,
String
.
class
,
true
,
AtlasCardinality
.
SINGLE
,
true
,
true
);
//create index on vertex type
createIndexes
(
management
,
Constants
.
VERTEX_TYPE_PROPERTY_KEY
,
String
.
class
,
false
,
AtlasCardinality
.
SINGLE
,
true
,
true
);
}
private
void
addIndexForType
(
AtlasGraphManagement
management
,
AtlasBaseTypeDef
typeDef
)
{
if
(
typeDef
instanceof
AtlasEnumDef
)
{
// Only handle complex types like Struct, Classification and Entity
...
...
@@ -331,32 +311,39 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang
}
}
private
void
createIndexForAttribute
(
AtlasGraphManagement
management
,
String
typeName
,
AtlasAttributeDef
attributeDef
)
{
final
String
propertyName
=
GraphHelper
.
encodePropertyKey
(
typeName
+
"."
+
attributeDef
.
getName
());
AtlasCardinality
cardinality
=
toAtlasCardinality
(
attributeDef
.
getCardinality
());
boolean
isUnique
=
attributeDef
.
getIsUnique
();
boolean
isIndexable
=
attributeDef
.
getIsIndexable
();
String
attribTypeName
=
attributeDef
.
getTypeName
();
boolean
isBuiltInType
=
AtlasTypeUtil
.
isBuiltInType
(
attribTypeName
);
boolean
isArrayType
=
AtlasTypeUtil
.
isArrayType
(
attribTypeName
);
boolean
isMapType
=
AtlasTypeUtil
.
isMapType
(
attribTypeName
);
private
void
createIndexForAttribute
(
AtlasGraphManagement
management
,
String
typeName
,
AtlasAttributeDef
attributeDef
)
{
final
String
propertyName
=
GraphHelper
.
encodePropertyKey
(
typeName
+
"."
+
attributeDef
.
getName
());
AtlasCardinality
cardinality
=
toAtlasCardinality
(
attributeDef
.
getCardinality
());
boolean
isUnique
=
attributeDef
.
getIsUnique
();
boolean
isIndexable
=
attributeDef
.
getIsIndexable
();
String
attribTypeName
=
attributeDef
.
getTypeName
();
boolean
isBuiltInType
=
AtlasTypeUtil
.
isBuiltInType
(
attribTypeName
);
boolean
isArrayType
=
AtlasTypeUtil
.
isArrayType
(
attribTypeName
);
boolean
isMapType
=
AtlasTypeUtil
.
isMapType
(
attribTypeName
);
try
{
AtlasType
atlasType
=
typeRegistry
.
getType
(
attribTypeName
);
AtlasType
atlasType
=
typeRegistry
.
getType
(
typeName
);
AtlasType
attributeType
=
typeRegistry
.
getType
(
attribTypeName
);
if
(
isMapType
||
isClassificationType
(
at
las
Type
))
{
if
(
isMapType
||
isClassificationType
(
at
tribute
Type
))
{
LOG
.
warn
(
"Ignoring non-indexable attribute {}"
,
attribTypeName
);
}
if
(
isArrayType
)
{
createLabelIfNeeded
(
management
,
propertyName
,
attribTypeName
);
}
if
(
isEntityType
(
at
las
Type
))
{
}
if
(
isEntityType
(
at
tribute
Type
))
{
createEdgeLabel
(
management
,
propertyName
);
}
else
if
(
isBuiltInType
)
{
createIndexes
(
management
,
propertyName
,
getPrimitiveClass
(
attribTypeName
),
isUnique
,
cardinality
,
false
,
isIndexable
);
}
else
if
(
isEnumType
(
atlasType
))
{
createIndexes
(
management
,
propertyName
,
String
.
class
,
isUnique
,
cardinality
,
false
,
isIndexable
);
}
else
if
(
isStructType
(
atlasType
))
{
if
(
isRelationshipType
(
atlasType
))
{
createEdgeIndex
(
management
,
propertyName
,
getPrimitiveClass
(
attribTypeName
),
cardinality
,
false
);
}
else
{
createVertexIndex
(
management
,
propertyName
,
getPrimitiveClass
(
attribTypeName
),
isUnique
,
cardinality
,
false
,
isIndexable
);
}
}
else
if
(
isEnumType
(
attributeType
))
{
if
(
isRelationshipType
(
atlasType
))
{
createEdgeIndex
(
management
,
propertyName
,
String
.
class
,
cardinality
,
false
);
}
else
{
createVertexIndex
(
management
,
propertyName
,
String
.
class
,
isUnique
,
cardinality
,
false
,
isIndexable
);
}
}
else
if
(
isStructType
(
attributeType
))
{
AtlasStructDef
structDef
=
typeRegistry
.
getStructDefByName
(
attribTypeName
);
updateIndexForTypeDef
(
management
,
structDef
);
}
...
...
@@ -391,6 +378,10 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang
return
type
instanceof
AtlasStructType
;
}
private
boolean
isRelationshipType
(
AtlasType
type
)
{
return
type
instanceof
AtlasRelationshipType
;
}
private
Class
getPrimitiveClass
(
String
attribTypeName
)
{
switch
(
attribTypeName
.
toLowerCase
())
{
case
ATLAS_TYPE_BOOLEAN:
...
...
@@ -422,11 +413,11 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang
private
AtlasCardinality
toAtlasCardinality
(
AtlasAttributeDef
.
Cardinality
cardinality
)
{
switch
(
cardinality
)
{
case
SINGLE:
return
AtlasCardinality
.
SINGLE
;
return
SINGLE
;
case
LIST:
return
AtlasCardinality
.
LIST
;
return
LIST
;
case
SET:
return
AtlasCardinality
.
SET
;
return
SET
;
}
// Should never reach this point
throw
new
IllegalArgumentException
(
String
.
format
(
"Bad cardinality %s"
,
cardinality
));
...
...
@@ -448,25 +439,61 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang
}
}
private
AtlasPropertyKey
createIndexes
(
AtlasGraphManagement
management
,
String
propertyName
,
Class
propertyClass
,
boolean
isUnique
,
AtlasCardinality
cardinality
,
boolean
createCompositeForAttribute
,
boolean
createCompositeWithTypeandSuperTypes
)
{
private
AtlasPropertyKey
createVertexIndex
(
AtlasGraphManagement
management
,
String
propertyName
,
Class
propertyClass
,
boolean
isUnique
,
AtlasCardinality
cardinality
,
boolean
createCompositeIndex
,
boolean
createCompositeIndexWithTypeAndSuperTypes
)
{
AtlasPropertyKey
propertyKey
=
management
.
getPropertyKey
(
propertyName
);
if
(
propertyKey
==
null
)
{
propertyKey
=
management
.
makePropertyKey
(
propertyName
,
propertyClass
,
cardinality
);
if
(
isIndexApplicable
(
propertyClass
,
cardinality
))
{
if
(
LOG
.
isDebugEnabled
())
{
LOG
.
debug
(
"Creating backing index for vertex property {} of type {} "
,
propertyName
,
propertyClass
.
getName
());
}
management
.
addMixedIndex
(
VERTEX_INDEX
,
propertyKey
);
LOG
.
info
(
"Created backing index for vertex property {} of type {} "
,
propertyName
,
propertyClass
.
getName
());
}
}
if
(
propertyKey
!=
null
)
{
if
(
createCompositeIndex
)
{
createVertexCompositeIndex
(
management
,
propertyClass
,
propertyKey
,
isUnique
);
}
else
if
(
createCompositeIndexWithTypeAndSuperTypes
)
{
createVertexCompositeIndexWithTypeName
(
management
,
propertyClass
,
propertyKey
);
createVertexCompositeIndexWithSuperTypeName
(
management
,
propertyClass
,
propertyKey
);
}
}
else
{
LOG
.
warn
(
"Index not created for {}: propertyKey is null"
,
propertyName
);
}
return
propertyKey
;
}
private
AtlasPropertyKey
createEdgeIndex
(
AtlasGraphManagement
management
,
String
propertyName
,
Class
propertyClass
,
AtlasCardinality
cardinality
,
boolean
createCompositeIndex
)
{
AtlasPropertyKey
propertyKey
=
management
.
getPropertyKey
(
propertyName
);
if
(
propertyKey
==
null
)
{
propertyKey
=
management
.
makePropertyKey
(
propertyName
,
propertyClass
,
cardinality
);
updateVertexIndex
(
management
,
propertyName
,
propertyClass
,
cardinality
,
propertyKey
);
if
(
isIndexApplicable
(
propertyClass
,
cardinality
))
{
if
(
LOG
.
isDebugEnabled
())
{
LOG
.
debug
(
"Creating backing index for edge property {} of type {} "
,
propertyName
,
propertyClass
.
getName
());
}
management
.
addMixedIndex
(
EDGE_INDEX
,
propertyKey
);
LOG
.
info
(
"Created backing index for edge property {} of type {} "
,
propertyName
,
propertyClass
.
getName
());
}
}
if
(
propertyKey
!=
null
)
{
if
(
createCompositeForAttribute
)
{
createExactMatchIndex
(
management
,
propertyClass
,
propertyKey
,
isUnique
);
}
else
if
(
createCompositeWithTypeandSuperTypes
)
{
// Index with typename since typename+property key queries need to
// speed up
createExactMatchIndexWithTypeName
(
management
,
propertyClass
,
propertyKey
);
createExactMatchIndexWithSuperTypeName
(
management
,
propertyClass
,
propertyKey
);
if
(
createCompositeIndex
)
{
createEdgeCompositeIndex
(
management
,
propertyClass
,
propertyKey
);
}
}
else
{
LOG
.
warn
(
"Index not created for {}: propertyKey is null"
,
propertyName
);
...
...
@@ -474,10 +501,32 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang
return
propertyKey
;
}
private
AtlasPropertyKey
createFullTextIndex
(
AtlasGraphManagement
management
,
String
propertyName
,
Class
propertyClass
,
AtlasCardinality
cardinality
)
{
AtlasPropertyKey
propertyKey
=
management
.
getPropertyKey
(
propertyName
);
if
(
propertyKey
==
null
)
{
propertyKey
=
management
.
makePropertyKey
(
propertyName
,
propertyClass
,
cardinality
);
if
(
isIndexApplicable
(
propertyClass
,
cardinality
))
{
if
(
LOG
.
isDebugEnabled
())
{
LOG
.
debug
(
"Creating backing index for vertex property {} of type {} "
,
propertyName
,
propertyClass
.
getName
());
}
management
.
addMixedIndex
(
FULLTEXT_INDEX
,
propertyKey
);
LOG
.
info
(
"Created backing index for vertex property {} of type {} "
,
propertyName
,
propertyClass
.
getName
());
}
LOG
.
info
(
"Created index {}"
,
FULLTEXT_INDEX
);
}
return
propertyKey
;
}
private
void
createExactMatchIndex
(
AtlasGraphManagement
management
,
Class
propertyClass
,
AtlasPropertyKey
propertyKey
,
boolean
enforceUniqueness
)
{
private
void
createVertexCompositeIndex
(
AtlasGraphManagement
management
,
Class
propertyClass
,
AtlasPropertyKey
propertyKey
,
boolean
enforceUniqueness
)
{
String
propertyName
=
propertyKey
.
getName
();
if
(
LOG
.
isDebugEnabled
())
{
...
...
@@ -485,33 +534,42 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang
}
AtlasGraphIndex
existingIndex
=
management
.
getGraphIndex
(
propertyName
);
if
(
existingIndex
==
null
)
{
management
.
create
ExactMatch
Index
(
propertyName
,
enforceUniqueness
,
Collections
.
singletonList
(
propertyKey
));
management
.
create
VertexComposite
Index
(
propertyName
,
enforceUniqueness
,
Collections
.
singletonList
(
propertyKey
));
LOG
.
info
(
"Created composite index for property {} of type {}; isUnique={} "
,
propertyName
,
propertyClass
.
getName
(),
enforceUniqueness
);
}
}
private
void
createExactMatchIndexWithTypeName
(
AtlasGraphManagement
management
,
Class
propertyClass
,
AtlasPropertyKey
propertyKey
)
{
createExactMatchIndexWithSystemProperty
(
management
,
propertyClass
,
propertyKey
,
Constants
.
ENTITY_TYPE_PROPERTY_KEY
,
AtlasCardinality
.
SINGLE
);
private
void
createEdgeCompositeIndex
(
AtlasGraphManagement
management
,
Class
propertyClass
,
AtlasPropertyKey
propertyKey
)
{
String
propertyName
=
propertyKey
.
getName
();
if
(
LOG
.
isDebugEnabled
())
{
LOG
.
debug
(
"Creating composite index for property {} of type {}"
,
propertyName
,
propertyClass
.
getName
());
}
AtlasGraphIndex
existingIndex
=
management
.
getGraphIndex
(
propertyName
);
if
(
existingIndex
==
null
)
{
management
.
createEdgeCompositeIndex
(
propertyName
,
false
,
Collections
.
singletonList
(
propertyKey
));
LOG
.
info
(
"Created composite index for property {} of type {}"
,
propertyName
,
propertyClass
.
getName
());
}
}
private
void
createExactMatchIndexWithSuperTypeName
(
AtlasGraphManagement
management
,
Class
propertyClass
,
AtlasPropertyKey
propertyKey
)
{
createExactMatchIndexWithSystemProperty
(
management
,
propertyClass
,
propertyKey
,
Constants
.
SUPER_TYPES_PROPERTY_KEY
,
AtlasCardinality
.
SET
);
private
void
createVertexCompositeIndexWithTypeName
(
AtlasGraphManagement
management
,
Class
propertyClass
,
AtlasPropertyKey
propertyKey
)
{
createVertexCompositeIndexWithSystemProperty
(
management
,
propertyClass
,
propertyKey
,
ENTITY_TYPE_PROPERTY_KEY
,
SINGLE
);
}
private
void
create
ExactMatchIndexWithSystemProperty
(
AtlasGraphManagement
management
,
Class
propertyClass
,
AtlasPropertyKey
propertyKey
,
final
String
systemPropertyKey
,
AtlasCardinality
cardinality
)
{
private
void
create
VertexCompositeIndexWithSuperTypeName
(
AtlasGraphManagement
management
,
Class
propertyClass
,
AtlasPropertyKey
propertyKey
)
{
createVertexCompositeIndexWithSystemProperty
(
management
,
propertyClass
,
propertyKey
,
SUPER_TYPES_PROPERTY_KEY
,
SET
);
}
private
void
createVertexCompositeIndexWithSystemProperty
(
AtlasGraphManagement
management
,
Class
propertyClass
,
AtlasPropertyKey
propertyKey
,
final
String
systemPropertyKey
,
AtlasCardinality
cardinality
)
{
if
(
LOG
.
isDebugEnabled
())
{
LOG
.
debug
(
"Creating composite index for property {} of type {} and {}"
,
propertyKey
.
getName
(),
propertyClass
.
getName
(),
systemPropertyKey
);
LOG
.
debug
(
"Creating composite index for property {} of type {} and {}"
,
propertyKey
.
getName
(),
propertyClass
.
getName
(),
systemPropertyKey
);
}
AtlasPropertyKey
typePropertyKey
=
management
.
getPropertyKey
(
systemPropertyKey
);
...
...
@@ -526,33 +584,16 @@ public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChang
List
<
AtlasPropertyKey
>
keys
=
new
ArrayList
<>(
2
);
keys
.
add
(
propertyKey
);
keys
.
add
(
typePropertyKey
);
management
.
createExactMatchIndex
(
indexName
,
false
,
keys
);
LOG
.
info
(
"Created composite index for property {} of type {} and {}"
,
propertyKey
.
getName
(),
propertyClass
.
getName
(),
systemPropertyKey
);
}
}
private
void
updateVertexIndex
(
AtlasGraphManagement
management
,
String
propertyName
,
Class
propertyClass
,
AtlasCardinality
cardinality
,
AtlasPropertyKey
propertyKey
)
{
if
(
checkIfVertexIndexApplicable
(
propertyClass
,
cardinality
))
{
if
(
LOG
.
isDebugEnabled
())
{
LOG
.
debug
(
"Creating backing index for property {} of type {} "
,
propertyName
,
propertyClass
.
getName
());
}
management
.
createVertexCompositeIndex
(
indexName
,
false
,
keys
);
// Use backing index
management
.
addVertexIndexKey
(
Constants
.
VERTEX_INDEX
,
propertyKey
);
LOG
.
info
(
"Created backing index for property {} of type {} "
,
propertyName
,
propertyClass
.
getName
());
LOG
.
info
(
"Created composite index for property {} of type {} and {}"
,
propertyKey
.
getName
(),
propertyClass
.
getName
(),
systemPropertyKey
);
}
}
private
boolean
checkIfVertex
IndexApplicable
(
Class
propertyClass
,
AtlasCardinality
cardinality
)
{
return
!(
VERTEX_INDEX_EXCLUSION
S
.
contains
(
propertyClass
)
||
cardinality
.
isMany
());
private
boolean
is
IndexApplicable
(
Class
propertyClass
,
AtlasCardinality
cardinality
)
{
return
!(
INDEX_EXCLUSION_CLASSE
S
.
contains
(
propertyClass
)
||
cardinality
.
isMany
());
}
private
void
commit
(
AtlasGraphManagement
management
)
throws
IndexException
{
try
{
management
.
commit
();
...
...
This diff is collapsed.
Click to expand it.
repository/src/main/java/org/apache/atlas/repository/graph/GraphHelper.java
View file @
37b27107
...
...
@@ -591,7 +591,7 @@ public final class GraphHelper {
AtlasEdge
ret
;
try
{
ret
=
findEdge
(
Constants
.
GUID_PROPERTY_KEY
,
guid
);
ret
=
findEdge
(
Constants
.
RELATIONSHIP_
GUID_PROPERTY_KEY
,
guid
);
}
catch
(
EntityNotFoundException
e
)
{
throw
new
AtlasBaseException
(
AtlasErrorCode
.
RELATIONSHIP_GUID_NOT_FOUND
,
guid
);
}
...
...
This diff is collapsed.
Click to expand it.
repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipStoreV1.java
View file @
37b27107
...
...
@@ -423,7 +423,7 @@ public class AtlasRelationshipStoreV1 implements AtlasRelationshipStore {
final
String
guid
=
UUID
.
randomUUID
().
toString
();
AtlasGraphUtilsV1
.
setProperty
(
ret
,
Constants
.
ENTITY_TYPE_PROPERTY_KEY
,
relationship
.
getTypeName
());
AtlasGraphUtilsV1
.
setProperty
(
ret
,
Constants
.
GUID_PROPERTY_KEY
,
guid
);
AtlasGraphUtilsV1
.
setProperty
(
ret
,
Constants
.
RELATIONSHIP_
GUID_PROPERTY_KEY
,
guid
);
AtlasGraphUtilsV1
.
setProperty
(
ret
,
Constants
.
VERSION_PROPERTY_KEY
,
getRelationshipVersion
(
relationship
));
AtlasGraphUtilsV1
.
setProperty
(
ret
,
Constants
.
RELATIONSHIPTYPE_TAG_PROPAGATION_KEY
,
tagPropagation
.
name
());
}
...
...
This diff is collapsed.
Click to expand it.
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