diff --git a/CHANGES.txt b/CHANGES.txt index 3922cb39de..93198f0131 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -14,6 +14,7 @@ * Fix repair -snapshot not working (CASSANDRA-5512) * Set isRunning flag later in binary protocol server (CASSANDRA-5467) * Fix use of CQL3 functions with descencind clustering order (CASSANDRA-5472) + * Prevent repair when protocol version does not match (CASSANDRA-5523) Merged from 1.1 * Add retry mechanism to OTC for non-droppable_verbs (CASSANDRA-5393) * Use allocator information to improve memtable memory usage estimate diff --git a/src/java/org/apache/cassandra/service/AntiEntropyService.java b/src/java/org/apache/cassandra/service/AntiEntropyService.java index eafab67c6a..f41089e8d8 100644 --- a/src/java/org/apache/cassandra/service/AntiEntropyService.java +++ b/src/java/org/apache/cassandra/service/AntiEntropyService.java @@ -668,10 +668,13 @@ public class AntiEntropyService throw new IOException(message); } - if (MessagingService.instance().getVersion(endpoint) < MessagingService.VERSION_11 && isSequential) + // All endpoints should be on the same protocol version + if (!MessagingService.instance().knowsVersion(endpoint) || MessagingService.instance().getVersion(endpoint) != MessagingService.current_version) { - logger.info(String.format("[repair #%s] Cannot repair using snapshots as node %s is pre-1.1", getName(), endpoint)); - return; + String message = "Cannot repair among different protocol versions"; + differencingDone.signalAll(); + logger.error(String.format("[repair #%s] ", getName()) + message); + throw new IOException(message); } }