dubbo-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From yizhenqi...@apache.org
Subject [dubbo] branch master updated: Optimize the close and connect operations of AbstractClient (#3435)
Date Thu, 15 Oct 2020 10:13:07 GMT
This is an automated email from the ASF dual-hosted git repository.

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


The following commit(s) were added to refs/heads/master by this push:
     new 7039c98  Optimize the close and connect operations of AbstractClient (#3435)
7039c98 is described below

commit 7039c98b6cb5a0b69edc4e9e82679131da1a8643
Author: yizhenqiang <manzhizhen@163.com>
AuthorDate: Thu Oct 15 18:12:41 2020 +0800

    Optimize the close and connect operations of AbstractClient (#3435)
    
    * The AbstractClient close operation is the same as the connect and disconnect operations,
and is protected by the lock, which reduces the probability of uncertainty due to operation
conflicts; the connect operation first determines the close state of the client. If the client
is closed, the client does not need to be reconnected.
    
    * The judgment conditions of strengthening connect and close methods
    
    Co-authored-by: Xin Wang <xin.victorwang@gmail.com>
---
 .../dubbo/remoting/transport/AbstractClient.java   | 74 ++++++++++++++--------
 1 file changed, 47 insertions(+), 27 deletions(-)

diff --git a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/AbstractClient.java
b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/AbstractClient.java
index 8f6bf61..a4d59cc 100644
--- a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/AbstractClient.java
+++ b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/AbstractClient.java
@@ -66,6 +66,7 @@ public abstract class AbstractClient extends AbstractEndpoint implements
Client
                     "Failed to start " + getClass().getSimpleName() + " " + NetUtils.getLocalAddress()
                             + " connect to the server " + getRemoteAddress() + ", cause:
" + t.getMessage(), t);
         }
+
         try {
             // connect.
             connect();
@@ -179,27 +180,31 @@ public abstract class AbstractClient extends AbstractEndpoint implements
Client
     }
 
     protected void connect() throws RemotingException {
-
         connectLock.lock();
 
         try {
-
             if (isConnected()) {
                 return;
             }
 
+            if (isClosed() || isClosing()) {
+                logger.warn("No need to connect to server " + getRemoteAddress() + " from
" + getClass().getSimpleName() + " "
+                        + NetUtils.getLocalHost() + " using dubbo version " + Version.getVersion()
+ ", cause: client status is closed or closing.");
+                return;
+            }
+
             doConnect();
 
             if (!isConnected()) {
                 throw new RemotingException(this, "Failed connect to server " + getRemoteAddress()
+ " from " + getClass().getSimpleName() + " "
-                        + NetUtils.getLocalHost() + " using dubbo version " + Version.getVersion()
-                        + ", cause: Connect wait timeout: " + getConnectTimeout() + "ms.");
+                                + NetUtils.getLocalHost() + " using dubbo version " + Version.getVersion()
+                                + ", cause: Connect wait timeout: " + getConnectTimeout()
+ "ms.");
 
             } else {
                 if (logger.isInfoEnabled()) {
                     logger.info("Successed connect to server " + getRemoteAddress() + " from
" + getClass().getSimpleName() + " "
-                            + NetUtils.getLocalHost() + " using dubbo version " + Version.getVersion()
-                            + ", channel is " + this.getChannel());
+                                    + NetUtils.getLocalHost() + " using dubbo version " +
Version.getVersion()
+                                    + ", channel is " + this.getChannel());
                 }
             }
 
@@ -208,8 +213,8 @@ public abstract class AbstractClient extends AbstractEndpoint implements
Client
 
         } catch (Throwable e) {
             throw new RemotingException(this, "Failed connect to server " + getRemoteAddress()
+ " from " + getClass().getSimpleName() + " "
-                    + NetUtils.getLocalHost() + " using dubbo version " + Version.getVersion()
-                    + ", cause: " + e.getMessage(), e);
+                            + NetUtils.getLocalHost() + " using dubbo version " + Version.getVersion()
+                            + ", cause: " + e.getMessage(), e);
 
         } finally {
             connectLock.unlock();
@@ -254,31 +259,46 @@ public abstract class AbstractClient extends AbstractEndpoint implements
Client
 
     @Override
     public void close() {
-
-        try {
-            super.close();
-        } catch (Throwable e) {
-            logger.warn(e.getMessage(), e);
+        if (isClosed()) {
+            logger.warn("No need to close connection to server " + getRemoteAddress() + "
from " + getClass().getSimpleName() + " " + NetUtils.getLocalHost() + " using dubbo version
" + Version.getVersion() + ", cause: the client status is closed.");
+            return;
         }
 
+        connectLock.lock();
         try {
-            if (executor != null) {
-                ExecutorUtil.shutdownNow(executor, 100);
+            if (isClosed()) {
+                logger.warn("No need to close connection to server " + getRemoteAddress()
+ " from " + getClass().getSimpleName() + " " + NetUtils.getLocalHost() + " using dubbo version
" + Version.getVersion() + ", cause: the client status is closed.");
+                return;
             }
-        } catch (Throwable e) {
-            logger.warn(e.getMessage(), e);
-        }
 
-        try {
-            disconnect();
-        } catch (Throwable e) {
-            logger.warn(e.getMessage(), e);
-        }
+            try {
+                super.close();
+            } catch (Throwable e) {
+                logger.warn(e.getMessage(), e);
+            }
 
-        try {
-            doClose();
-        } catch (Throwable e) {
-            logger.warn(e.getMessage(), e);
+            try {
+                if (executor != null) {
+                    ExecutorUtil.shutdownNow(executor, 100);
+                }
+            } catch (Throwable e) {
+                logger.warn(e.getMessage(), e);
+            }
+
+            try {
+                disconnect();
+            } catch (Throwable e) {
+                logger.warn(e.getMessage(), e);
+            }
+
+            try {
+                doClose();
+            } catch (Throwable e) {
+                logger.warn(e.getMessage(), e);
+            }
+
+        } finally {
+            connectLock.unlock();
         }
     }
 


Mime
View raw message