From 2d935b58385369165a9c19100979403552f1d06b Mon Sep 17 00:00:00 2001 From: Sijie Guo Date: Fri, 30 Jun 2017 00:43:49 -0700 Subject: [PATCH] Issue 221: Make netty server shutdown idempotent --- .../org/apache/bookkeeper/proto/BookieNettyServer.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieNettyServer.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieNettyServer.java index 53fd334b747..22c3cffc206 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieNettyServer.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieNettyServer.java @@ -85,6 +85,7 @@ class BookieNettyServer { final EventLoopGroup jvmEventLoopGroup; final RequestProcessor requestProcessor; final AtomicBoolean isRunning = new AtomicBoolean(false); + final AtomicBoolean isClosed = new AtomicBoolean(false); final Object suspensionLock = new Object(); volatile boolean suspended = false; ChannelGroup allChannels; @@ -279,6 +280,12 @@ void start() { void shutdown() { LOG.info("Shutting down BookieNettyServer"); isRunning.set(false); + + if (!isClosed.compareAndSet(false, true)) { + // the netty server is already closed. + return; + } + allChannels.close().awaitUninterruptibly(); if (eventLoopGroup != null) {