Repository: asterixdb
Updated Branches:
  refs/heads/master aa7f4c039 -> 4e1301b4d


[NO ISSUE][CLUS] Request NC Startup Tasks After Startup Completion

- user model changes: no
- storage format changes: no
- interface changes: yes

Details:
- Wait for NC startup completion before requesting startup
  tasks from CC to ensure the NCs web servers are up before
  declaring it active.
- Check node status before validations on adding replica.

Change-Id: I7c58d006546f3ebca91333c2a4bc8ced68fdaf39
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2830
Tested-by: Jenkins <[email protected]>
Contrib: Jenkins <[email protected]>
Integration-Tests: Jenkins <[email protected]>
Reviewed-by: Murtadha Hubail <[email protected]>
Reviewed-by: abdullah alamoudi <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/4e1301b4
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/4e1301b4
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/4e1301b4

Branch: refs/heads/master
Commit: 4e1301b4df42c3ae4f6ac1a7a020ab20c9544846
Parents: aa7f4c0
Author: Murtadha Hubail <[email protected]>
Authored: Wed Aug 1 06:47:57 2018 -0700
Committer: Murtadha Hubail <[email protected]>
Committed: Wed Aug 1 09:43:32 2018 -0700

----------------------------------------------------------------------
 .../org/apache/asterix/app/nc/ReplicaManager.java     | 14 +++++++-------
 .../asterix/hyracks/bootstrap/NCApplication.java      | 10 ++++++++--
 .../hyracks/api/application/INCApplication.java       |  2 +-
 .../apache/hyracks/control/nc/BaseNCApplication.java  |  2 +-
 .../hyracks/control/nc/NodeControllerService.java     |  2 +-
 .../examples/btree/helper/TestNCApplication.java      |  2 +-
 6 files changed, 19 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4e1301b4/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/ReplicaManager.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/ReplicaManager.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/ReplicaManager.java
index a0e3c8b..ad70cf4 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/ReplicaManager.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/ReplicaManager.java
@@ -68,6 +68,13 @@ public class ReplicaManager implements IReplicaManager {
 
     @Override
     public synchronized void addReplica(ReplicaIdentifier id) {
+        final NodeControllerService controllerService =
+                (NodeControllerService) 
appCtx.getServiceContext().getControllerService();
+        final NodeStatus nodeStatus = controllerService.getNodeStatus();
+        if (nodeStatus != NodeStatus.ACTIVE) {
+            LOGGER.warn("Ignoring request to add replica. Node is not ACTIVE 
yet. Current status: {}", nodeStatus);
+            return;
+        }
         if (!partitions.contains(id.getPartition())) {
             throw new IllegalStateException(
                     "This node is not the current master of partition(" + 
id.getPartition() + ")");
@@ -76,13 +83,6 @@ public class ReplicaManager implements IReplicaManager {
             LOGGER.info("ignoring request to add replica to ourselves");
             return;
         }
-        final NodeControllerService controllerService =
-                (NodeControllerService) 
appCtx.getServiceContext().getControllerService();
-        final NodeStatus nodeStatus = controllerService.getNodeStatus();
-        if (nodeStatus != NodeStatus.ACTIVE) {
-            LOGGER.warn("Ignoring request to add replica. Node is not ACTIVE 
yet. Current status: {}", nodeStatus);
-            return;
-        }
         replicas.computeIfAbsent(id, k -> new PartitionReplica(k, appCtx));
         replicas.get(id).sync();
     }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4e1301b4/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
index 019f54d..fbafc2e 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
@@ -83,6 +83,7 @@ public class NCApplication extends BaseNCApplication {
     private INcApplicationContext runtimeContext;
     private String nodeId;
     private boolean stopInitiated;
+    private boolean startupCompleted;
     protected WebManager webManager;
 
     @Override
@@ -211,14 +212,19 @@ public class NCApplication extends BaseNCApplication {
     }
 
     @Override
-    public void startupCompleted() throws Exception {
+    public synchronized void startupCompleted() throws Exception {
         // configure servlets after joining the cluster, so we can create 
HyracksClientConnection
         configureServers();
         webManager.start();
+        startupCompleted = true;
+        notifyAll();
     }
 
     @Override
-    public synchronized void onRegisterNode(CcId ccId) throws Exception {
+    public synchronized void tasksCompleted(CcId ccId) throws Exception {
+        while (!startupCompleted) {
+            this.wait();
+        }
         final NodeControllerService ncs = (NodeControllerService) 
ncServiceCtx.getControllerService();
         final NodeStatus currentStatus = ncs.getNodeStatus();
         final SystemState systemState = isPendingStartupTasks(currentStatus, 
ncs.getPrimaryCcId(), ccId)

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4e1301b4/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/application/INCApplication.java
----------------------------------------------------------------------
diff --git 
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/application/INCApplication.java
 
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/application/INCApplication.java
index af6cb92..919722d 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/application/INCApplication.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/application/INCApplication.java
@@ -34,5 +34,5 @@ public interface INCApplication extends IApplication {
      */
     IFileDeviceResolver getFileDeviceResolver();
 
-    void onRegisterNode(CcId ccId) throws Exception;
+    void tasksCompleted(CcId ccId) throws Exception;
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4e1301b4/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/BaseNCApplication.java
----------------------------------------------------------------------
diff --git 
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/BaseNCApplication.java
 
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/BaseNCApplication.java
index ea16032..800721c 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/BaseNCApplication.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/BaseNCApplication.java
@@ -60,7 +60,7 @@ public class BaseNCApplication implements INCApplication {
     }
 
     @Override
-    public void onRegisterNode(CcId ccId) throws Exception {
+    public void tasksCompleted(CcId ccId) throws Exception {
         // no-op
     }
 

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4e1301b4/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java
----------------------------------------------------------------------
diff --git 
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java
 
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java
index 169e5ea..a189ac5 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java
@@ -655,7 +655,7 @@ public class NodeControllerService implements 
IControllerService {
 
     public void notifyTasksCompleted(CcId ccId) throws Exception {
         partitionManager.jobsCompleted(ccId);
-        application.onRegisterNode(ccId);
+        application.tasksCompleted(ccId);
     }
 
     private static INCApplication getApplication(NCConfig config)

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/4e1301b4/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/org/apache/hyracks/examples/btree/helper/TestNCApplication.java
----------------------------------------------------------------------
diff --git 
a/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/org/apache/hyracks/examples/btree/helper/TestNCApplication.java
 
b/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/org/apache/hyracks/examples/btree/helper/TestNCApplication.java
index 15248e7..b13feda 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/org/apache/hyracks/examples/btree/helper/TestNCApplication.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/org/apache/hyracks/examples/btree/helper/TestNCApplication.java
@@ -46,7 +46,7 @@ public class TestNCApplication implements INCApplication {
     }
 
     @Override
-    public void onRegisterNode(CcId ccs) throws Exception {
+    public void tasksCompleted(CcId ccs) throws Exception {
         // No-op
     }
 

Reply via email to