Michael Blow has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/1678
Change subject: Wait For ClusterState ACTIVE Before Notifying ZK
......................................................................
Wait For ClusterState ACTIVE Before Notifying ZK
Defer notifying ZooKeeper that the cluster is up until it transitions to
ACTIVE
Change-Id: Ieaaeb2876edad9cfa3f23c2cbe00e058bdc1c8cc
---
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
M
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/cluster/IClusterStateManager.java
M
asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
3 files changed, 22 insertions(+), 8 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/78/1678/1
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
index cb2bf64..578c206 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
@@ -24,6 +24,7 @@
import java.util.Arrays;
import java.util.List;
+import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentMap;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -52,6 +53,7 @@
import org.apache.asterix.app.external.ExternalLibraryUtils;
import org.apache.asterix.app.replication.FaultToleranceStrategyFactory;
import org.apache.asterix.common.api.AsterixThreadFactory;
+import org.apache.asterix.common.api.IClusterManagementWork.ClusterState;
import org.apache.asterix.common.config.AsterixExtension;
import org.apache.asterix.common.config.ClusterProperties;
import org.apache.asterix.common.config.ExternalProperties;
@@ -71,6 +73,7 @@
import org.apache.asterix.metadata.cluster.ClusterManagerProvider;
import org.apache.asterix.runtime.job.resource.JobCapacityController;
import org.apache.asterix.runtime.utils.AppContextInfo;
+import org.apache.asterix.runtime.utils.ClusterStateManager;
import org.apache.asterix.translator.IStatementExecutorFactory;
import org.apache.hyracks.api.application.ICCServiceContext;
import org.apache.hyracks.api.application.IServiceContext;
@@ -194,7 +197,7 @@
jsonAPIServer.setAttribute(HYRACKS_CONNECTION_ATTR, hcc);
jsonAPIServer.setAttribute(ASTERIX_APP_CONTEXT_INFO_ATTR,
AppContextInfo.INSTANCE);
jsonAPIServer.setAttribute(ServletConstants.EXECUTOR_SERVICE_ATTR,
- ((ClusterControllerService)
ccServiceCtx.getControllerService()).getExecutor());
+ ccServiceCtx.getControllerService().getExecutor());
// AQL rest APIs.
addServlet(jsonAPIServer, Servlets.AQL_QUERY);
@@ -291,13 +294,16 @@
}
private IStatementExecutorFactory getStatementExecutorFactory() {
- return ccExtensionManager.getStatementExecutorFactory(
- ((ClusterControllerService)
ccServiceCtx.getControllerService()).getExecutor());
+ return
ccExtensionManager.getStatementExecutorFactory(ccServiceCtx.getControllerService().getExecutor());
}
@Override
public void startupCompleted() throws Exception {
- ClusterManagerProvider.getClusterManager().notifyStartupCompleted();
+ ccServiceCtx.getControllerService().getExecutor().submit((Callable)()
-> {
+ ClusterStateManager.INSTANCE.waitForState(ClusterState.ACTIVE);
+
ClusterManagerProvider.getClusterManager().notifyStartupCompleted();
+ return null;
+ });
}
@Override
diff --git
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/cluster/IClusterStateManager.java
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/cluster/IClusterStateManager.java
index bf03d54..0a0393d 100644
---
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/cluster/IClusterStateManager.java
+++
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/cluster/IClusterStateManager.java
@@ -83,4 +83,6 @@
* @return A copy of the current state of the cluster partitions.
*/
ClusterPartition[] getClusterPartitons();
+
+ void waitForState(ClusterState state) throws HyracksDataException,
InterruptedException;
}
diff --git
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
index f65979f..7f4deeb 100644
---
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
+++
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
@@ -29,6 +29,9 @@
import java.util.logging.Level;
import java.util.logging.Logger;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.asterix.common.api.IClusterManagementWork.ClusterState;
import org.apache.asterix.common.cluster.ClusterPartition;
import org.apache.asterix.common.cluster.IClusterStateManager;
@@ -40,10 +43,6 @@
import org.apache.hyracks.api.config.IOption;
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.api.exceptions.HyracksException;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.hyracks.control.common.controllers.NCConfig;
/**
@@ -170,6 +169,13 @@
}
}
+ @Override
+ public synchronized void waitForState(ClusterState waitForState) throws
HyracksDataException, InterruptedException {
+ while (state != waitForState) {
+ wait();
+ }
+ }
+
/**
* Returns the IO devices configured for a Node Controller
*
--
To view, visit https://asterix-gerrit.ics.uci.edu/1678
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ieaaeb2876edad9cfa3f23c2cbe00e058bdc1c8cc
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Michael Blow <[email protected]>