Ver código fonte

fix #1592 add maxEsStatusRetry

Shinsuke Sugaya 7 anos atrás
pai
commit
c08bbdcb06

+ 31 - 12
src/main/java/org/codelibs/fess/es/client/FessEsClient.java

@@ -186,6 +186,8 @@ public class FessEsClient implements Client {
 
     protected int maxConfigSyncStatusRetry = 10;
 
+    protected int maxEsStatusRetry = 10;
+
     public void addIndexConfig(final String path) {
         indexConfigList.add(path);
     }
@@ -589,21 +591,34 @@ public class FessEsClient implements Client {
         }
     }
 
-    private void waitForYellowStatus(final FessConfig fessConfig) {
-        try {
-            final ClusterHealthResponse response =
-                    client.admin().cluster().prepareHealth().setWaitForYellowStatus().execute()
-                            .actionGet(fessConfig.getIndexHealthTimeout());
+    protected void waitForYellowStatus(final FessConfig fessConfig) {
+        Exception cause = null;
+        for (int i = 0; i < maxEsStatusRetry; i++) {
+            try {
+                final ClusterHealthResponse response =
+                        client.admin().cluster().prepareHealth().setWaitForYellowStatus().execute()
+                                .actionGet(fessConfig.getIndexHealthTimeout());
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Elasticsearch Cluster Status: " + response.getStatus());
+                }
+                return;
+            } catch (final Exception e) {
+                cause = e;
+            }
             if (logger.isDebugEnabled()) {
-                logger.debug("Elasticsearch Cluster Status: " + response.getStatus());
+                logger.debug("Failed to access to Elasticsearch:" + i, cause);
+            }
+            try {
+                Thread.sleep(1000L);
+            } catch (InterruptedException e) {
+                // ignore
             }
-        } catch (final Exception e) {
-            final String message =
-                    "Elasticsearch (" + System.getProperty(Constants.FESS_ES_TRANSPORT_ADDRESSES)
-                            + ") is not available. Check the state of your Elasticsearch cluster ("
-                            + fessConfig.getElasticsearchClusterName() + ").";
-            throw new ContainerInitFailureException(message, e);
         }
+        final String message =
+                "Elasticsearch (" + System.getProperty(Constants.FESS_ES_TRANSPORT_ADDRESSES)
+                        + ") is not available. Check the state of your Elasticsearch cluster (" + fessConfig.getElasticsearchClusterName()
+                        + ").";
+        throw new ContainerInitFailureException(message, cause);
     }
 
     protected void waitForConfigSyncStatus() {
@@ -1455,6 +1470,10 @@ public class FessEsClient implements Client {
         this.maxConfigSyncStatusRetry = maxConfigSyncStatusRetry;
     }
 
+    public void setMaxEsStatusRetry(int maxEsStatusRetry) {
+        this.maxEsStatusRetry = maxEsStatusRetry;
+    }
+
     @Override
     public Client filterWithHeader(final Map<String, String> headers) {
         return client.filterWithHeader(headers);