Skip to content

Commit 97b1532

Browse files
authored
Merge pull request #613 from zhenlineo/2.0-driver-config
Clean up driver configuration.
2 parents e2e4943 + e07c4da commit 97b1532

File tree

54 files changed

+160
-629
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+160
-629
lines changed

driver/src/main/java/org/neo4j/driver/Config.java

Lines changed: 41 additions & 237 deletions
Large diffs are not rendered by default.

driver/src/main/java/org/neo4j/driver/Driver.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
import org.neo4j.driver.async.AsyncSession;
2424
import org.neo4j.driver.exceptions.ClientException;
25-
import org.neo4j.driver.internal.SessionConfig;
2625
import org.neo4j.driver.reactive.RxSession;
2726
import org.neo4j.driver.types.TypeSystem;
2827
import org.neo4j.driver.util.Experimental;

driver/src/main/java/org/neo4j/driver/internal/SessionConfig.java renamed to driver/src/main/java/org/neo4j/driver/SessionConfig.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,13 @@
1616
* See the License for the specific language governing permissions and
1717
* limitations under the License.
1818
*/
19-
package org.neo4j.driver.internal;
19+
package org.neo4j.driver;
2020

2121
import java.util.Arrays;
2222
import java.util.List;
2323
import java.util.Objects;
2424
import java.util.Optional;
2525

26-
import org.neo4j.driver.AccessMode;
27-
import org.neo4j.driver.Session;
2826
import org.neo4j.driver.async.AsyncSession;
2927
import org.neo4j.driver.reactive.RxSession;
3028

