>From Michael Blow <mb...@apache.org>:

Michael Blow has submitted this change. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20214 )

Change subject: [NO ISSUE][HTTP][MISC] += ClusterStateManager.isPendingRemoval, 
HTTP stop bind at shutdown
......................................................................

[NO ISSUE][HTTP][MISC] += ClusterStateManager.isPendingRemoval, HTTP stop bind 
at shutdown

* [NO ISSUE][HYR][*DB][HTTP] Stop accepting web connections at shutdown
* [NO ISSUE][*DB][MISC] += ClusterStateManager.isPendingRemoval

Ext-ref: MB-68075
Change-Id: I5b136c5a7ca847e3f96073bacf84e62b660a6959
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20214
Reviewed-by: Michael Blow <mb...@apache.org>
Tested-by: Michael Blow <mb...@apache.org>
---
M 
hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/WebManager.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
M 
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/cluster/IClusterStateManager.java
M 
hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServer.java
M 
asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
6 files changed, 54 insertions(+), 3 deletions(-)

Approvals:
  Michael Blow: Looks good to me, approved; Verified




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 6928b64..4e35ade 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
@@ -300,6 +300,7 @@
     public void stop() throws Exception {
         LOGGER.info("Stopping Asterix cluster controller");
         super.stop();
+        webManager.closeChannels(); // stop accepting new requests
         appCtx.getClusterStateManager().setState(SHUTTING_DOWN);
         ((ActiveNotificationHandler) 
appCtx.getActiveNotificationHandler()).stop();
         AsterixStateProxy.unregisterRemoteObject();
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 0da4e0d..0e6a04b 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
@@ -299,6 +299,7 @@

     @Override
     public void preStop() throws Exception {
+        webManager.closeChannels();
         runtimeContext.preStop();
     }

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 a5d503b..6c0982a 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
@@ -248,6 +248,10 @@

     Map<String, Map<IOption, Object>> getActiveNcConfiguration();

+    Set<String> getNodesPendingRemoval();
+
+    boolean isPendingRemoval(String nodeId);
+
     /**
      * Sets the cluster partition in which metadata datasets stored
      *
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 444d91b..668decf 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
@@ -474,11 +474,17 @@
         return ncConfigMap;
     }

+    @Override
     public synchronized Set<String> getNodesPendingRemoval() {
         return new HashSet<>(pendingRemoval);
     }

     @Override
+    public synchronized boolean isPendingRemoval(String nodeId) {
+        return pendingRemoval.contains(nodeId);
+    }
+
+    @Override
     public synchronized void setMetadataPartitionId(ClusterPartition 
partition) {
         metadataPartition = partition;
     }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServer.java
 
b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServer.java
index 271de53..1198945 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServer.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServer.java
@@ -433,12 +433,12 @@
         return addresses.iterator().next();
     }

-    private void closeChannels() throws InterruptedException {
+    void closeChannels() throws InterruptedException {
         synchronized (lock) {
             for (Channel channel : channels) {
                 channel.closeFuture().removeListener(channelCloseListener);
-                channel.close();
-                channel.closeFuture().sync();
+                channel.close().sync();
+                LOGGER.info("channel {} closed", channel);
             }
             channels.clear();
         }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/WebManager.java
 
b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/WebManager.java
index 3b17c06..9a0aa75 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/WebManager.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/WebManager.java
@@ -113,4 +113,27 @@
     public void add(HttpServer server) {
         servers.add(server);
     }
+
+    /**
+     * Closes all channels associated with the servers in this WebManager.
+     * This prevents any additional connections from being established.
+     */
+    public void closeChannels() throws Exception {
+        List<Exception> closeExceptions = Collections.synchronizedList(new 
ArrayList<>());
+        servers.parallelStream().forEach(server -> {
+            try {
+                server.closeChannels();
+            } catch (Exception e) {
+                closeExceptions.add(e);
+            }
+        });
+        if (!closeExceptions.isEmpty()) {
+            Exception ex = null;
+            for (Exception closeException : closeExceptions) {
+                ex = ExceptionUtils.suppress(ex, closeException);
+            }
+            throw ex;
+        }
+
+    }
 }

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20214
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings

Gerrit-Project: asterixdb
Gerrit-Branch: ionic
Gerrit-Change-Id: I5b136c5a7ca847e3f96073bacf84e62b660a6959
Gerrit-Change-Number: 20214
Gerrit-PatchSet: 2
Gerrit-Owner: Michael Blow <mb...@apache.org>
Gerrit-Reviewer: Ali Alsuliman <ali.al.solai...@gmail.com>
Gerrit-Reviewer: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Michael Blow <mb...@apache.org>
Gerrit-CC: Anon. E. Moose #1000171
Gerrit-MessageType: merged

Reply via email to