This is an automated email from the ASF dual-hosted git repository.

sarath 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 6ad0853  ATLAS-3417 Improve Atlas Initialization Performance for fresh 
installation.
6ad0853 is described below

commit 6ad08536043d6192de3b91b7799efbc60461222f
Author: skoritala <[email protected]>
AuthorDate: Mon Oct 21 12:03:11 2019 -0700

    ATLAS-3417 Improve Atlas Initialization Performance for fresh installation.
    
        After recent changes in atlas quick search improvements, Atlas is 
taking long time to start on fresh installations.
    
        This checkin tries to improve initialization time for fresh 
installations.
    
    Signed-off-by: Sarath Subramanian <[email protected]>
---
 .../repository/graph/GraphBackedSearchIndexer.java | 27 ++++++++++++++++-
 .../repository/graph/IndexChangeListener.java      |  2 ++
 .../atlas/repository/graph/SolrIndexHelper.java    | 35 +++++++++++++++-------
 3 files changed, 53 insertions(+), 11 deletions(-)

diff --git 
a/repository/src/main/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexer.java
 
b/repository/src/main/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexer.java
index 22fae7f..2bd7b94 100755
--- 
a/repository/src/main/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexer.java
+++ 
b/repository/src/main/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexer.java
@@ -126,6 +126,7 @@ public class GraphBackedSearchIndexer implements 
SearchIndexer, ActiveStateChang
         if (!HAConfiguration.isHAEnabled(configuration)) {
             initialize(provider.get());
         }
+        notifyInitializationStart();
     }
 
     public void addIndexListener(IndexChangeListener listener) {
@@ -221,7 +222,7 @@ public class GraphBackedSearchIndexer implements 
SearchIndexer, ActiveStateChang
             //Commit indexes
             commit(management);
 
-            notifyChangeListeners(changedTypeDefs);
+            notifyInitializationCompletion(changedTypeDefs);
         } catch (RepositoryException | IndexException e) {
             LOG.error("Failed to update indexes for changed typedefs", e);
             attemptRollback(changedTypeDefs, management);
@@ -967,4 +968,28 @@ public class GraphBackedSearchIndexer implements 
SearchIndexer, ActiveStateChang
         }
     }
 
+    private void notifyInitializationStart() {
+        for (IndexChangeListener indexChangeListener : indexChangeListeners) {
+            try {
+                indexChangeListener.onInitStart();
+            } catch (Throwable t) {
+                LOG.error("Error encountered in notifying the index change 
listener {}.", indexChangeListener.getClass().getName(), t);
+                //we need to throw exception if any of the listeners throw 
execption.
+                throw new RuntimeException("Error encountered in notifying the 
index change listener " + indexChangeListener.getClass().getName(), t);
+            }
+        }
+    }
+
+    private void notifyInitializationCompletion(ChangedTypeDefs 
changedTypeDefs) {
+        for (IndexChangeListener indexChangeListener : indexChangeListeners) {
+            try {
+                indexChangeListener.onInitCompletion(changedTypeDefs);
+            } catch (Throwable t) {
+                LOG.error("Error encountered in notifying the index change 
listener {}.", indexChangeListener.getClass().getName(), t);
+                //we need to throw exception if any of the listeners throw 
execption.
+                throw new RuntimeException("Error encountered in notifying the 
index change listener " + indexChangeListener.getClass().getName(), t);
+            }
+        }
+    }
+
 }
diff --git 
a/repository/src/main/java/org/apache/atlas/repository/graph/IndexChangeListener.java
 
b/repository/src/main/java/org/apache/atlas/repository/graph/IndexChangeListener.java
index b6e6257..4aa16dd 100644
--- 
a/repository/src/main/java/org/apache/atlas/repository/graph/IndexChangeListener.java
+++ 
b/repository/src/main/java/org/apache/atlas/repository/graph/IndexChangeListener.java
@@ -21,4 +21,6 @@ import org.apache.atlas.listener.ChangedTypeDefs;
 
 public interface IndexChangeListener {
     void onChange(ChangedTypeDefs changedTypeDefs);
+    void onInitStart();
+    void onInitCompletion(ChangedTypeDefs changedTypeDefs);
 }
diff --git 
a/repository/src/main/java/org/apache/atlas/repository/graph/SolrIndexHelper.java
 
b/repository/src/main/java/org/apache/atlas/repository/graph/SolrIndexHelper.java
index 26121fe..7310861 100644
--- 
a/repository/src/main/java/org/apache/atlas/repository/graph/SolrIndexHelper.java
+++ 
b/repository/src/main/java/org/apache/atlas/repository/graph/SolrIndexHelper.java
@@ -58,6 +58,7 @@ public class SolrIndexHelper implements IndexChangeListener {
     public SolrIndexHelper(AtlasTypeRegistry typeRegistry) {
         this.typeRegistry = typeRegistry;
     }
+    public boolean initializationCompleted = false;
 
     @Override
     public void onChange(ChangedTypeDefs changedTypeDefs) {
@@ -65,18 +66,32 @@ public class SolrIndexHelper implements IndexChangeListener 
{
             changedTypeDefs == null || !changedTypeDefs.hasEntityDef()) { // 
nothing to do if there are no changes to entity-defs
             return;
         }
+        if(initializationCompleted) {
+            try {
+                AtlasGraph            graph                          = 
AtlasGraphProvider.getGraphInstance();
+                AtlasGraphIndexClient graphIndexClient               = 
graph.getGraphIndexClient();
+                Map<String, Integer>  indexFieldName2SearchWeightMap = 
geIndexFieldNamesWithSearchWeights();
+
+                graphIndexClient.applySearchWeight(Constants.VERTEX_INDEX, 
indexFieldName2SearchWeightMap);
+                graphIndexClient.applySuggestionFields(Constants.VERTEX_INDEX, 
getIndexFieldNamesForSuggestions(indexFieldName2SearchWeightMap));
+            } catch (AtlasException e) {
+                LOG.error("Error encountered in handling type system change 
notification.", e);
+                throw new RuntimeException("Error encountered in handling type 
system change notification.", e);
+            }
+        }
+    }
 
-        try {
-            AtlasGraph            graph                          = 
AtlasGraphProvider.getGraphInstance();
-            AtlasGraphIndexClient graphIndexClient               = 
graph.getGraphIndexClient();
-            Map<String, Integer>  indexFieldName2SearchWeightMap = 
geIndexFieldNamesWithSearchWeights();
+    @Override
+    public void onInitStart() {
+        LOG.info("SolrIndexHelper Initialization started.");
+        initializationCompleted = false;
+    }
 
-            graphIndexClient.applySearchWeight(Constants.VERTEX_INDEX, 
indexFieldName2SearchWeightMap);
-            graphIndexClient.applySuggestionFields(Constants.VERTEX_INDEX, 
getIndexFieldNamesForSuggestions(indexFieldName2SearchWeightMap));
-        } catch (AtlasException e) {
-            LOG.error("Error encountered in handling type system change 
notification.", e);
-            throw new RuntimeException("Error encountered in handling type 
system change notification.", e);
-        }
+    @Override
+    public void onInitCompletion(ChangedTypeDefs changedTypeDefs) {
+        LOG.info("SolrIndexHelper Initialization completed.");
+        initializationCompleted = true;
+        onChange(changedTypeDefs);
     }
 
     private List<String> getIndexFieldNamesForSuggestions(Map<String, Integer> 
indexFieldName2SearchWeightMap) {

Reply via email to