@@ -64,7 +62,7 @@ public static Builder builder()
6462
*
6563
* @return a session config for a general purpose session.
6664
*/
67-
public static SessionConfig empty()
65+
public static SessionConfig defaultConfig()
6866
{
6967
return EMPTY;
7068
}

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

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import org.neo4j.driver.internal.cluster.loadbalancing.LeastConnectedLoadBalancingStrategy;
4545
import org.neo4j.driver.internal.cluster.loadbalancing.LoadBalancer;
4646
import org.neo4j.driver.internal.cluster.loadbalancing.LoadBalancingStrategy;
47-
import org.neo4j.driver.internal.cluster.loadbalancing.RoundRobinLoadBalancingStrategy;
4847
import org.neo4j.driver.internal.logging.NettyLogging;
4948
import org.neo4j.driver.internal.metrics.InternalMetricsProvider;
5049
import org.neo4j.driver.internal.metrics.MetricsProvider;
@@ -218,26 +217,12 @@ protected InternalDriver createDriver( SecurityPlan securityPlan, SessionFactory
218217
protected LoadBalancer createLoadBalancer( BoltServerAddress address, ConnectionPool connectionPool,
219218
EventExecutorGroup eventExecutorGroup, Config config, RoutingSettings routingSettings )
220219
{
221-
LoadBalancingStrategy loadBalancingStrategy = createLoadBalancingStrategy( config, connectionPool );
220+
LoadBalancingStrategy loadBalancingStrategy = new LeastConnectedLoadBalancingStrategy( connectionPool, config.logging() );
222221
ServerAddressResolver resolver = createResolver( config );
223222
return new LoadBalancer( address, routingSettings, connectionPool, eventExecutorGroup, createClock(),
224223
config.logging(), loadBalancingStrategy, resolver );
225224
}
226225

227-
private static LoadBalancingStrategy createLoadBalancingStrategy( Config config,
228-
ConnectionPool connectionPool )
229-
{
230-
switch ( config.loadBalancingStrategy() )
231-
{
232-
case ROUND_ROBIN:
233-
return new RoundRobinLoadBalancingStrategy( config.logging() );
234-
case LEAST_CONNECTED:
235-
return new LeastConnectedLoadBalancingStrategy( connectionPool, config.logging() );
236-
default:
237-
throw new IllegalArgumentException( "Unknown load balancing strategy: " + config.loadBalancingStrategy() );
238-
}
239-
}
240-
241226
private static ServerAddressResolver createResolver( Config config )
242227
{
243228
ServerAddressResolver configuredResolver = config.resolver();
@@ -323,17 +308,6 @@ private static SecurityPlan createSecurityPlanImpl( BoltServerAddress address, C
323308
boolean hostnameVerificationEnabled = trustStrategy.isHostnameVerificationEnabled();
324309
switch ( trustStrategy.strategy() )
325310
{
326-
case TRUST_ON_FIRST_USE:
327-
logger.warn(
328-
"Option `TRUST_ON_FIRST_USE` has been deprecated and will be removed in a future " +
329-
"version of the driver. Please switch to use `TRUST_ALL_CERTIFICATES` instead." );
330-
return SecurityPlan.forTrustOnFirstUse( trustStrategy.certFile(), hostnameVerificationEnabled, address, logger );
331-
case TRUST_SIGNED_CERTIFICATES:
332-
logger.warn(
333-
"Option `TRUST_SIGNED_CERTIFICATE` has been deprecated and will be removed in a future " +
334-
"version of the driver. Please switch to use `TRUST_CUSTOM_CA_SIGNED_CERTIFICATES` instead." );
335-
// intentional fallthrough
336-
337311
case TRUST_CUSTOM_CA_SIGNED_CERTIFICATES:
338312
return SecurityPlan.forCustomCASignedCertificates( trustStrategy.certFile(), hostnameVerificationEnabled );
339313
case TRUST_SYSTEM_CA_SIGNED_CERTIFICATES:

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.neo4j.driver.Logging;
2727
import org.neo4j.driver.Metrics;
2828
import org.neo4j.driver.Session;
29+
import org.neo4j.driver.SessionConfig;
2930
import org.neo4j.driver.async.AsyncSession;
3031
import org.neo4j.driver.internal.async.InternalAsyncSession;
3132
import org.neo4j.driver.internal.async.NetworkSession;
@@ -59,7 +60,7 @@ public class InternalDriver implements Driver
5960
@Override
6061
public Session session()
6162
{
62-
return new InternalSession( newSession( SessionConfig.empty() ) );
63+
return new InternalSession( newSession( SessionConfig.defaultConfig() ) );
6364
}
6465

6566
@Override
@@ -71,7 +72,7 @@ public Session session( SessionConfig sessionConfig )
7172
@Override
7273
public RxSession rxSession()
7374
{
74-
return new InternalRxSession( newSession( SessionConfig.empty() ) );
75+
return new InternalRxSession( newSession( SessionConfig.defaultConfig() ) );
7576
}
7677

7778
@Override
@@ -83,7 +84,7 @@ public RxSession rxSession( SessionConfig sessionConfig )
8384
@Override
8485
public AsyncSession asyncSession()
8586
{
86-
return new InternalAsyncSession( newSession( SessionConfig.empty() ) );
87+
return new InternalAsyncSession( newSession( SessionConfig.defaultConfig() ) );
8788
}
8889

8990
@Override

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import java.util.concurrent.CompletionStage;
2222

23+
import org.neo4j.driver.SessionConfig;
2324
import org.neo4j.driver.internal.async.NetworkSession;
2425

2526
public interface SessionFactory

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.neo4j.driver.AccessMode;
2424
import org.neo4j.driver.Config;
2525
import org.neo4j.driver.Logging;
26+
import org.neo4j.driver.SessionConfig;
2627
import org.neo4j.driver.internal.async.NetworkSession;
2728
import org.neo4j.driver.internal.async.LeakLoggingNetworkSession;
2829
import org.neo4j.driver.internal.retry.RetryLogic;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ public class RoutingProcedureClusterCompositionProvider implements ClusterCompos
3838
private final Clock clock;
3939
private final RoutingProcedureRunner routingProcedureRunner;
4040

41-
public RoutingProcedureClusterCompositionProvider( Clock clock, RoutingSettings settings )
41+
public RoutingProcedureClusterCompositionProvider( Clock clock, RoutingContext routingContext )
4242
{
43-
this( clock, new RoutingProcedureRunner( settings.routingContext() ) );
43+
this( clock, new RoutingProcedureRunner( routingContext ) );
4444
}
4545

4646
RoutingProcedureClusterCompositionProvider( Clock clock, RoutingProcedureRunner routingProcedureRunner )

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

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,30 @@
2222

2323
public class RoutingSettings
2424
{
25-
public static final RoutingSettings DEFAULT = new RoutingSettings( 1, SECONDS.toMillis( 5 ) );
25+
public static final long STALE_ROUTING_TABLE_PURGE_DELAY_MS = SECONDS.toMillis( 30 );
26+
public static final RoutingSettings DEFAULT = new RoutingSettings( 1, SECONDS.toMillis( 5 ), STALE_ROUTING_TABLE_PURGE_DELAY_MS );
2627

2728
private final int maxRoutingFailures;
2829
private final long retryTimeoutDelay;
2930
private final RoutingContext routingContext;
31+
private final long routingTablePurgeDelayMs;
3032

31-
public RoutingSettings( int maxRoutingFailures, long retryTimeoutDelay )
33+
public RoutingSettings( int maxRoutingFailures, long retryTimeoutDelay, long routingTablePurgeDelayMs )
3234
{
33-
this( maxRoutingFailures, retryTimeoutDelay, RoutingContext.EMPTY );
35+
this( maxRoutingFailures, retryTimeoutDelay, routingTablePurgeDelayMs, RoutingContext.EMPTY );
3436
}
3537

36-
public RoutingSettings( int maxRoutingFailures, long retryTimeoutDelay, RoutingContext routingContext )
38+
public RoutingSettings( int maxRoutingFailures, long retryTimeoutDelay, long routingTablePurgeDelayMs, RoutingContext routingContext )
3739
{
3840
this.maxRoutingFailures = maxRoutingFailures;
3941
this.retryTimeoutDelay = retryTimeoutDelay;
4042
this.routingContext = routingContext;
43+
this.routingTablePurgeDelayMs = routingTablePurgeDelayMs;
4144
}
4245

4346
public RoutingSettings withRoutingContext( RoutingContext newRoutingContext )
4447
{
45-
return new RoutingSettings( maxRoutingFailures, retryTimeoutDelay, newRoutingContext );
48+
return new RoutingSettings( maxRoutingFailures, retryTimeoutDelay, routingTablePurgeDelayMs, newRoutingContext );
4649
}
4750

4851
public int maxRoutingFailures()
@@ -59,4 +62,9 @@ public RoutingContext routingContext()
5962
{
6063
return routingContext;
6164
}
65+
66+
public long routingTablePurgeDelayMs()
67+
{
68+
return routingTablePurgeDelayMs;
69+
}
6270
}

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

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

21-
import java.time.Duration;
2221
import java.util.Set;
2322
import java.util.concurrent.CompletableFuture;
2423
import java.util.concurrent.CompletionStage;
@@ -41,19 +40,18 @@ public class RoutingTableHandler implements RoutingErrorHandler
4140
private final ConnectionPool connectionPool;
4241
private final Rediscovery rediscovery;
4342
private final Logger log;
43+
private final long routingTablePurgeDelayMs;
4444

45-
// This defines how long we shall wait before trimming a routing table from routing tables after it is stale.
46-
// TODO make this a configuration option
47-
public static final Duration STALE_ROUTING_TABLE_PURGE_TIMEOUT = Duration.ofSeconds( 30 );
48-
49-
public RoutingTableHandler( RoutingTable routingTable, Rediscovery rediscovery, ConnectionPool connectionPool, RoutingTableRegistry routingTableRegistry, Logger log )
45+
public RoutingTableHandler( RoutingTable routingTable, Rediscovery rediscovery, ConnectionPool connectionPool, RoutingTableRegistry routingTableRegistry,
46+
Logger log, long routingTablePurgeDelayMs )
5047
{
5148
this.routingTable = routingTable;
5249
this.databaseName = routingTable.database();
5350
this.rediscovery = rediscovery;
5451
this.connectionPool = connectionPool;
5552
this.routingTableRegistry = routingTableRegistry;
5653
this.log = log;
54+
this.routingTablePurgeDelayMs = routingTablePurgeDelayMs;
5755
}
5856

5957
@Override
@@ -145,7 +143,7 @@ public Set<BoltServerAddress> servers()
145143
// This method cannot be synchronized as it will be visited by all routing table handler's threads concurrently
146144
public boolean isRoutingTableAged()
147145
{
148-
return refreshRoutingTableFuture == null && routingTable.hasBeenStaleFor( STALE_ROUTING_TABLE_PURGE_TIMEOUT.toMillis() );
146+
return refreshRoutingTableFuture == null && routingTable.hasBeenStaleFor( routingTablePurgeDelayMs );
149147
}
150148

151149
// for testing only

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ public class RoutingTableRegistryImpl implements RoutingTableRegistry
3636
private final RoutingTableHandlerFactory factory;
3737
private final Logger logger;
3838

39-
public RoutingTableRegistryImpl( ConnectionPool connectionPool, Rediscovery rediscovery, Clock clock, Logger logger )
39+
public RoutingTableRegistryImpl( ConnectionPool connectionPool, Rediscovery rediscovery, Clock clock, Logger logger, long routingTablePurgeDelayMs )
4040
{
41-
this( new ConcurrentHashMap<>(), new RoutingTableHandlerFactory( connectionPool, rediscovery, clock, logger ), logger );
41+
this( new ConcurrentHashMap<>(), new RoutingTableHandlerFactory( connectionPool, rediscovery, clock, logger, routingTablePurgeDelayMs ), logger );
4242
}
4343

4444
RoutingTableRegistryImpl( ConcurrentMap<String,RoutingTableHandler> routingTableHandlers, RoutingTableHandlerFactory factory, Logger logger )
@@ -109,19 +109,21 @@ static class RoutingTableHandlerFactory
109109
private final Rediscovery rediscovery;
110110
private final Logger log;
111111
private final Clock clock;
112+
private final long routingTablePurgeDelayMs;
112113

113-
RoutingTableHandlerFactory( ConnectionPool connectionPool, Rediscovery rediscovery, Clock clock, Logger log )
114+
RoutingTableHandlerFactory( ConnectionPool connectionPool, Rediscovery rediscovery, Clock clock, Logger log, long routingTablePurgeDelayMs )
114115
{
115116
this.connectionPool = connectionPool;
116117
this.rediscovery = rediscovery;
117118
this.clock = clock;
118119
this.log = log;
120+
this.routingTablePurgeDelayMs = routingTablePurgeDelayMs;
119121
}
120122

121123
RoutingTableHandler newInstance( String databaseName, RoutingTableRegistry allTables )
122124
{
123125
ClusterRoutingTable routingTable = new ClusterRoutingTable( databaseName, clock );
124-
return new RoutingTableHandler( routingTable, rediscovery, connectionPool, allTables, log );
126+
return new RoutingTableHandler( routingTable, rediscovery, connectionPool, allTables, log, routingTablePurgeDelayMs );
125127
}
126128
}
127129
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,13 +185,13 @@ private static RoutingTableRegistry createRoutingTables( ConnectionPool connecti
185185
{
186186
Logger log = loadBalancerLogger( logging );
187187
Rediscovery rediscovery = createRediscovery( eventExecutorGroup, initialRouter, resolver, settings, clock, log );
188-
return new RoutingTableRegistryImpl( connectionPool, rediscovery, clock, log );
188+
return new RoutingTableRegistryImpl( connectionPool, rediscovery, clock, log, settings.routingTablePurgeDelayMs() );
189189
}
190190

191191
private static Rediscovery createRediscovery( EventExecutorGroup eventExecutorGroup, BoltServerAddress initialRouter, ServerAddressResolver resolver,
192192
RoutingSettings settings, Clock clock, Logger log )
193193
{
194-
ClusterCompositionProvider clusterCompositionProvider = new RoutingProcedureClusterCompositionProvider( clock, settings );
194+
ClusterCompositionProvider clusterCompositionProvider = new RoutingProcedureClusterCompositionProvider( clock, settings.routingContext() );
195195
return new RediscoveryImpl( initialRouter, settings, clusterCompositionProvider, eventExecutorGroup, resolver, log );
196196
}
197197

driver/src/main/java/org/neo4j/driver/internal/security/SecurityPlan.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,13 @@
2121
import java.io.File;
2222
import java.io.IOException;
2323
import java.security.GeneralSecurityException;
24-
import java.security.KeyManagementException;
2524
import java.security.KeyStore;
2625
import java.security.NoSuchAlgorithmException;
2726
import javax.net.ssl.KeyManager;
2827
import javax.net.ssl.SSLContext;
2928
import javax.net.ssl.TrustManager;
3029
import javax.net.ssl.TrustManagerFactory;
3130

32-
import org.neo4j.driver.internal.BoltServerAddress;
33-
import org.neo4j.driver.Logger;
34-
3531
import static org.neo4j.driver.internal.util.CertificateTool.loadX509Cert;
3632

3733
/**
@@ -73,16 +69,6 @@ public static SecurityPlan forSystemCASignedCertificates( boolean requiresHostna
7369
return new SecurityPlan( true, SSLContext.getDefault(), true, requiresHostnameVerification );
7470
}
7571

76-
@Deprecated
77-
public static SecurityPlan forTrustOnFirstUse( File knownHosts, boolean requiresHostnameVerification, BoltServerAddress address, Logger logger )
78-
throws IOException, KeyManagementException, NoSuchAlgorithmException
79-
{
80-
SSLContext sslContext = SSLContext.getInstance( "TLS" );
81-
sslContext.init( new KeyManager[0], new TrustManager[]{new TrustOnFirstUseTrustManager( address, knownHosts, logger )}, null );
82-
83-
return new SecurityPlan( true, sslContext, false, requiresHostnameVerification );
84-
}
85-
8672
public static SecurityPlan insecure()
8773
{
8874
return new SecurityPlan( false, null, true, false );

driver/src/test/java/org/neo4j/driver/ConfigTest.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import java.io.File;
2424
import java.util.concurrent.TimeUnit;
2525

26-
import org.neo4j.driver.Config;
2726
import org.neo4j.driver.net.ServerAddressResolver;
2827

2928
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -48,22 +47,6 @@ void shouldDefaultToKnownCerts()
4847
assertEquals( authConfig.strategy(), Config.TrustStrategy.Strategy.TRUST_ALL_CERTIFICATES );
4948
}
5049

51-
@SuppressWarnings( "deprecation" )
52-
@Test
53-
void shouldChangeToNewKnownCerts()
54-
{
55-
// Given
56-
File knownCerts = new File( "new_known_hosts" );
57-
Config config = Config.builder().withTrustStrategy( Config.TrustStrategy.trustOnFirstUse( knownCerts ) ).build();
58-
59-
// When
60-
Config.TrustStrategy authConfig = config.trustStrategy();
61-
62-
// Then
63-
assertEquals( authConfig.strategy(), Config.TrustStrategy.Strategy.TRUST_ON_FIRST_USE );
64-
assertEquals( knownCerts.getAbsolutePath(), authConfig.certFile().getAbsolutePath() );
65-
}
66-
6750
@Test
6851
void shouldChangeToTrustedCert()
6952
{

driver/src/test/java/org/neo4j/driver/GraphDatabaseTest.java

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

2121
import org.junit.jupiter.api.Test;
2222

23-
import java.io.File;
2423
import java.io.IOException;
2524
import java.net.ServerSocket;
2625
import java.net.URI;
@@ -44,7 +43,6 @@
4443
import static org.mockito.Mockito.mock;
4544
import static org.mockito.Mockito.verify;
4645
import static org.mockito.Mockito.when;
47-
import static org.neo4j.driver.Config.TrustStrategy.trustOnFirstUse;
4846
import static org.neo4j.driver.internal.logging.DevNullLogging.DEV_NULL_LOGGING;
4947
import static org.neo4j.driver.internal.util.Matchers.clusterDriver;
5048
import static org.neo4j.driver.internal.util.Matchers.directDriver;
@@ -90,20 +88,6 @@ void boltPlusDiscoverySchemeShouldInstantiateClusterDriver() throws Exception
9088
assertThat( server.exitStatus(), equalTo( 0 ) );
9189
}
9290

93-
@Test
94-
@SuppressWarnings( "deprecation" )
95-
void boltPlusDiscoverySchemeShouldNotSupportTrustOnFirstUse()
96-
{
97-
URI uri = URI.create( "neo4j://127.0.0.1:9001" );
98-
99-
Config config = Config.builder()
100-
.withEncryption()
101-
.withTrustStrategy( trustOnFirstUse( new File( "./known_hosts" ) ) )
102-
.build();
103-
104-
assertThrows( IllegalArgumentException.class, () -> GraphDatabase.driver( uri, config ) );
105-
}
106-
10791
@Test
10892
void throwsWhenBoltSchemeUsedWithRoutingParams()
10993
{

0 commit comments

Comments
 (0)