Skip to content

Commit b0d2574

Browse files
committed
Fixed apache#1021, enhance graceful shutdown: wait for registry notification before destroy server.
1 parent 552965e commit b0d2574

File tree

5 files changed

+36
-49
lines changed

5 files changed

+36
-49
lines changed

dubbo-common/src/main/java/com/alibaba/dubbo/common/utils/ConfigUtils.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,4 +306,26 @@ public static int getPid() {
306306
return PID;
307307
}
308308

309+
@SuppressWarnings("deprecation")
310+
public static int getServerShutdownTimeout() {
311+
int timeout = Constants.DEFAULT_SERVER_SHUTDOWN_TIMEOUT;
312+
String value = ConfigUtils.getProperty(Constants.SHUTDOWN_WAIT_KEY);
313+
if (value != null && value.length() > 0) {
314+
try {
315+
timeout = Integer.parseInt(value);
316+
} catch (Exception e) {
317+
}
318+
} else {
319+
value = ConfigUtils.getProperty(Constants.SHUTDOWN_WAIT_SECONDS_KEY);
320+
if (value != null && value.length() > 0) {
321+
try {
322+
timeout = Integer.parseInt(value) * 1000;
323+
} catch (Exception e) {
324+
}
325+
}
326+
}
327+
328+
return timeout;
329+
}
330+
309331
}

dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ProtocolConfig.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.alibaba.dubbo.common.serialize.Serialization;
2121
import com.alibaba.dubbo.common.status.StatusChecker;
2222
import com.alibaba.dubbo.common.threadpool.ThreadPool;
23+
import com.alibaba.dubbo.common.utils.ConfigUtils;
2324
import com.alibaba.dubbo.config.support.Parameter;
2425
import com.alibaba.dubbo.registry.support.AbstractRegistryFactory;
2526
import com.alibaba.dubbo.remoting.Codec;
@@ -145,6 +146,14 @@ public static void destroyAll() {
145146
return;
146147
}
147148
AbstractRegistryFactory.destroyAll();
149+
150+
// Wait for registry notification
151+
try {
152+
Thread.sleep(ConfigUtils.getServerShutdownTimeout());
153+
} catch (InterruptedException e) {
154+
logger.warn("Interrupted unexpectedly when waiting for registry notification during shutdown process!");
155+
}
156+
148157
ExtensionLoader<Protocol> loader = ExtensionLoader.getExtensionLoader(Protocol.class);
149158
for (String protocolName : loader.getLoadedExtensions()) {
150159
try {

dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/protocol/AbstractProtocol.java

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,10 @@
1616
*/
1717
package com.alibaba.dubbo.rpc.protocol;
1818

19-
import com.alibaba.dubbo.common.Constants;
2019
import com.alibaba.dubbo.common.URL;
2120
import com.alibaba.dubbo.common.logger.Logger;
2221
import com.alibaba.dubbo.common.logger.LoggerFactory;
2322
import com.alibaba.dubbo.common.utils.ConcurrentHashSet;
24-
import com.alibaba.dubbo.common.utils.ConfigUtils;
2523
import com.alibaba.dubbo.rpc.Exporter;
2624
import com.alibaba.dubbo.rpc.Invoker;
2725
import com.alibaba.dubbo.rpc.Protocol;
@@ -52,28 +50,6 @@ protected static String serviceKey(int port, String serviceName, String serviceV
5250
return ProtocolUtils.serviceKey(port, serviceName, serviceVersion, serviceGroup);
5351
}
5452

55-
@SuppressWarnings("deprecation")
56-
protected static int getServerShutdownTimeout() {
57-
int timeout = Constants.DEFAULT_SERVER_SHUTDOWN_TIMEOUT;
58-
String value = ConfigUtils.getProperty(Constants.SHUTDOWN_WAIT_KEY);
59-
if (value != null && value.length() > 0) {
60-
try {
61-
timeout = Integer.parseInt(value);
62-
} catch (Exception e) {
63-
}
64-
} else {
65-
value = ConfigUtils.getProperty(Constants.SHUTDOWN_WAIT_SECONDS_KEY);
66-
if (value != null && value.length() > 0) {
67-
try {
68-
timeout = Integer.parseInt(value) * 1000;
69-
} catch (Exception e) {
70-
}
71-
}
72-
}
73-
74-
return timeout;
75-
}
76-
7753
public void destroy() {
7854
for (Invoker<?> invoker : invokers) {
7955
if (invoker != null) {

dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboInvoker.java

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public void destroy() {
133133
}
134134
for (ExchangeClient client : clients) {
135135
try {
136-
client.close(getShutdownTimeout());
136+
client.close(ConfigUtils.getServerShutdownTimeout());
137137
} catch (Throwable t) {
138138
logger.warn(t.getMessage(), t);
139139
}
@@ -144,25 +144,4 @@ public void destroy() {
144144
}
145145
}
146146
}
147-
148-
protected static int getShutdownTimeout() {
149-
int timeout = Constants.DEFAULT_SERVER_SHUTDOWN_TIMEOUT;
150-
String value = ConfigUtils.getProperty(Constants.SHUTDOWN_WAIT_KEY);
151-
if (value != null && value.length() > 0) {
152-
try {
153-
timeout = Integer.parseInt(value);
154-
} catch (Exception e) {
155-
}
156-
} else {
157-
value = ConfigUtils.getProperty(Constants.SHUTDOWN_WAIT_SECONDS_KEY);
158-
if (value != null && value.length() > 0) {
159-
try {
160-
timeout = Integer.parseInt(value) * 1000;
161-
} catch (Exception e) {
162-
}
163-
}
164-
}
165-
166-
return timeout;
167-
}
168147
}

dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboProtocol.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.alibaba.dubbo.common.Constants;
2020
import com.alibaba.dubbo.common.URL;
2121
import com.alibaba.dubbo.common.extension.ExtensionLoader;
22+
import com.alibaba.dubbo.common.utils.ConfigUtils;
2223
import com.alibaba.dubbo.common.utils.NetUtils;
2324
import com.alibaba.dubbo.common.utils.StringUtils;
2425
import com.alibaba.dubbo.remoting.Channel;
@@ -373,7 +374,7 @@ public void destroy() {
373374
if (logger.isInfoEnabled()) {
374375
logger.info("Close dubbo server: " + server.getLocalAddress());
375376
}
376-
server.close(getServerShutdownTimeout());
377+
server.close(ConfigUtils.getServerShutdownTimeout());
377378
} catch (Throwable t) {
378379
logger.warn(t.getMessage(), t);
379380
}
@@ -387,7 +388,7 @@ public void destroy() {
387388
if (logger.isInfoEnabled()) {
388389
logger.info("Close dubbo connect: " + client.getLocalAddress() + "-->" + client.getRemoteAddress());
389390
}
390-
client.close(getServerShutdownTimeout());
391+
client.close(ConfigUtils.getServerShutdownTimeout());
391392
} catch (Throwable t) {
392393
logger.warn(t.getMessage(), t);
393394
}
@@ -401,7 +402,7 @@ public void destroy() {
401402
if (logger.isInfoEnabled()) {
402403
logger.info("Close dubbo connect: " + client.getLocalAddress() + "-->" + client.getRemoteAddress());
403404
}
404-
client.close(getServerShutdownTimeout());
405+
client.close(ConfigUtils.getServerShutdownTimeout());
405406
} catch (Throwable t) {
406407
logger.warn(t.getMessage(), t);
407408
}

0 commit comments

Comments
 (0)