diff --git a/CHANGES.txt b/CHANGES.txt index 8a17ee639a..eb07e60cb6 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 5.1 + * Fix version range check in MessagingService.getVersionOrdinal (CASSANDRA-20842) * Allow custom constraints to be loaded via SPI (CASSANDRA-20824) * Optimize DataPlacement lookup by ReplicationParams (CASSANDRA-20804) * Fix ShortPaxosSimulationTest and AccordSimulationRunner do not execute from the cli (CASSANDRA-20805) diff --git a/src/java/org/apache/cassandra/net/MessagingService.java b/src/java/org/apache/cassandra/net/MessagingService.java index e209cdfb27..eef34378ed 100644 --- a/src/java/org/apache/cassandra/net/MessagingService.java +++ b/src/java/org/apache/cassandra/net/MessagingService.java @@ -287,7 +287,7 @@ public class MessagingService extends MessagingServiceMBeanImpl implements Messa } } static final int minVersion = Version.values()[0].value; - static final int maxVersion = Version.values()[Version.values().length - 1].value; + static final int maxOrdinalVersion = Version.values().length - 1; /** * This is an optimisation to speed up the translation of the serialization @@ -300,8 +300,8 @@ public class MessagingService extends MessagingServiceMBeanImpl implements Messa public static int getVersionOrdinal(int version) { int result = version - minVersion; - if (result < 0 || result > maxVersion) - throw new IllegalStateException("Unkown serialization version: " + version); + if (result < 0 || result > maxOrdinalVersion) + throw new IllegalStateException("Unknown serialization version: " + version); return result; } diff --git a/src/java/org/apache/cassandra/service/accord/CommandsForRanges.java b/src/java/org/apache/cassandra/service/accord/CommandsForRanges.java index bbbb7679d3..8aa9f3dd88 100644 --- a/src/java/org/apache/cassandra/service/accord/CommandsForRanges.java +++ b/src/java/org/apache/cassandra/service/accord/CommandsForRanges.java @@ -33,7 +33,6 @@ import java.util.concurrent.locks.ReentrantLock; import java.util.function.Consumer; import javax.annotation.Nullable; -import accord.api.Journal; import accord.api.RoutingKey; import accord.local.Command; import accord.local.CommandSummaries; diff --git a/test/unit/org/apache/cassandra/net/MessagingServiceOrdinaryVersionTest.java b/test/unit/org/apache/cassandra/net/MessagingServiceOrdinaryVersionTest.java index bbe77f5fa6..33a4df3099 100644 --- a/test/unit/org/apache/cassandra/net/MessagingServiceOrdinaryVersionTest.java +++ b/test/unit/org/apache/cassandra/net/MessagingServiceOrdinaryVersionTest.java @@ -37,9 +37,16 @@ public class MessagingServiceOrdinaryVersionTest MessagingService.getVersionOrdinal(1); } + @Test(expected = IllegalStateException.class) + public void checkUnknownSmallVersionJustBeforeTheMinOne() + { + MessagingService.getVersionOrdinal(MessagingService.minVersion - 1); + } + @Test(expected = IllegalStateException.class) public void checkUnknownBigVersion() { - MessagingService.getVersionOrdinal(Byte.MAX_VALUE + 1); + int maxVersion = MessagingService.Version.values()[MessagingService.Version.values().length - 1].value; + MessagingService.getVersionOrdinal(maxVersion + 1); } }