Skip to content

Commit c84c1c1

Browse files
authored
Merge pull request #473 from zhenlineo/1.6-idle-counter
Fixed a bug found on idle and inUse counters
2 parents e6e4846 + baaf479 commit c84c1c1

File tree

4 files changed

+47
-15
lines changed

4 files changed

+47
-15
lines changed

driver/src/main/java/org/neo4j/driver/internal/async/pool/NettyChannelPool.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ protected ChannelFuture connectChannel( Bootstrap bootstrap )
6969
// notify pool handler about a successful connection
7070
Channel channel = channelFuture.channel();
7171
handler.channelCreated( channel, creatingEvent );
72-
channel.closeFuture().addListener( closeFuture -> handler.channelClosed( channel ) );
7372
}
7473
else
7574
{

driver/src/main/java/org/neo4j/driver/internal/async/pool/NettyChannelTracker.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package org.neo4j.driver.internal.async.pool;
2020

2121
import io.netty.channel.Channel;
22+
import io.netty.channel.ChannelFutureListener;
2223
import io.netty.channel.pool.ChannelPoolHandler;
2324

2425
import java.util.Map;
@@ -39,6 +40,7 @@ public class NettyChannelTracker implements ChannelPoolHandler
3940
private final Map<BoltServerAddress,AtomicInteger> addressToIdleChannelCount = new ConcurrentHashMap<>();
4041
private final Logger log;
4142
private final MetricsListener metricsListener;
43+
private final ChannelFutureListener closeListener = future -> channelClosed( future.channel() );
4244

4345
public NettyChannelTracker( MetricsListener metricsListener, Logging logging )
4446
{
@@ -52,6 +54,7 @@ public void channelReleased( Channel channel )
5254
log.debug( "Channel %s released back to the pool", channel );
5355
decrementInUse( channel );
5456
incrementIdle( channel );
57+
channel.closeFuture().addListener( closeListener );
5558
}
5659

5760
@Override
@@ -60,6 +63,7 @@ public void channelAcquired( Channel channel )
6063
log.debug( "Channel %s acquired from the pool", channel );
6164
incrementInUse( channel );
6265
decrementIdle( channel );
66+
channel.closeFuture().removeListener( closeListener );
6367
}
6468

6569
@Override

driver/src/main/java/org/neo4j/driver/internal/metrics/spi/PoolStatus.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,5 @@
2020

2121
public enum PoolStatus
2222
{
23-
OPEN( 0 ),
24-
CLOSED( 1 );
25-
26-
private final int value;
27-
28-
PoolStatus( int value )
29-
{
30-
this.value = value;
31-
}
32-
33-
public int value()
34-
{
35-
return value;
36-
}
23+
OPEN, CLOSED
3724
}

driver/src/test/java/org/neo4j/driver/internal/async/pool/NettyChannelTrackerTest.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,48 @@ public void shouldDecrementCountForAddress()
110110
assertEquals( 3, tracker.idleChannelCount( address ) );
111111
}
112112

113+
@Test
114+
public void shouldDecreaseIdleWhenClosedOutsidePool() throws Throwable
115+
{
116+
// Given
117+
Channel channel = newChannel();
118+
tracker.channelCreated( channel, null );
119+
assertEquals( 1, tracker.inUseChannelCount( address ) );
120+
assertEquals( 0, tracker.idleChannelCount( address ) );
121+
122+
// When closed before session.close
123+
channel.close().sync();
124+
125+
// Then
126+
assertEquals( 1, tracker.inUseChannelCount( address ) );
127+
assertEquals( 0, tracker.idleChannelCount( address ) );
128+
129+
tracker.channelReleased( channel );
130+
assertEquals( 0, tracker.inUseChannelCount( address ) );
131+
assertEquals( 0, tracker.idleChannelCount( address ) );
132+
}
133+
134+
@Test
135+
public void shouldDecreaseIdleWhenClosedInsidePool() throws Throwable
136+
{
137+
// Given
138+
Channel channel = newChannel();
139+
tracker.channelCreated( channel, null );
140+
assertEquals( 1, tracker.inUseChannelCount( address ) );
141+
assertEquals( 0, tracker.idleChannelCount( address ) );
142+
143+
tracker.channelReleased( channel );
144+
assertEquals( 0, tracker.inUseChannelCount( address ) );
145+
assertEquals( 1, tracker.idleChannelCount( address ) );
146+
147+
// When closed before acquire
148+
channel.close().sync();
149+
// Then
150+
assertEquals( 0, tracker.inUseChannelCount( address ) );
151+
assertEquals( 0, tracker.idleChannelCount( address ) );
152+
153+
}
154+
113155
@Test
114156
public void shouldThrowWhenDecrementingForUnknownAddress()
115157
{

0 commit comments

Comments
 (0)