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
+ }
+ }
}
}