You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by sa...@apache.org on 2018/06/28 22:44:03 UTC

atlas git commit: ATLAS-2769: Atlas start just after the upgrade fails with 'TableNotFoundException: atlas_janus' exception

Repository: atlas
Updated Branches:
  refs/heads/master bae327559 -> 78cfd7184


ATLAS-2769: Atlas start just after the upgrade fails with 'TableNotFoundException: atlas_janus' exception


Project: http://git-wip-us.apache.org/repos/asf/atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/78cfd718
Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/78cfd718
Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/78cfd718

Branch: refs/heads/master
Commit: 78cfd718444e81426334ef2e3fdae9b467e60cd1
Parents: bae3275
Author: Sarath Subramanian <ss...@hortonworks.com>
Authored: Thu Jun 28 14:43:11 2018 -0700
Committer: Sarath Subramanian <ss...@hortonworks.com>
Committed: Thu Jun 28 15:04:13 2018 -0700

----------------------------------------------------------------------
 .../repository/graph/AtlasGraphProvider.java    | 70 +++++++++++++++++++-
 1 file changed, 67 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/atlas/blob/78cfd718/repository/src/main/java/org/apache/atlas/repository/graph/AtlasGraphProvider.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/graph/AtlasGraphProvider.java b/repository/src/main/java/org/apache/atlas/repository/graph/AtlasGraphProvider.java
index 55934c3..211d2ac 100755
--- a/repository/src/main/java/org/apache/atlas/repository/graph/AtlasGraphProvider.java
+++ b/repository/src/main/java/org/apache/atlas/repository/graph/AtlasGraphProvider.java
@@ -19,10 +19,14 @@
 package org.apache.atlas.repository.graph;
 
 import com.google.common.annotations.VisibleForTesting;
+import org.apache.atlas.ApplicationProperties;
+import org.apache.atlas.AtlasException;
 import org.apache.atlas.repository.RepositoryException;
 import org.apache.atlas.repository.graphdb.AtlasGraph;
 import org.apache.atlas.repository.graphdb.GraphDatabase;
 import org.apache.atlas.util.AtlasRepositoryConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -33,7 +37,15 @@ import org.springframework.context.annotation.Configuration;
 @Configuration
 public class AtlasGraphProvider implements IAtlasGraphProvider {
 
-    private static volatile GraphDatabase<?,?> graphDb_;    
+    private static volatile GraphDatabase<?,?> graphDb_;
+
+    private static final Logger  LOG                              = LoggerFactory.getLogger(AtlasGraphProvider.class);
+    private static final Integer MAX_RETRY_COUNT                  = getMaxRetryCount();
+    private static final Long    RETRY_SLEEP_TIME_MS              = getRetrySleepTime();
+    private static final String  GRAPH_REPOSITORY_MAX_RETRIES     = "atlas.graph.repository.max.retries";
+    private static final String  GRAPH_REPOSITORY_RETRY_SLEEPTIME = "atlas.graph.repository.retry.sleeptime.ms";
+
+    private static org.apache.commons.configuration.Configuration APPLICATION_PROPERTIES = null;
 
     public static <V, E> AtlasGraph<V, E> getGraphInstance() {
         GraphDatabase<?,?> db = getGraphDatabase();      
@@ -67,7 +79,59 @@ public class AtlasGraphProvider implements IAtlasGraphProvider {
 
     @Override
     @Bean(destroyMethod = "")
-    public AtlasGraph get() throws RepositoryException {
-        return getGraphInstance();
+    public AtlasGraph get() throws RepositoryException{
+        try {
+            return getGraphInstance();
+        } catch (Exception ex) {
+            LOG.info("Failed to obtain graph instance, retrying " + MAX_RETRY_COUNT + " times, error: " + ex);
+
+            return retry();
+        }
+    }
+
+    private AtlasGraph retry() throws RepositoryException {
+        int retryCounter = 0;
+
+        while (retryCounter < MAX_RETRY_COUNT) {
+            try {
+                // Retry after 30 sec to get graph instance
+                Thread.sleep(RETRY_SLEEP_TIME_MS);
+
+                return getGraphInstance();
+            } catch (Exception ex) {
+                retryCounter++;
+
+                LOG.info("Failed to obtain graph instance on retry " + retryCounter + " of " + MAX_RETRY_COUNT + " error: " + ex);
+
+                if (retryCounter >= MAX_RETRY_COUNT) {
+                    LOG.info("Max retries exceeded.");
+                    break;
+                }
+            }
+        }
+
+        throw new RepositoryException("Max retries exceeded. Failed to obtain graph instance after " + MAX_RETRY_COUNT + " retries");
+    }
+
+    private static Integer getMaxRetryCount() {
+        initApplicationProperties();
+
+        return (APPLICATION_PROPERTIES == null) ? 3 : APPLICATION_PROPERTIES.getInt(GRAPH_REPOSITORY_MAX_RETRIES, 3);
+    }
+
+    private static Long getRetrySleepTime() {
+        initApplicationProperties();
+
+        return (APPLICATION_PROPERTIES == null) ? 30000 : APPLICATION_PROPERTIES.getLong(GRAPH_REPOSITORY_RETRY_SLEEPTIME, 30000);
+    }
+
+    private static void initApplicationProperties() {
+        if (APPLICATION_PROPERTIES == null) {
+            try {
+                APPLICATION_PROPERTIES = ApplicationProperties.get();
+            } catch (AtlasException ex) {
+                // ignore
+            }
+        }
     }
 }