Skip to content

Commit 9a6ca7b

Browse files
author
Zhen
committed
Changed according to feedback
1 parent 7766216 commit 9a6ca7b

File tree

6 files changed

+103
-42
lines changed

6 files changed

+103
-42
lines changed

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

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,35 +24,38 @@
2424
import java.util.Set;
2525

2626
import org.neo4j.driver.internal.net.BoltServerAddress;
27-
import org.neo4j.driver.v1.exceptions.ServiceUnavailableException;
27+
import org.neo4j.driver.v1.Logger;
2828

29-
public interface DnsResolver
29+
public class DnsResolver implements HostNameResolver
3030
{
31-
DnsResolver DEFAULT = new DnsResolver()
32-
{
33-
@Override
34-
public Set<BoltServerAddress> resolve( BoltServerAddress initialRouter )
35-
{
36-
try
37-
{
38-
InetAddress[] ipAddresses = InetAddress.getAllByName( initialRouter.host() );
39-
Set<BoltServerAddress> addresses = new HashSet<>( ipAddresses.length );
31+
private final Logger logger;
4032

41-
for ( int i = 0; i < ipAddresses.length; i ++ )
42-
{
43-
addresses.add( new BoltServerAddress( ipAddresses[i].getHostAddress(), initialRouter.port() ) );
44-
}
33+
public DnsResolver( Logger logger )
34+
{
35+
this.logger = logger;
36+
}
4537

46-
return addresses;
38+
@Override
39+
public Set<BoltServerAddress> resolve( BoltServerAddress initialRouter )
40+
{
41+
Set<BoltServerAddress> addresses = new HashSet<>();
42+
try
43+
{
44+
InetAddress[] ipAddresses = InetAddress.getAllByName( initialRouter.host() );
4745

48-
}
49-
catch ( UnknownHostException e )
46+
for ( InetAddress ipAddress : ipAddresses )
5047
{
51-
throw new ServiceUnavailableException(
52-
"Failed to resolve URI `" + initialRouter + "` to IPs due to error: " + e.getMessage(), e );
48+
addresses.add( new BoltServerAddress( ipAddress.getHostAddress(), initialRouter.port() ) );
5349
}
50+
51+
return addresses;
5452
}
55-
};
53+
catch ( UnknownHostException e )
54+
{
55+
logger.error( "Failed to resolve URI `" + initialRouter + "` to IPs due to error: " + e.getMessage(), e );
5656

57-
Set<BoltServerAddress> resolve( BoltServerAddress initialRouter );
57+
addresses.add( initialRouter );
58+
return addresses;
59+
}
60+
}
5861
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* Copyright (c) 2002-2017 "Neo Technology,"
3+
* Network Engine for Objects in Lund AB [http://neotechnology.com]
4+
*
5+
* This file is part of Neo4j.
6+
*
7+
* Licensed under the Apache License, Version 2.0 (the "License");
8+
* you may not use this file except in compliance with the License.
9+
* You may obtain a copy of the License at
10+
*
11+
* http://www.apache.org/licenses/LICENSE-2.0
12+
*
13+
* Unless required by applicable law or agreed to in writing, software
14+
* distributed under the License is distributed on an "AS IS" BASIS,
15+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
* See the License for the specific language governing permissions and
17+
* limitations under the License.
18+
*/
19+
package org.neo4j.driver.internal.cluster;
20+
21+
import java.util.Set;
22+
23+
import org.neo4j.driver.internal.net.BoltServerAddress;
24+
25+
public interface HostNameResolver
26+
{
27+
Set<BoltServerAddress> resolve( BoltServerAddress initialRouter );
28+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,6 @@ private static Rediscovery createRediscovery( BoltServerAddress initialRouter, R
157157
Clock clock, Logger log )
158158
{
159159
ClusterCompositionProvider clusterComposition = new GetServersProcedureClusterCompositionProvider( clock, log );
160-
return new Rediscovery( initialRouter, settings, clock, log, clusterComposition, DnsResolver.DEFAULT );
160+
return new Rediscovery( initialRouter, settings, clock, log, clusterComposition, new DnsResolver( log ) );
161161
}
162162
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,17 @@ public class Rediscovery
4040
private final Clock clock;
4141
private final Logger logger;
4242
private final ClusterCompositionProvider provider;
43-
private final DnsResolver dnsResolver;
43+
private final HostNameResolver hostNameResolver;
4444

4545
public Rediscovery( BoltServerAddress initialRouter, RoutingSettings settings, Clock clock, Logger logger,
46-
ClusterCompositionProvider provider, DnsResolver dnsResolver )
46+
ClusterCompositionProvider provider, HostNameResolver hostNameResolver )
4747
{
4848
this.initialRouter = initialRouter;
4949
this.settings = settings;
5050
this.clock = clock;
5151
this.logger = logger;
5252
this.provider = provider;
53-
this.dnsResolver = dnsResolver;
53+
this.hostNameResolver = hostNameResolver;
5454
}
5555

5656
// Given the current routing table and connection pool, use the connection composition provider to fetch a new
@@ -82,7 +82,7 @@ private ClusterComposition lookupClusterCompositionOnKnownRouters( ConnectionPoo
8282
RoutingTable routingTable )
8383
{
8484
int size = routingTable.routerSize();
85-
Set<BoltServerAddress> triedServers = new HashSet<>( size );
85+
Set<BoltServerAddress> triedServers = new HashSet<>();
8686
for ( int i = 0; i < size; i++ )
8787
{
8888
BoltServerAddress address = routingTable.nextRouter();
@@ -102,7 +102,7 @@ private ClusterComposition lookupClusterCompositionOnKnownRouters( ConnectionPoo
102102
}
103103
}
104104

105-
Set<BoltServerAddress> ips = dnsResolver.resolve( initialRouter );
105+
Set<BoltServerAddress> ips = hostNameResolver.resolve( initialRouter );
106106
ips.removeAll( triedServers );
107107
for ( BoltServerAddress address : ips )
108108
{

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

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,57 @@
2020

2121
import org.junit.Test;
2222

23+
import java.net.UnknownHostException;
2324
import java.util.Set;
2425

2526
import org.neo4j.driver.internal.net.BoltServerAddress;
27+
import org.neo4j.driver.v1.Logger;
2628

2729
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
2830
import static org.junit.Assert.assertThat;
29-
import static org.neo4j.driver.internal.cluster.DnsResolver.DEFAULT;
31+
import static org.mockito.Matchers.any;
32+
import static org.mockito.Mockito.mock;
33+
import static org.mockito.Mockito.verify;
3034

3135
public class DnsResolverTest
3236
{
37+
private DnsResolver resolver = new DnsResolver( mock( Logger.class ) );
38+
3339
@Test
3440
public void shouldResolveDNSToIPs()
3541
{
36-
Set<BoltServerAddress> resolve = DEFAULT.resolve( new BoltServerAddress( "google.com", 80 ) );
42+
Set<BoltServerAddress> resolve = resolver.resolve( new BoltServerAddress( "google.com", 80 ) );
43+
assertThat( resolve.size(), greaterThanOrEqualTo( 1 ) );
44+
}
45+
46+
@Test
47+
public void shouldResolveLocalhostIPDNSToIPs()
48+
{
49+
Set<BoltServerAddress> resolve = resolver.resolve( new BoltServerAddress( "127.0.0.1", 80 ) );
3750
assertThat( resolve.size(), greaterThanOrEqualTo( 1 ) );
3851
}
3952

4053
@Test
4154
public void shouldResolveLocalhostDNSToIPs()
4255
{
43-
Set<BoltServerAddress> resolve = DEFAULT.resolve( new BoltServerAddress( "127.0.0.1", 80 ) );
56+
Set<BoltServerAddress> resolve = resolver.resolve( new BoltServerAddress( "localhost", 80 ) );
57+
assertThat( resolve.size(), greaterThanOrEqualTo( 1 ) );
58+
}
59+
60+
@Test
61+
public void shouldResolveIPv6LocalhostDNSToIPs()
62+
{
63+
Set<BoltServerAddress> resolve = resolver.resolve( new BoltServerAddress( "[::1]", 80 ) );
64+
assertThat( resolve.size(), greaterThanOrEqualTo( 1 ) );
65+
}
66+
67+
@Test
68+
public void shouldExceptionAndGiveDefaultValue()
69+
{
70+
Logger logger = mock( Logger.class );
71+
DnsResolver resolver = new DnsResolver( logger );
72+
Set<BoltServerAddress> resolve = resolver.resolve( new BoltServerAddress( "[/]", 80 ) );
73+
verify( logger ).error( any( String.class ), any( UnknownHostException.class ) );
4474
assertThat( resolve.size(), greaterThanOrEqualTo( 1 ) );
4575
}
4676
}

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
import java.util.ArrayList;
2828
import java.util.Collection;
29+
import java.util.Collections;
2930
import java.util.HashSet;
3031
import java.util.List;
3132
import java.util.Set;
@@ -68,6 +69,16 @@
6869
@RunWith( Enclosed.class )
6970
public class RediscoveryTest
7071
{
72+
private static HostNameResolver directMapProvider = new HostNameResolver()
73+
{
74+
@Override
75+
public Set<BoltServerAddress> resolve( BoltServerAddress initialRouter )
76+
{
77+
Set<BoltServerAddress> directMap = new HashSet<>();
78+
directMap.add( initialRouter );
79+
return directMap;
80+
}
81+
};
7182

7283
private static ClusterCompositionResponse.Success success( ClusterComposition cluster )
7384
{
@@ -460,17 +471,6 @@ private static ClusterComposition rediscover( BoltServerAddress initialRouter, C
460471
return rediscovery.lookupClusterComposition( connections, routingTable );
461472
}
462473

463-
private static DnsResolver directMapProvider = new DnsResolver()
464-
{
465-
@Override
466-
public Set<BoltServerAddress> resolve( BoltServerAddress initialRouter )
467-
{
468-
Set<BoltServerAddress> directMap = new HashSet<>( 1 );
469-
directMap.add( initialRouter );
470-
return directMap;
471-
}
472-
};
473-
474474
private static class TestRoutingTable extends ClusterRoutingTable
475475
{
476476
final List<BoltServerAddress> removedRouters = new ArrayList<>();

0 commit comments

Comments
 (0)