Skip to content

Commit ef7e02f

Browse files
authored
Fix init order in AbstractPortUnificationServer (#14892)
* Fix init order * Fix init order
1 parent 7e4f8cf commit ef7e02f

File tree

3 files changed

+15
-7
lines changed

3 files changed

+15
-7
lines changed

dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/api/pu/AbstractPortUnificationServer.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public abstract class AbstractPortUnificationServer extends AbstractServer {
3333
/**
3434
* extension name -> activate WireProtocol
3535
*/
36-
private final Map<String, WireProtocol> protocols;
36+
private volatile Map<String, WireProtocol> protocols;
3737

3838
/*
3939
protocol name --> URL object
@@ -50,16 +50,24 @@ public abstract class AbstractPortUnificationServer extends AbstractServer {
5050

5151
public AbstractPortUnificationServer(URL url, ChannelHandler handler) throws RemotingException {
5252
super(url, handler);
53-
ExtensionLoader<WireProtocol> extensionLoader =
54-
url.getOrDefaultFrameworkModel().getExtensionLoader(WireProtocol.class);
55-
this.protocols = extensionLoader.getActivateExtension(url, new String[0]).stream()
56-
.collect(Collectors.toConcurrentMap(extensionLoader::getExtensionName, Function.identity()));
5753
}
5854

5955
public Map<String, WireProtocol> getProtocols() {
6056
return protocols;
6157
}
6258

59+
@Override
60+
protected final void doOpen() {
61+
ExtensionLoader<WireProtocol> extensionLoader =
62+
getUrl().getOrDefaultFrameworkModel().getExtensionLoader(WireProtocol.class);
63+
this.protocols = extensionLoader.getActivateExtension(getUrl(), new String[0]).stream()
64+
.collect(Collectors.toConcurrentMap(extensionLoader::getExtensionName, Function.identity()));
65+
66+
doOpen0();
67+
}
68+
69+
protected abstract void doOpen0();
70+
6371
/*
6472
This method registers URL object and corresponding channel handler to pu server.
6573
In PuServerExchanger.bind, this method is called with ConcurrentHashMap.computeIfPresent to register messages to

dubbo-remoting/dubbo-remoting-netty/src/main/java/org/apache/dubbo/remoting/transport/netty/NettyPortUnificationServer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public void bind() {
9090
}
9191

9292
@Override
93-
protected void doOpen() {
93+
protected void doOpen0() {
9494
NettyHelper.setNettyLoggerFactory();
9595
ExecutorService boss = Executors.newCachedThreadPool(new NamedThreadFactory(EVENT_LOOP_BOSS_POOL_NAME, true));
9696
ExecutorService worker =

dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyPortUnificationServer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public void bind() throws Throwable {
105105
}
106106

107107
@Override
108-
public void doOpen() throws Throwable {
108+
public void doOpen0() {
109109
bootstrap = new ServerBootstrap();
110110

111111
bossGroup = NettyEventLoopFactory.eventLoopGroup(1, EVENT_LOOP_BOSS_POOL_NAME);

0 commit comments

Comments
 (0)