|
21 | 21 | import io.netty.bootstrap.Bootstrap;
|
22 | 22 | import io.netty.channel.Channel;
|
23 | 23 | import io.netty.channel.ChannelFuture;
|
| 24 | +import io.netty.channel.ChannelPromise; |
24 | 25 | import io.netty.channel.pool.ChannelHealthChecker;
|
25 | 26 | import io.netty.channel.pool.FixedChannelPool;
|
26 | 27 |
|
@@ -66,21 +67,27 @@ public class NettyChannelPool implements ExtendedChannelPool
|
66 | 67 | protected ChannelFuture connectChannel( Bootstrap bootstrap )
|
67 | 68 | {
|
68 | 69 | ListenerEvent creatingEvent = handler.channelCreating( id );
|
69 |
| - ChannelFuture channelFuture = connector.connect( address, bootstrap ); |
70 |
| - channelFuture.addListener( future -> { |
71 |
| - if ( future.isSuccess() ) |
72 |
| - { |
73 |
| - // notify pool handler about a successful connection |
74 |
| - Channel channel = channelFuture.channel(); |
75 |
| - setPoolId( channel, id ); |
76 |
| - handler.channelCreated( channel, creatingEvent ); |
77 |
| - } |
78 |
| - else |
79 |
| - { |
80 |
| - handler.channelFailedToCreate( id ); |
81 |
| - } |
82 |
| - } ); |
83 |
| - return channelFuture; |
| 70 | + ChannelFuture connectedChannelFuture = connector.connect( address, bootstrap ); |
| 71 | + Channel channel = connectedChannelFuture.channel(); |
| 72 | + // This ensures that handler.channelCreated is called before SimpleChannelPool calls handler.channelAcquired |
| 73 | + ChannelPromise trackedChannelFuture = channel.newPromise(); |
| 74 | + connectedChannelFuture.addListener( |
| 75 | + future -> |
| 76 | + { |
| 77 | + if ( future.isSuccess() ) |
| 78 | + { |
| 79 | + // notify pool handler about a successful connection |
| 80 | + setPoolId( channel, id ); |
| 81 | + handler.channelCreated( channel, creatingEvent ); |
| 82 | + trackedChannelFuture.setSuccess(); |
| 83 | + } |
| 84 | + else |
| 85 | + { |
| 86 | + handler.channelFailedToCreate( id ); |
| 87 | + trackedChannelFuture.setFailure( future.cause() ); |
| 88 | + } |
| 89 | + } ); |
| 90 | + return trackedChannelFuture; |
84 | 91 | }
|
85 | 92 | };
|
86 | 93 | }
|
|
0 commit comments