This is an automated email from the ASF dual-hosted git repository.

iluo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git


The following commit(s) were added to refs/heads/master by this push:
     new 43d74b3  Qos heart (#3170)
43d74b3 is described below

commit 43d74b35b910b202a1f1d0e340145cbd043ad983
Author: huazhongming <[email protected]>
AuthorDate: Wed Jan 16 15:27:39 2019 +0800

    Qos heart (#3170)
    
    * qos heart question fix #3165
    
    * modify
    
    * judge if it's a IdleStateEvent
    
    * add UT
    
    * modify
---
 .../java/org/apache/dubbo/common/utils/ExecutorUtil.java    | 13 +++++++++++--
 .../java/org/apache/dubbo/monitor/dubbo/DubboMonitor.java   |  3 ++-
 .../apache/dubbo/qos/server/handler/QosProcessHandler.java  | 10 ++++++++++
 .../java/org/apache/dubbo/registry/dubbo/DubboRegistry.java |  5 +----
 .../apache/dubbo/registry/multicast/MulticastRegistry.java  |  8 +++-----
 .../remoting/p2p/exchange/support/FileExchangeGroup.java    |  5 ++---
 .../org/apache/dubbo/remoting/p2p/support/FileGroup.java    |  5 ++---
 7 files changed, 31 insertions(+), 18 deletions(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ExecutorUtil.java 
b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ExecutorUtil.java
index d33af36..14408da 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ExecutorUtil.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ExecutorUtil.java
@@ -26,6 +26,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.ScheduledFuture;
 
 public class ExecutorUtil {
     private static final Logger logger = 
LoggerFactory.getLogger(ExecutorUtil.class);
@@ -45,9 +46,10 @@ public class ExecutorUtil {
 
     /**
      * Use the shutdown pattern from:
-     *  
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html
+     * 
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html
+     *
      * @param executor the Executor to shutdown
-     * @param timeout the timeout in milliseconds before termination
+     * @param timeout  the timeout in milliseconds before termination
      */
     public static void gracefulShutdown(Executor executor, int timeout) {
         if (!(executor instanceof ExecutorService) || isTerminated(executor)) {
@@ -131,4 +133,11 @@ public class ExecutorUtil {
         url = url.addParameter(Constants.THREAD_NAME_KEY, name);
         return url;
     }
+
+    public static void cancelScheduledFuture(ScheduledFuture<?> 
scheduledFuture) {
+        ScheduledFuture<?> future = scheduledFuture;
+        if (future != null && !future.isCancelled()) {
+            future.cancel(true);
+        }
+    }
 }
diff --git 
a/dubbo-monitor/dubbo-monitor-default/src/main/java/org/apache/dubbo/monitor/dubbo/DubboMonitor.java
 
b/dubbo-monitor/dubbo-monitor-default/src/main/java/org/apache/dubbo/monitor/dubbo/DubboMonitor.java
index 04df72d..f7f0d87 100644
--- 
a/dubbo-monitor/dubbo-monitor-default/src/main/java/org/apache/dubbo/monitor/dubbo/DubboMonitor.java
+++ 
b/dubbo-monitor/dubbo-monitor-default/src/main/java/org/apache/dubbo/monitor/dubbo/DubboMonitor.java
@@ -20,6 +20,7 @@ import org.apache.dubbo.common.Constants;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.common.utils.ExecutorUtil;
 import org.apache.dubbo.common.utils.NamedThreadFactory;
 import org.apache.dubbo.monitor.Monitor;
 import org.apache.dubbo.monitor.MonitorService;
@@ -209,7 +210,7 @@ public class DubboMonitor implements Monitor {
     @Override
     public void destroy() {
         try {
-            sendFuture.cancel(true);
+            ExecutorUtil.cancelScheduledFuture(sendFuture);
         } catch (Throwable t) {
             logger.error("Unexpected error occur at cancel sender timer, 
cause: " + t.getMessage(), t);
         }
diff --git 
a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/server/handler/QosProcessHandler.java
 
b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/server/handler/QosProcessHandler.java
index 8027417..9312bb7 100644
--- 
a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/server/handler/QosProcessHandler.java
+++ 
b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/server/handler/QosProcessHandler.java
@@ -26,9 +26,11 @@ import io.netty.handler.codec.http.HttpObjectAggregator;
 import io.netty.handler.codec.http.HttpServerCodec;
 import io.netty.handler.codec.string.StringDecoder;
 import io.netty.handler.codec.string.StringEncoder;
+import io.netty.handler.timeout.IdleStateEvent;
 import io.netty.handler.timeout.IdleStateHandler;
 import io.netty.util.CharsetUtil;
 import io.netty.util.concurrent.ScheduledFuture;
+import org.apache.dubbo.common.utils.ExecutorUtil;
 
 import java.util.List;
 import java.util.concurrent.TimeUnit;
@@ -93,6 +95,14 @@ public class QosProcessHandler extends ByteToMessageDecoder {
         }
     }
 
+    @Override
+    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) 
throws Exception {
+        if (evt instanceof IdleStateEvent) {
+            ExecutorUtil.cancelScheduledFuture(welcomeFuture);
+            ctx.close();
+        }
+    }
+
     // G for GET, and P for POST
     private static boolean isHttp(int magic) {
         return magic == 'G' || magic == 'P';
diff --git 
a/dubbo-registry/dubbo-registry-default/src/main/java/org/apache/dubbo/registry/dubbo/DubboRegistry.java
 
b/dubbo-registry/dubbo-registry-default/src/main/java/org/apache/dubbo/registry/dubbo/DubboRegistry.java
index 72604d6..c936d29 100644
--- 
a/dubbo-registry/dubbo-registry-default/src/main/java/org/apache/dubbo/registry/dubbo/DubboRegistry.java
+++ 
b/dubbo-registry/dubbo-registry-default/src/main/java/org/apache/dubbo/registry/dubbo/DubboRegistry.java
@@ -38,7 +38,6 @@ import java.util.concurrent.locks.ReentrantLock;
 
 /**
  * DubboRegistry
- *
  */
 public class DubboRegistry extends FailbackRegistry {
 
@@ -124,9 +123,7 @@ public class DubboRegistry extends FailbackRegistry {
         super.destroy();
         try {
             // Cancel the reconnection timer
-            if (!reconnectFuture.isCancelled()) {
-                reconnectFuture.cancel(true);
-            }
+            ExecutorUtil.cancelScheduledFuture(reconnectFuture);
         } catch (Throwable t) {
             logger.warn("Failed to cancel reconnect timer", t);
         }
diff --git 
a/dubbo-registry/dubbo-registry-multicast/src/main/java/org/apache/dubbo/registry/multicast/MulticastRegistry.java
 
b/dubbo-registry/dubbo-registry-multicast/src/main/java/org/apache/dubbo/registry/multicast/MulticastRegistry.java
index 2a6e081..5498e9e 100644
--- 
a/dubbo-registry/dubbo-registry-multicast/src/main/java/org/apache/dubbo/registry/multicast/MulticastRegistry.java
+++ 
b/dubbo-registry/dubbo-registry-multicast/src/main/java/org/apache/dubbo/registry/multicast/MulticastRegistry.java
@@ -298,9 +298,7 @@ public class MulticastRegistry extends FailbackRegistry {
     public void destroy() {
         super.destroy();
         try {
-            if (cleanFuture != null) {
-                cleanFuture.cancel(true);
-            }
+            ExecutorUtil.cancelScheduledFuture(cleanFuture);
         } catch (Throwable t) {
             logger.warn(t.getMessage(), t);
         }
@@ -342,8 +340,8 @@ public class MulticastRegistry extends FailbackRegistry {
                 if (urls != null) {
                     urls.remove(url);
                 }
-                if (urls == null || urls.isEmpty()){
-                    if (urls == null){
+                if (urls == null || urls.isEmpty()) {
+                    if (urls == null) {
                         urls = new ConcurrentHashSet<URL>();
                     }
                     URL empty = url.setProtocol(Constants.EMPTY_PROTOCOL);
diff --git 
a/dubbo-remoting/dubbo-remoting-p2p/src/main/java/org/apache/dubbo/remoting/p2p/exchange/support/FileExchangeGroup.java
 
b/dubbo-remoting/dubbo-remoting-p2p/src/main/java/org/apache/dubbo/remoting/p2p/exchange/support/FileExchangeGroup.java
index f2511a1..554b0e3 100644
--- 
a/dubbo-remoting/dubbo-remoting-p2p/src/main/java/org/apache/dubbo/remoting/p2p/exchange/support/FileExchangeGroup.java
+++ 
b/dubbo-remoting/dubbo-remoting-p2p/src/main/java/org/apache/dubbo/remoting/p2p/exchange/support/FileExchangeGroup.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.remoting.p2p.exchange.support;
 
 import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.utils.ExecutorUtil;
 import org.apache.dubbo.common.utils.IOUtils;
 import org.apache.dubbo.common.utils.NamedThreadFactory;
 import org.apache.dubbo.common.utils.NetUtils;
@@ -70,9 +71,7 @@ public class FileExchangeGroup extends AbstractExchangeGroup {
     public void close() {
         super.close();
         try {
-            if (!checkModifiedFuture.isCancelled()) {
-                checkModifiedFuture.cancel(true);
-            }
+            ExecutorUtil.cancelScheduledFuture(checkModifiedFuture);
         } catch (Throwable t) {
             logger.error(t.getMessage(), t);
         }
diff --git 
a/dubbo-remoting/dubbo-remoting-p2p/src/main/java/org/apache/dubbo/remoting/p2p/support/FileGroup.java
 
b/dubbo-remoting/dubbo-remoting-p2p/src/main/java/org/apache/dubbo/remoting/p2p/support/FileGroup.java
index 8a67e0e..68562c1 100644
--- 
a/dubbo-remoting/dubbo-remoting-p2p/src/main/java/org/apache/dubbo/remoting/p2p/support/FileGroup.java
+++ 
b/dubbo-remoting/dubbo-remoting-p2p/src/main/java/org/apache/dubbo/remoting/p2p/support/FileGroup.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.remoting.p2p.support;
 
 import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.utils.ExecutorUtil;
 import org.apache.dubbo.common.utils.IOUtils;
 import org.apache.dubbo.common.utils.NamedThreadFactory;
 import org.apache.dubbo.common.utils.NetUtils;
@@ -67,9 +68,7 @@ public class FileGroup extends AbstractGroup {
     public void close() {
         super.close();
         try {
-            if (!checkModifiedFuture.isCancelled()) {
-                checkModifiedFuture.cancel(true);
-            }
+            ExecutorUtil.cancelScheduledFuture(checkModifiedFuture);
         } catch (Throwable t) {
             logger.error(t.getMessage(), t);
         }

Reply via email to