Skip to content

Commit 310a9f9

Browse files
committed
DNS change fix
This update fixes an issue when the driver fails to update the routing table if the router DNS entry returns a different IP address.
1 parent d60da4c commit 310a9f9

File tree

3 files changed

+27
-7
lines changed

3 files changed

+27
-7
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import java.net.UnknownHostException;
2626
import java.util.List;
2727
import java.util.Objects;
28-
import java.util.stream.Collectors;
2928
import java.util.stream.Stream;
3029

3130
import org.neo4j.driver.net.ServerAddress;
@@ -154,6 +153,11 @@ public int port()
154153
return port;
155154
}
156155

156+
public boolean isResolved()
157+
{
158+
return resolved != null;
159+
}
160+
157161
private static String hostFrom( URI uri )
158162
{
159163
String host = uri.getHost();

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,9 +268,9 @@ private ClusterComposition handleRoutingProcedureError( Throwable error, Routing
268268
public List<BoltServerAddress> resolve()
269269
{
270270
return resolver.resolve( initialRouter )
271-
.stream()
272-
.flatMap( resolved -> resolveAll( BoltServerAddress.from( resolved ) ) )
273-
.collect( toList() ); // collect to list to preserve the order
271+
.stream()
272+
.map( BoltServerAddress::from )
273+
.collect( toList() ); // collect to list to preserve the order
274274
}
275275

276276
private Stream<BoltServerAddress> resolveAll( BoltServerAddress address )

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

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

2525
import java.io.IOException;
2626
import java.util.HashMap;
27+
import java.util.List;
2728
import java.util.Map;
2829

2930
import org.neo4j.driver.Logger;
@@ -49,6 +50,7 @@
4950
import static org.hamcrest.CoreMatchers.equalTo;
5051
import static org.junit.Assert.assertThat;
5152
import static org.junit.jupiter.api.Assertions.assertEquals;
53+
import static org.junit.jupiter.api.Assertions.assertFalse;
5254
import static org.junit.jupiter.api.Assertions.assertNotNull;
5355
import static org.junit.jupiter.api.Assertions.assertThrows;
5456
import static org.mockito.ArgumentMatchers.any;
@@ -400,22 +402,36 @@ void shouldNotLogWhenSingleRetryAttemptFails()
400402
Rediscovery rediscovery = new RediscoveryImpl( A, settings, compositionProvider, eventExecutor, resolver, logger );
401403
RoutingTable table = routingTableMock( A );
402404

403-
ServiceUnavailableException e = assertThrows( ServiceUnavailableException.class, () -> await( rediscovery.lookupClusterComposition( table, pool, empty() ) ) );
405+
ServiceUnavailableException e =
406+
assertThrows( ServiceUnavailableException.class, () -> await( rediscovery.lookupClusterComposition( table, pool, empty() ) ) );
404407
assertThat( e.getMessage(), containsString( "Could not perform discovery" ) );
405408

406409
// rediscovery should not log about retries and should not schedule any retries
407410
verify( logger, never() ).info( startsWith( "Unable to fetch new routing table, will try again in " ) );
408411
assertEquals( 0, eventExecutor.scheduleDelays().size() );
409412
}
410413

414+
@Test
415+
void shouldNotResolveToIPs()
416+
{
417+
ServerAddressResolver resolver = resolverMock( A, A );
418+
Rediscovery rediscovery = new RediscoveryImpl( A, null, null, null, resolver, null );
419+
420+
List<BoltServerAddress> addresses = rediscovery.resolve();
421+
422+
verify( resolver, times( 1 ) ).resolve( A );
423+
assertEquals( 1, addresses.size() );
424+
assertFalse( addresses.get( 0 ).isResolved() );
425+
}
426+
411427
private Rediscovery newRediscovery( BoltServerAddress initialRouter, ClusterCompositionProvider compositionProvider,
412-
ServerAddressResolver resolver )
428+
ServerAddressResolver resolver )
413429
{
414430
return newRediscovery( initialRouter, compositionProvider, resolver, DEV_NULL_LOGGER );
415431
}
416432

417433
private Rediscovery newRediscovery( BoltServerAddress initialRouter, ClusterCompositionProvider compositionProvider,
418-
ServerAddressResolver resolver, Logger logger )
434+
ServerAddressResolver resolver, Logger logger )
419435
{
420436
RoutingSettings settings = new RoutingSettings( 1, 0, 0 );
421437
return new RediscoveryImpl( initialRouter, settings, compositionProvider, GlobalEventExecutor.INSTANCE, resolver, logger );

0 commit comments

Comments
 (0)