Skip to content

Commit b8d1933

Browse files
committed
Move couple methods from Connection to PooledConnection
Methods `#onError()` and `#hasUnrecoverableErrors()` are only useful in pooled connection and their implementations threw exceptions in regular connection. This commit moves them to `PooledConnection` interface.
1 parent cfa9327 commit b8d1933

17 files changed

+57
-67
lines changed

driver/src/main/java/org/neo4j/driver/internal/LeakLoggingNetworkSession.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*/
1919
package org.neo4j.driver.internal;
2020

21-
import org.neo4j.driver.internal.spi.Connection;
21+
import org.neo4j.driver.internal.spi.PooledConnection;
2222
import org.neo4j.driver.v1.Logger;
2323

2424
import static java.lang.System.lineSeparator;
@@ -28,7 +28,7 @@ class LeakLoggingNetworkSession extends NetworkSession
2828
private final Logger log;
2929
private final String stackTrace;
3030

31-
LeakLoggingNetworkSession( Connection connection, Logger log )
31+
LeakLoggingNetworkSession( PooledConnection connection, Logger log )
3232
{
3333
super( connection );
3434
this.log = log;

driver/src/main/java/org/neo4j/driver/internal/LeakLoggingNetworkSessionFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*/
1919
package org.neo4j.driver.internal;
2020

21-
import org.neo4j.driver.internal.spi.Connection;
21+
import org.neo4j.driver.internal.spi.PooledConnection;
2222
import org.neo4j.driver.v1.Logger;
2323
import org.neo4j.driver.v1.Logging;
2424
import org.neo4j.driver.v1.Session;
@@ -35,7 +35,7 @@ class LeakLoggingNetworkSessionFactory implements SessionFactory
3535
}
3636

3737
@Override
38-
public Session newInstance( Connection connection )
38+
public Session newInstance( PooledConnection connection )
3939
{
4040
return new LeakLoggingNetworkSession( connection, logger );
4141
}

driver/src/main/java/org/neo4j/driver/internal/NetworkSession.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import org.neo4j.driver.internal.logging.DevNullLogger;
2626
import org.neo4j.driver.internal.spi.Connection;
27+
import org.neo4j.driver.internal.spi.PooledConnection;
2728
import org.neo4j.driver.internal.types.InternalTypeSystem;
2829
import org.neo4j.driver.v1.Logger;
2930
import org.neo4j.driver.v1.Record;
@@ -41,7 +42,7 @@
4142

