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

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


The following commit(s) were added to refs/heads/3.0 by this push:
     new 651df48  [3.0] Fix shutdown hang when use port unification handler 
(#9852)
651df48 is described below

commit 651df4869089a899445bd553954f1aec3d7aaa94
Author: GuoHao <[email protected]>
AuthorDate: Tue Mar 29 14:54:12 2022 +0800

    [3.0] Fix shutdown hang when use port unification handler (#9852)
    
    * Fix shutdown hang when use port unification handler
    
    * Fix ut
    
    * Fix sync
---
 .../dubbo/remoting/api/PortUnificationServer.java  |  4 ++--
 .../rpc/protocol/tri/TripleHttp2Protocol.java      | 24 ++++++++++++++--------
 2 files changed, 17 insertions(+), 11 deletions(-)

diff --git 
a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/api/PortUnificationServer.java
 
b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/api/PortUnificationServer.java
index 90009b9..7ce4932 100644
--- 
a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/api/PortUnificationServer.java
+++ 
b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/api/PortUnificationServer.java
@@ -175,8 +175,8 @@ public class PortUnificationServer {
                 long quietPeriod = Math.min(2000L, timeout);
                 Future<?> bossGroupShutdownFuture = 
bossGroup.shutdownGracefully(quietPeriod, timeout, MILLISECONDS);
                 Future<?> workerGroupShutdownFuture = 
workerGroup.shutdownGracefully(quietPeriod, timeout, MILLISECONDS);
-                bossGroupShutdownFuture.syncUninterruptibly();
-                workerGroupShutdownFuture.syncUninterruptibly();
+                bossGroupShutdownFuture.awaitUninterruptibly(timeout, 
MILLISECONDS);
+                workerGroupShutdownFuture.awaitUninterruptibly(timeout, 
MILLISECONDS);
             }
         } catch (Throwable e) {
             logger.warn(e.getMessage(), e);
diff --git 
a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleHttp2Protocol.java
 
b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleHttp2Protocol.java
index 81f0837..b47e029 100644
--- 
a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleHttp2Protocol.java
+++ 
b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleHttp2Protocol.java
@@ -21,6 +21,7 @@ import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.config.Configuration;
 import org.apache.dubbo.common.config.ConfigurationUtils;
 import org.apache.dubbo.common.extension.Activate;
+import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.threadpool.manager.ExecutorRepository;
 import org.apache.dubbo.remoting.api.Http2WireProtocol;
 import org.apache.dubbo.rpc.HeaderFilter;
@@ -42,6 +43,7 @@ import io.netty.handler.codec.http2.Http2MultiplexHandler;
 import io.netty.handler.codec.http2.Http2Settings;
 import io.netty.handler.ssl.SslContext;
 
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.Executor;
 
@@ -65,8 +67,10 @@ public class TripleHttp2Protocol extends Http2WireProtocol 
implements ScopeModel
     private static final int DEFAULT_MAX_FRAME_SIZE = MIB_8;
     private static final int DEFAULT_WINDOW_INIT_SIZE = MIB_8;
 
+    private ExtensionLoader<HeaderFilter> filtersLoader;
     private FrameworkModel frameworkModel;
-    private ApplicationModel applicationModel;
+    private Configuration config = ConfigurationUtils.getGlobalConfiguration(
+        ApplicationModel.defaultModel());
 
     @Override
     public void setFrameworkModel(FrameworkModel frameworkModel) {
@@ -75,7 +79,8 @@ public class TripleHttp2Protocol extends Http2WireProtocol 
implements ScopeModel
 
     @Override
     public void setApplicationModel(ApplicationModel applicationModel) {
-        this.applicationModel = applicationModel;
+        this.config = 
ConfigurationUtils.getGlobalConfiguration(applicationModel);
+        this.filtersLoader = 
applicationModel.getExtensionLoader(HeaderFilter.class);
     }
 
     @Override
@@ -85,10 +90,13 @@ public class TripleHttp2Protocol extends Http2WireProtocol 
implements ScopeModel
 
     @Override
     public void configServerPipeline(URL url, ChannelPipeline pipeline, 
SslContext sslContext) {
-        final List<HeaderFilter> filters = url.getOrDefaultApplicationModel()
-            .getExtensionLoader(HeaderFilter.class)
-            .getActivateExtension(url, HEADER_FILTER_KEY);
-        final Configuration config = 
ConfigurationUtils.getGlobalConfiguration(applicationModel);
+        final List<HeaderFilter> headFilters;
+        if (filtersLoader != null) {
+            headFilters = filtersLoader.getActivateExtension(url,
+                HEADER_FILTER_KEY);
+        } else {
+            headFilters = Collections.emptyList();
+        }
         final Http2FrameCodec codec = Http2FrameCodecBuilder.forServer()
             .gracefulShutdownTimeoutMillis(10000)
             .initialSettings(new Http2Settings().headerTableSize(
@@ -109,7 +117,7 @@ public class TripleHttp2Protocol extends Http2WireProtocol 
implements ScopeModel
                     final ChannelPipeline p = ch.pipeline();
                     p.addLast(new TripleCommandOutBoundHandler());
                     p.addLast(new 
TripleHttp2FrameServerHandler(frameworkModel, lookupExecutor(url),
-                        filters));
+                        headFilters));
                 }
             });
         pipeline.addLast(codec, new TripleServerConnectionHandler(), handler,
@@ -130,8 +138,6 @@ public class TripleHttp2Protocol extends Http2WireProtocol 
implements ScopeModel
 
     @Override
     public void configClientPipeline(URL url, ChannelPipeline pipeline, 
SslContext sslContext) {
-
-        final Configuration config = 
ConfigurationUtils.getGlobalConfiguration(applicationModel);
         final Http2FrameCodec codec = Http2FrameCodecBuilder.forClient()
             .gracefulShutdownTimeoutMillis(10000)
             .initialSettings(new Http2Settings().headerTableSize(

Reply via email to