>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