Repository: cassandra Updated Branches: refs/heads/trunk b4e2a80a6 -> 5347d72e0
Fix CassandraVersion to accept x.y version string patch by yukim; reviewed by snazy for CASSANDRA-10931 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/5347d72e Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/5347d72e Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/5347d72e Branch: refs/heads/trunk Commit: 5347d72e07746683c237f5f1942afd3b63e868db Parents: b4e2a80 Author: Yuki Morishita <[email protected]> Authored: Tue Dec 29 13:32:39 2015 -0600 Committer: Yuki Morishita <[email protected]> Committed: Thu Dec 31 13:09:37 2015 -0600 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../cassandra/utils/CassandraVersion.java | 10 ++- .../cassandra/utils/CassandraVersionTest.java | 64 +++++++++++++------- 3 files changed, 50 insertions(+), 25 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/5347d72e/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 4a1f137..cbd109e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.2 + * Fix CassandraVersion to accept x.y version string (CASSANDRA-10931) * Add forceUserDefinedCleanup to allow more flexible cleanup (CASSANDRA-10708) * (cqlsh) allow setting TTL with COPY (CASSANDRA-9494) * Fix counting of received sstables in streaming (CASSANDRA-10949) http://git-wip-us.apache.org/repos/asf/cassandra/blob/5347d72e/src/java/org/apache/cassandra/utils/CassandraVersion.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/CassandraVersion.java b/src/java/org/apache/cassandra/utils/CassandraVersion.java index 6887a88..790eb5c 100644 --- a/src/java/org/apache/cassandra/utils/CassandraVersion.java +++ b/src/java/org/apache/cassandra/utils/CassandraVersion.java @@ -32,7 +32,11 @@ import org.apache.commons.lang3.StringUtils; */ public class CassandraVersion implements Comparable<CassandraVersion> { - private static final String VERSION_REGEXP = "(\\d+)\\.(\\d+)\\.(\\d+)(\\-[.\\w]+)?([.+][.\\w]+)?"; + /** + * note: 3rd group matches to words but only allows number and checked after regexp test. + * this is because 3rd and the last can be identical. + **/ + private static final String VERSION_REGEXP = "(\\d+)\\.(\\d+)(?:\\.(\\w+))?(\\-[.\\w]+)?([.+][.\\w]+)?"; private static final Pattern pattern = Pattern.compile(VERSION_REGEXP); private static final Pattern SNAPSHOT = Pattern.compile("-SNAPSHOT"); @@ -70,7 +74,7 @@ public class CassandraVersion implements Comparable<CassandraVersion> { this.major = Integer.parseInt(matcher.group(1)); this.minor = Integer.parseInt(matcher.group(2)); - this.patch = Integer.parseInt(matcher.group(3)); + this.patch = matcher.group(3) != null ? Integer.parseInt(matcher.group(3)) : 0; String pr = matcher.group(4); String bld = matcher.group(5); @@ -80,7 +84,7 @@ public class CassandraVersion implements Comparable<CassandraVersion> } catch (NumberFormatException e) { - throw new IllegalArgumentException("Invalid version value: " + version); + throw new IllegalArgumentException("Invalid version value: " + version, e); } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/5347d72e/test/unit/org/apache/cassandra/utils/CassandraVersionTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/utils/CassandraVersionTest.java b/test/unit/org/apache/cassandra/utils/CassandraVersionTest.java index 145b735..cec668f 100644 --- a/test/unit/org/apache/cassandra/utils/CassandraVersionTest.java +++ b/test/unit/org/apache/cassandra/utils/CassandraVersionTest.java @@ -20,6 +20,7 @@ package org.apache.cassandra.utils; import org.junit.Test; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; public class CassandraVersionTest { @@ -29,14 +30,18 @@ public class CassandraVersionTest CassandraVersion version; version = new CassandraVersion("1.2.3"); - assert version.major == 1 && version.minor == 2 && version.patch == 3; + assertTrue(version.major == 1 && version.minor == 2 && version.patch == 3); version = new CassandraVersion("1.2.3-foo.2+Bar"); - assert version.major == 1 && version.minor == 2 && version.patch == 3; + assertTrue(version.major == 1 && version.minor == 2 && version.patch == 3); // CassandraVersion can parse 4th '.' as build number version = new CassandraVersion("1.2.3.456"); - assert version.major == 1 && version.minor == 2 && version.patch == 3; + assertTrue(version.major == 1 && version.minor == 2 && version.patch == 3); + + // support for tick-tock release + version = new CassandraVersion("3.2"); + assertTrue(version.major == 3 && version.minor == 2 && version.patch == 0); } @Test @@ -46,32 +51,32 @@ public class CassandraVersionTest v1 = new CassandraVersion("1.2.3"); v2 = new CassandraVersion("1.2.4"); - assert v1.compareTo(v2) == -1; + assertTrue(v1.compareTo(v2) == -1); v1 = new CassandraVersion("1.2.3"); v2 = new CassandraVersion("1.2.3"); - assert v1.compareTo(v2) == 0; + assertTrue(v1.compareTo(v2) == 0); v1 = new CassandraVersion("1.2.3"); v2 = new CassandraVersion("2.0.0"); - assert v1.compareTo(v2) == -1; - assert v2.compareTo(v1) == 1; + assertTrue(v1.compareTo(v2) == -1); + assertTrue(v2.compareTo(v1) == 1); v1 = new CassandraVersion("1.2.3"); v2 = new CassandraVersion("1.2.3-alpha"); - assert v1.compareTo(v2) == 1; + assertTrue(v1.compareTo(v2) == 1); v1 = new CassandraVersion("1.2.3"); v2 = new CassandraVersion("1.2.3+foo"); - assert v1.compareTo(v2) == -1; + assertTrue(v1.compareTo(v2) == -1); v1 = new CassandraVersion("1.2.3"); v2 = new CassandraVersion("1.2.3-alpha+foo"); - assert v1.compareTo(v2) == 1; + assertTrue(v1.compareTo(v2) == 1); v1 = new CassandraVersion("1.2.3-alpha+1"); v2 = new CassandraVersion("1.2.3-alpha+2"); - assert v1.compareTo(v2) == -1; + assertTrue(v1.compareTo(v2) == -1); } @Test @@ -80,33 +85,32 @@ public class CassandraVersionTest CassandraVersion v1, v2; v1 = new CassandraVersion("3.0.2"); - assert v1.isSupportedBy(v1); + assertTrue(v1.isSupportedBy(v1)); v1 = new CassandraVersion("1.2.3"); v2 = new CassandraVersion("1.2.4"); - assert v1.isSupportedBy(v2); - assert !v2.isSupportedBy(v1); + assertTrue(v1.isSupportedBy(v2)); + assertTrue(!v2.isSupportedBy(v1)); v1 = new CassandraVersion("1.2.3"); v2 = new CassandraVersion("1.3.3"); - assert v1.isSupportedBy(v2); - assert !v2.isSupportedBy(v1); + assertTrue(v1.isSupportedBy(v2)); + assertTrue(!v2.isSupportedBy(v1)); v1 = new CassandraVersion("2.2.3"); v2 = new CassandraVersion("1.3.3"); - assert !v1.isSupportedBy(v2); - assert !v2.isSupportedBy(v1); + assertTrue(!v1.isSupportedBy(v2)); + assertTrue(!v2.isSupportedBy(v1)); v1 = new CassandraVersion("3.1.0"); v2 = new CassandraVersion("3.0.1"); - assert !v1.isSupportedBy(v2); - assert v2.isSupportedBy(v1); + assertTrue(!v1.isSupportedBy(v2)); + assertTrue(v2.isSupportedBy(v1)); } @Test public void testInvalid() { - assertThrows("1.0"); assertThrows("1.0.0a"); assertThrows("1.a.4"); assertThrows("1.0.0-foo&"); @@ -132,6 +136,22 @@ public class CassandraVersionTest prev = next; next = new CassandraVersion("2.2.0"); assertTrue(prev.compareTo(next) < 0); + + prev = next; + next = new CassandraVersion("3.1"); + assertTrue(prev.compareTo(next) < 0); + + prev = next; + next = new CassandraVersion("3.1.1"); + assertTrue(prev.compareTo(next) < 0); + + prev = next; + next = new CassandraVersion("3.2-rc1-SNAPSHOT"); + assertTrue(prev.compareTo(next) < 0); + + prev = next; + next = new CassandraVersion("3.2"); + assertTrue(prev.compareTo(next) < 0); } private static void assertThrows(String str) @@ -139,7 +159,7 @@ public class CassandraVersionTest try { new CassandraVersion(str); - assert false; + fail(); } catch (IllegalArgumentException e) {} }
