diff --git a/driver-core/src/main/java/com/datastax/driver/core/ControlConnection.java b/driver-core/src/main/java/com/datastax/driver/core/ControlConnection.java index c6538dad759..e3d0cb51466 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/ControlConnection.java +++ b/driver-core/src/main/java/com/datastax/driver/core/ControlConnection.java @@ -1007,12 +1007,12 @@ private boolean isValidPeer(Row peerRow, boolean logIfInvalid) { && !peerRow.isNull("data_center") && peerRow.getColumnDefinitions().contains("rack") && !peerRow.isNull("rack") - && peerRow.getColumnDefinitions().contains("tokens") - && (!peerRow.isNull("tokens") - || cluster - .configuration - .getQueryOptions() - .shouldConsiderZeroTokenNodesValidPeers()); + && peerRow.getColumnDefinitions().contains("tokens"); + + if (isValid && peerRow.isNull("tokens")) { + // Don't log invalid row for zero token nodes, but report it if it is configured so. + return cluster.configuration.getQueryOptions().shouldConsiderZeroTokenNodesValidPeers(); + } } if (!isValid && logIfInvalid) logger.warn( diff --git a/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java b/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java index 7fa9c8550a7..055d0849e50 100644 --- a/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java +++ b/driver-core/src/test/java/com/datastax/driver/core/ControlConnectionTest.java @@ -378,7 +378,12 @@ static void run_with_null_peer_info(String columns, boolean expectPeer2, boolean .extractingResultOf("getAddress") .doesNotContain(node2Address); - assertThat(log).containsOnlyOnce(expectedError); + if (columns.equals("tokens")) { + // For zero token nodes driver does not log an error + assertThat(log).doesNotContain(expectedError); + } else { + assertThat(log).containsOnlyOnce(expectedError); + } } } finally { cLogger.removeAppender(logs);