4243
public class NetworkSession implements Session
4344
{
44-
private final Connection connection;
45+
private final PooledConnection connection;
4546
private final String sessionId;
4647
private final Logger logger;
4748

@@ -67,7 +68,7 @@ public void run()
6768
private ExplicitTransaction currentTransaction;
6869
private AtomicBoolean isOpen = new AtomicBoolean( true );
6970

70-
public NetworkSession( Connection connection )
71+
public NetworkSession( PooledConnection connection )
7172
{
7273
this.connection = connection;
7374

driver/src/main/java/org/neo4j/driver/internal/NetworkSessionFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@
1818
*/
1919
package org.neo4j.driver.internal;
2020

21-
import org.neo4j.driver.internal.spi.Connection;
21+
import org.neo4j.driver.internal.spi.PooledConnection;
2222
import org.neo4j.driver.v1.Session;
2323

2424
class NetworkSessionFactory implements SessionFactory
2525
{
2626
@Override
27-
public Session newInstance( Connection connection )
27+
public Session newInstance( PooledConnection connection )
2828
{
2929
return new NetworkSession( connection );
3030
}

driver/src/main/java/org/neo4j/driver/internal/RoutingDriver.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
import org.neo4j.driver.internal.cluster.RoutingSettings;
2323
import org.neo4j.driver.internal.net.BoltServerAddress;
2424
import org.neo4j.driver.internal.security.SecurityPlan;
25-
import org.neo4j.driver.internal.spi.Connection;
2625
import org.neo4j.driver.internal.spi.ConnectionPool;
26+
import org.neo4j.driver.internal.spi.PooledConnection;
2727
import org.neo4j.driver.internal.util.Clock;
2828
import org.neo4j.driver.v1.AccessMode;
2929
import org.neo4j.driver.v1.Logging;
@@ -62,11 +62,11 @@ public RoutingDriver(
6262
@Override
6363
protected Session newSessionWithMode( AccessMode mode )
6464
{
65-
Connection connection = acquireConnection( mode );
65+
PooledConnection connection = acquireConnection( mode );
6666
return sessionFactory.newInstance( connection );
6767
}
6868

69-
private Connection acquireConnection( AccessMode role )
69+
private PooledConnection acquireConnection( AccessMode role )
7070
{
7171
switch ( role )
7272
{

driver/src/main/java/org/neo4j/driver/internal/SessionFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
*/
1919
package org.neo4j.driver.internal;
2020

21-
import org.neo4j.driver.internal.spi.Connection;
21+
import org.neo4j.driver.internal.spi.PooledConnection;
2222
import org.neo4j.driver.v1.Session;
2323

2424
interface SessionFactory
2525
{
26-
Session newInstance( Connection connection );
26+
Session newInstance( PooledConnection connection );
2727
}

driver/src/main/java/org/neo4j/driver/internal/cluster/LoadBalancer.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
import org.neo4j.driver.internal.RoutingErrorHandler;
2424
import org.neo4j.driver.internal.net.BoltServerAddress;
25-
import org.neo4j.driver.internal.spi.Connection;
2625
import org.neo4j.driver.internal.spi.ConnectionPool;
2726
import org.neo4j.driver.internal.spi.PooledConnection;
2827
import org.neo4j.driver.internal.util.Clock;
@@ -75,13 +74,13 @@ private LoadBalancer(
7574
ensureRouting();
7675
}
7776

78-
public Connection acquireReadConnection() throws ServiceUnavailableException
77+
public PooledConnection acquireReadConnection() throws ServiceUnavailableException
7978
{
8079
PooledConnection connection = acquireConnection( routingTable.readers() );
8180
return new RoutingPooledConnection( connection, this, AccessMode.READ );
8281
}
8382

84-
public Connection acquireWriteConnection() throws ServiceUnavailableException
83+
public PooledConnection acquireWriteConnection() throws ServiceUnavailableException
8584
{
8685
PooledConnection connection = acquireConnection( routingTable.writers() );
8786
return new RoutingPooledConnection( connection, this, AccessMode.WRITE );

driver/src/main/java/org/neo4j/driver/internal/net/ConcurrencyGuardingConnection.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -185,18 +185,6 @@ public boolean isOpen()
185185
return delegate.isOpen();
186186
}
187187

188-
@Override
189-
public void onError( Runnable runnable )
190-
{
191-
delegate.onError( runnable );
192-
}
193-
194-
@Override
195-
public boolean hasUnrecoverableErrors()
196-
{
197-
return delegate.hasUnrecoverableErrors();
198-
}
199-
200188
@Override
201189
public void resetAsync()
202190
{

driver/src/main/java/org/neo4j/driver/internal/net/SocketConnection.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -268,18 +268,6 @@ public boolean isOpen()
268268
return socket.isOpen();
269269
}
270270

271-
@Override
272-
public void onError( Runnable runnable )
273-
{
274-
throw new UnsupportedOperationException( "Error subscribers are not supported on SocketConnection." );
275-
}
276-
277-
@Override
278-
public boolean hasUnrecoverableErrors()
279-
{
280-
throw new UnsupportedOperationException( "Unrecoverable error detection is not supported on SocketConnection." );
281-
}
282-
283271
@Override
284272
public synchronized void resetAsync()
285273
{

driver/src/main/java/org/neo4j/driver/internal/spi/Connection.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -98,18 +98,6 @@ public interface Connection extends AutoCloseable
9898
*/
9999
boolean isOpen();
100100

101-
/**
102-
* If there are any errors that occur on this connection, invoke the given
103-
* runnable. This is used in the driver to clean up resources associated with
104-
* the connection, like an open transaction.
105-
*
106-
* @param runnable To be run on error.
107-
*/
108-
void onError( Runnable runnable );
109-
110-
111-
boolean hasUnrecoverableErrors();
112-
113101
/**
114102
* Asynchronously sending reset to the socket output channel.
115103
*/

driver/src/main/java/org/neo4j/driver/internal/spi/PooledConnection.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,36 @@
1818
*/
1919
package org.neo4j.driver.internal.spi;
2020

21+
import org.neo4j.driver.internal.util.Clock;
22+
2123
public interface PooledConnection extends Connection
2224
{
25+
/**
26+
* If there are any errors that occur on this connection, invoke the given
27+
* runnable. This is used in the driver to clean up resources associated with
28+
* the connection, like an open transaction.
29+
*
30+
* @param runnable To be run on error.
31+
*/
32+
void onError( Runnable runnable );
33+
34+
/**
35+
* Check if this connection experienced any unrecoverable errors. Connections with unrecoverable errors should be
36+
* closed and not returned to the pool for future reuse.
37+
*
38+
* @return {@code true} if any unrecoverable error happened, {@code false} otherwise.
39+
*/
40+
boolean hasUnrecoverableErrors();
41+
42+
/**
43+
* Timestamp of when this connection was used. This timestamp is updated when connection is returned to the pool.
44+
*
45+
* @return timestamp as returned by {@link Clock#millis()}.
46+
*/
2347
long lastUsedTimestamp();
2448

49+
/**
50+
* Destroy this connection and associated network resources.
51+
*/
2552
void dispose();
2653
}

driver/src/test/java/org/neo4j/driver/internal/LeakLoggingNetworkSessionFactoryTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
import org.junit.Test;
2222

23-
import org.neo4j.driver.internal.spi.Connection;
23+
import org.neo4j.driver.internal.spi.PooledConnection;
2424
import org.neo4j.driver.v1.Logging;
2525
import org.neo4j.driver.v1.Session;
2626

@@ -35,7 +35,7 @@ public void createsLeakLoggingNetworkSessions()
3535
{
3636
SessionFactory factory = new LeakLoggingNetworkSessionFactory( mock( Logging.class ) );
3737

38-
Session session = factory.newInstance( mock( Connection.class ) );
38+
Session session = factory.newInstance( mock( PooledConnection.class ) );
3939

4040
assertThat( session, instanceOf( LeakLoggingNetworkSession.class ) );
4141
}

driver/src/test/java/org/neo4j/driver/internal/LeakLoggingNetworkSessionTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
import java.lang.reflect.Method;
2727

28-
import org.neo4j.driver.internal.spi.Connection;
28+
import org.neo4j.driver.internal.spi.PooledConnection;
2929
import org.neo4j.driver.v1.Logger;
3030
import org.neo4j.driver.v1.Session;
3131

@@ -83,9 +83,9 @@ private static void finalize( Session session ) throws Exception
8383
finalizeMethod.invoke( session );
8484
}
8585

86-
private static Connection connectionMock( boolean open )
86+
private static PooledConnection connectionMock( boolean open )
8787
{
88-
Connection connection = mock( Connection.class );
88+
PooledConnection connection = mock( PooledConnection.class );
8989
when( connection.isOpen() ).thenReturn( open );
9090
return connection;
9191
}

driver/src/test/java/org/neo4j/driver/internal/NetworkSessionFactoryTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
import org.junit.Test;
2222

23-
import org.neo4j.driver.internal.spi.Connection;
23+
import org.neo4j.driver.internal.spi.PooledConnection;
2424
import org.neo4j.driver.v1.Session;
2525

2626
import static org.hamcrest.Matchers.instanceOf;
@@ -34,7 +34,7 @@ public void createsNetworkSessions()
3434
{
3535
SessionFactory factory = new NetworkSessionFactory();
3636

37-
Session session = factory.newInstance( mock( Connection.class ) );
37+
Session session = factory.newInstance( mock( PooledConnection.class ) );
3838

3939
assertThat( session, instanceOf( NetworkSession.class ) );
4040
}

driver/src/test/java/org/neo4j/driver/internal/NetworkSessionTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import org.junit.Test;
2323
import org.junit.rules.ExpectedException;
2424

25-
import org.neo4j.driver.internal.spi.Connection;
25+
import org.neo4j.driver.internal.spi.PooledConnection;
2626
import org.neo4j.driver.v1.Transaction;
2727
import org.neo4j.driver.v1.exceptions.ClientException;
2828
import org.neo4j.driver.v1.exceptions.ServiceUnavailableException;
@@ -40,8 +40,8 @@ public class NetworkSessionTest
4040
@Rule
4141
public ExpectedException exception = ExpectedException.none();
4242

43-
private final Connection mock = mock( Connection.class );
44-
private NetworkSession sess = new NetworkSession( mock );
43+
private final PooledConnection mock = mock( PooledConnection.class );
44+
private final NetworkSession sess = new NetworkSession( mock );
4545

4646
@Test
4747
public void shouldSendAllOnRun() throws Throwable
@@ -143,7 +143,7 @@ public void shouldNotAllowMoreTransactionsInSessionWhileConnectionClosed() throw
143143
public void shouldGetExceptionIfTryingToCloseSessionMoreThanOnce() throws Throwable
144144
{
145145
// Given
146-
NetworkSession sess = new NetworkSession( mock(Connection.class) );
146+
NetworkSession sess = new NetworkSession( mock( PooledConnection.class ) );
147147
try
148148
{
149149
sess.close();

driver/src/test/java/org/neo4j/driver/internal/RoutingDriverTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import org.neo4j.driver.internal.cluster.RoutingSettings;
3333
import org.neo4j.driver.internal.net.BoltServerAddress;
3434
import org.neo4j.driver.internal.spi.Collector;
35-
import org.neo4j.driver.internal.spi.Connection;
3635
import org.neo4j.driver.internal.spi.ConnectionPool;
3736
import org.neo4j.driver.internal.spi.PooledConnection;
3837
import org.neo4j.driver.internal.util.FakeClock;
@@ -425,7 +424,7 @@ void collect( Collector collector )
425424
private static class NetworkSessionWithAddressFactory implements SessionFactory
426425
{
427426
@Override
428-
public Session newInstance( Connection connection )
427+
public Session newInstance( PooledConnection connection )
429428
{
430429
return new NetworkSessionWithAddress( connection );
431430
}
@@ -435,7 +434,7 @@ private static class NetworkSessionWithAddress extends NetworkSession
435434
{
436435
final BoltServerAddress address;
437436

438-
NetworkSessionWithAddress( Connection connection )
437+
NetworkSessionWithAddress( PooledConnection connection )
439438
{
440439
super( connection );
441440
this.address = connection.boltServerAddress();

driver/src/test/java/org/neo4j/driver/internal/cluster/LoadBalancerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ public void shouldForgetAddressAndItsConnectionsOnServiceUnavailableWhileClosing
160160
BoltServerAddress address = new BoltServerAddress( "host", 42 );
161161

162162
PooledConnection connection = newConnectionWithFailingSync( address );
163-
Connection routingConnection = new RoutingPooledConnection( connection, loadBalancer, AccessMode.WRITE );
163+
PooledConnection routingConnection = new RoutingPooledConnection( connection, loadBalancer, AccessMode.WRITE );
164164
NetworkSession session = new NetworkSession( routingConnection );
165165

166166
assertThrowsSessionExpiredException( session );

0 commit comments

Comments
 (0)