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(