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 20127459a59fd0a64966046df3a1b0f64363c4f7
Author: Damian Warszawski <[email protected]>
AuthorDate: Thu Jul 30 17:11:34 2020 -0700

    ATLAS-3398: introduced consitency-lock configuration to avoid multiple 
entities with same unique attribute value
    
    Signed-off-by: Madhan Neethiraj <[email protected]>
    (cherry picked from commit 80efe92630a9198ed4b4c564f6e78c8079045930)
---
 .../graphdb/janus/AtlasJanusGraphManagement.java   | 29 +++++++++++-----------
 .../java/org/apache/atlas/AtlasConfiguration.java  |  3 ++-
 .../discovery/FreeTextSearchProcessorTest.java     |  4 +--
 .../resources/solr/core-template/solrconfig.xml    |  2 +-
 4 files changed, 19 insertions(+), 19 deletions(-)

diff --git 
a/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraphManagement.java
 
b/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraphManagement.java
index d0cda71..2a2ef92 100644
--- 
a/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraphManagement.java
+++ 
b/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraphManagement.java
@@ -18,6 +18,7 @@
 package org.apache.atlas.repository.graphdb.janus;
 
 import com.google.common.base.Preconditions;
+import org.apache.atlas.AtlasConfiguration;
 import org.apache.atlas.repository.graphdb.AtlasEdgeDirection;
 import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.apache.tinkerpop.gremlin.structure.Element;
@@ -46,6 +47,7 @@ import java.util.Set;
  * Janus implementation of AtlasGraphManagement.
  */
 public class AtlasJanusGraphManagement implements AtlasGraphManagement {
+    private static final boolean lockEnabled = 
AtlasConfiguration.STORAGE_CONSISTENCY_LOCK_ENABLED.getBoolean();
     private static final Parameter[] STRING_PARAMETER_ARRAY = new 
Parameter[]{Mapping.STRING.asParameter()};
 
     private static final Logger LOG            = 
LoggerFactory.getLogger(AtlasJanusGraphManagement.class);
@@ -246,23 +248,16 @@ public class AtlasJanusGraphManagement implements 
AtlasGraphManagement {
 
     @Override
     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();
+        createCompositeIndex(propertyName, isUnique, propertyKeys, 
Vertex.class);
     }
 
     @Override
     public void createEdgeCompositeIndex(String propertyName, boolean 
isUnique, List<AtlasPropertyKey> propertyKeys) {
-        IndexBuilder indexBuilder = management.buildIndex(propertyName, 
Edge.class);
+        createCompositeIndex(propertyName, isUnique, propertyKeys, Edge.class);
+    }
+
+    private void createCompositeIndex(String propertyName, boolean isUnique, 
List<AtlasPropertyKey> propertyKeys, Class<? extends Element> elementType) {
+        IndexBuilder indexBuilder = management.buildIndex(propertyName, 
elementType);
 
         for (AtlasPropertyKey key : propertyKeys) {
             PropertyKey janusKey = 
AtlasJanusObjectFactory.createPropertyKey(key);
@@ -273,7 +268,11 @@ public class AtlasJanusGraphManagement implements 
AtlasGraphManagement {
             indexBuilder.unique();
         }
 
-        indexBuilder.buildCompositeIndex();
+        JanusGraphIndex index = indexBuilder.buildCompositeIndex();
+
+        if (lockEnabled && isUnique) {
+            management.setConsistency(index, ConsistencyModifier.LOCK);
+        }
     }
 
     @Override
@@ -309,4 +308,4 @@ public class AtlasJanusGraphManagement implements 
AtlasGraphManagement {
             LOG.info("setConsistency: {}: {}: Done!", 
elementType.getSimpleName(), count);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/intg/src/main/java/org/apache/atlas/AtlasConfiguration.java 
b/intg/src/main/java/org/apache/atlas/AtlasConfiguration.java
index 2c007ca..a942b9f 100644
--- a/intg/src/main/java/org/apache/atlas/AtlasConfiguration.java
+++ b/intg/src/main/java/org/apache/atlas/AtlasConfiguration.java
@@ -71,7 +71,8 @@ public enum AtlasConfiguration {
     MIGRATION_IMPORT_START_POSITION("atlas.migration.import.start.position", 
0),
     LINEAGE_USING_GREMLIN("atlas.lineage.query.use.gremlin", false),
 
-    HTTP_HEADER_SERVER_VALUE("atlas.http.header.server.value","Apache Atlas");
+    HTTP_HEADER_SERVER_VALUE("atlas.http.header.server.value","Apache Atlas"),
+    
STORAGE_CONSISTENCY_LOCK_ENABLED("atlas.graph.storage.consistency-lock.enabled",
 true);
 
     private static final Configuration APPLICATION_PROPERTIES;
 
diff --git 
a/repository/src/test/java/org/apache/atlas/discovery/FreeTextSearchProcessorTest.java
 
b/repository/src/test/java/org/apache/atlas/discovery/FreeTextSearchProcessorTest.java
index 464b281..2a38d87 100644
--- 
a/repository/src/test/java/org/apache/atlas/discovery/FreeTextSearchProcessorTest.java
+++ 
b/repository/src/test/java/org/apache/atlas/discovery/FreeTextSearchProcessorTest.java
@@ -57,7 +57,7 @@ public class FreeTextSearchProcessorTest extends 
BasicTestSetup {
     }
 
     @Test
-    public void searchTablesByName() throws AtlasBaseException, 
InterruptedException {
+    public void searchTablesByName() throws AtlasBaseException {
         SearchParameters params = new SearchParameters();
         params.setTypeName("hive_table");
         params.setQuery("sales");
@@ -73,7 +73,7 @@ public class FreeTextSearchProcessorTest extends 
BasicTestSetup {
     }
 
     @Test
-    public void searchByNameSortBy() throws AtlasBaseException, 
InterruptedException {
+    public void searchByNameSortBy() throws AtlasBaseException {
         SearchParameters params = new SearchParameters();
         params.setTypeName("hive_table");
         params.setQuery("sales");
diff --git a/test-tools/src/main/resources/solr/core-template/solrconfig.xml 
b/test-tools/src/main/resources/solr/core-template/solrconfig.xml
index 39cc6ab..8ebbeff 100644
--- a/test-tools/src/main/resources/solr/core-template/solrconfig.xml
+++ b/test-tools/src/main/resources/solr/core-template/solrconfig.xml
@@ -434,7 +434,7 @@
           -->
         <lst name="defaults">
             <str name="defType">edismax</str>
-            <str name="qf">3eh1_t^3 yrp_t^10 m4l_t^10 kjp_t^10 iyt_t^10 
cn9_t^1 x6t_t^3 hdx_t^3 3ksl_s^3 3qbp_s^3 3mdh_s^3 3oqt_s^3 3nyd_t^3 7uv9_t^3 
7ldx_t^3</str>
+            <str name="qf">3hmt_t 35x_t f0l_t i6d_l 7f2d_t 7gn9_t 3oqt_s jr9_t 
3rwl_t lc5_t mx1_t 7dhh_t iyt_l 3j7p_t 7klh_t 7hfp_t 7i85_t ohx_t 7bwl_l 
7cp1_l</str>
             <str name="hl.fl">*</str>
             <bool name="hl.requireFieldMatch">true</bool>
             <bool name="lowercaseOperators">true</bool>

Reply via email to