This is an automated email from the ASF dual-hosted git repository.
mck pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/trunk by this push:
new 41a669a100 Deduplicate the MixedMode* upgrade jvm-dtests
41a669a100 is described below
commit 41a669a100646abbcccc2f41bdfe0a11db648b1b
Author: Mick Semb Wever <[email protected]>
AuthorDate: Tue May 16 16:04:39 2023 +0200
Deduplicate the MixedMode* upgrade jvm-dtests
Also update method parameters to be clearer in how we declare testcase
applicability
patch by Mick Semb Wever; reviewed by David Capwell for CASSANDRA-18506
---
.../upgrade/MixedModeAvailabilityTestBase.java | 19 ++--
.../MixedModeAvailabilityV30AllOneTest.java | 2 +-
.../MixedModeAvailabilityV30OneAllTest.java | 2 +-
.../MixedModeAvailabilityV30QuorumQuorumTest.java | 2 +-
.../MixedModeAvailabilityV3XAllOneTest.java | 32 ------
.../MixedModeAvailabilityV3XOneAllTest.java | 32 ------
.../MixedModeAvailabilityV3XQuorumQuorumTest.java | 32 ------
.../upgrade/MixedModeConsistencyTestBase.java | 124 ---------------------
.../upgrade/MixedModeConsistencyV30Test.java | 102 ++++++++++++++++-
.../upgrade/MixedModeConsistencyV3XTest.java | 33 ------
.../distributed/upgrade/UpgradeTestBase.java | 55 ++++++---
11 files changed, 145 insertions(+), 290 deletions(-)
diff --git
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityTestBase.java
b/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityTestBase.java
index 1ca23ae80e..49f327b026 100644
---
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityTestBase.java
+++
b/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityTestBase.java
@@ -23,7 +23,6 @@ import java.util.concurrent.RejectedExecutionException;
import org.junit.Test;
-import com.vdurmont.semver4j.Semver;
import org.apache.cassandra.distributed.api.ConsistencyLevel;
import org.apache.cassandra.distributed.api.ICoordinator;
import org.apache.cassandra.exceptions.ReadFailureException;
@@ -51,13 +50,11 @@ public abstract class MixedModeAvailabilityTestBase extends
UpgradeTestBase
private static final String INSERT = withKeyspace("INSERT INTO %s.t (k, c,
v) VALUES (?, ?, ?)");
private static final String SELECT = withKeyspace("SELECT * FROM %s.t
WHERE k = ?");
- private final Semver initial;
private final ConsistencyLevel writeConsistencyLevel;
private final ConsistencyLevel readConsistencyLevel;
- public MixedModeAvailabilityTestBase(Semver initial, ConsistencyLevel
writeConsistencyLevel, ConsistencyLevel readConsistencyLevel)
+ public MixedModeAvailabilityTestBase(ConsistencyLevel
writeConsistencyLevel, ConsistencyLevel readConsistencyLevel)
{
- this.initial = initial;
this.writeConsistencyLevel = writeConsistencyLevel;
this.readConsistencyLevel = readConsistencyLevel;
}
@@ -65,32 +62,30 @@ public abstract class MixedModeAvailabilityTestBase extends
UpgradeTestBase
@Test
public void testAvailabilityCoordinatorNotUpgraded() throws Throwable
{
- testAvailability(false, initial, writeConsistencyLevel,
readConsistencyLevel);
+ testAvailability(false, writeConsistencyLevel, readConsistencyLevel);
}
@Test
public void testAvailabilityCoordinatorUpgraded() throws Throwable
{
- testAvailability(true, initial, writeConsistencyLevel,
readConsistencyLevel);
+ testAvailability(true, writeConsistencyLevel, readConsistencyLevel);
}
- protected static void testAvailability(Semver initial,
- ConsistencyLevel
writeConsistencyLevel,
+ protected static void testAvailability(ConsistencyLevel
writeConsistencyLevel,
ConsistencyLevel
readConsistencyLevel) throws Throwable
{
- testAvailability(true, initial, writeConsistencyLevel,
readConsistencyLevel);
- testAvailability(false, initial, writeConsistencyLevel,
readConsistencyLevel);
+ testAvailability(true, writeConsistencyLevel, readConsistencyLevel);
+ testAvailability(false, writeConsistencyLevel, readConsistencyLevel);
}
private static void testAvailability(boolean upgradedCoordinator,
- Semver initial,
ConsistencyLevel
writeConsistencyLevel,
ConsistencyLevel
readConsistencyLevel) throws Throwable
{
new TestCase()
.nodes(NUM_NODES)
.nodesToUpgrade(upgradedCoordinator ? 1 : 2)
- .upgradesToCurrentFrom(initial)
+ .upgradesToCurrentFrom(v30)
.withConfig(config -> config.set("read_request_timeout_in_ms",
SECONDS.toMillis(5))
.set("write_request_timeout_in_ms",
SECONDS.toMillis(5)))
// use retry of 10ms so that each check is consistent
diff --git
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV30AllOneTest.java
b/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV30AllOneTest.java
index 96dc4547dc..47ef8da9f1 100644
---
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV30AllOneTest.java
+++
b/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV30AllOneTest.java
@@ -27,6 +27,6 @@ public class MixedModeAvailabilityV30AllOneTest extends
MixedModeAvailabilityTes
{
public MixedModeAvailabilityV30AllOneTest()
{
- super(v30, ConsistencyLevel.ALL, ConsistencyLevel.ONE);
+ super(ConsistencyLevel.ALL, ConsistencyLevel.ONE);
}
}
diff --git
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV30OneAllTest.java
b/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV30OneAllTest.java
index be5154979e..fec9230e12 100644
---
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV30OneAllTest.java
+++
b/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV30OneAllTest.java
@@ -27,6 +27,6 @@ public class MixedModeAvailabilityV30OneAllTest extends
MixedModeAvailabilityTes
{
public MixedModeAvailabilityV30OneAllTest()
{
- super(v30, ConsistencyLevel.ONE, ConsistencyLevel.ALL);
+ super(ConsistencyLevel.ONE, ConsistencyLevel.ALL);
}
}
diff --git
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV30QuorumQuorumTest.java
b/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV30QuorumQuorumTest.java
index 8df53d187e..5e71a34fbb 100644
---
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV30QuorumQuorumTest.java
+++
b/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV30QuorumQuorumTest.java
@@ -27,6 +27,6 @@ public class MixedModeAvailabilityV30QuorumQuorumTest extends
MixedModeAvailabil
{
public MixedModeAvailabilityV30QuorumQuorumTest()
{
- super(v30, ConsistencyLevel.QUORUM, ConsistencyLevel.QUORUM);
+ super(ConsistencyLevel.QUORUM, ConsistencyLevel.QUORUM);
}
}
diff --git
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV3XAllOneTest.java
b/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV3XAllOneTest.java
deleted file mode 100644
index 955e0ba082..0000000000
---
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV3XAllOneTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.cassandra.distributed.upgrade;
-
-import org.apache.cassandra.distributed.api.ConsistencyLevel;
-
-/**
- * {@link MixedModeAvailabilityTestBase} for upgrades from v3X with ALL-ONE
write-read consistency.
- */
-public class MixedModeAvailabilityV3XAllOneTest extends
MixedModeAvailabilityTestBase
-{
- public MixedModeAvailabilityV3XAllOneTest()
- {
- super(v3X, ConsistencyLevel.ALL, ConsistencyLevel.ONE);
- }
-}
diff --git
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV3XOneAllTest.java
b/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV3XOneAllTest.java
deleted file mode 100644
index 59554d15c9..0000000000
---
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV3XOneAllTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.cassandra.distributed.upgrade;
-
-import org.apache.cassandra.distributed.api.ConsistencyLevel;
-
-/**
- * {@link MixedModeAvailabilityTestBase} for upgrades from v3X with ONE-ALL
write-read consistency.
- */
-public class MixedModeAvailabilityV3XOneAllTest extends
MixedModeAvailabilityTestBase
-{
- public MixedModeAvailabilityV3XOneAllTest()
- {
- super(v3X, ConsistencyLevel.ONE, ConsistencyLevel.ALL);
- }
-}
diff --git
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV3XQuorumQuorumTest.java
b/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV3XQuorumQuorumTest.java
deleted file mode 100644
index e65f4f46d8..0000000000
---
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeAvailabilityV3XQuorumQuorumTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.cassandra.distributed.upgrade;
-
-import org.apache.cassandra.distributed.api.ConsistencyLevel;
-
-/**
- * {@link MixedModeAvailabilityTestBase} for upgrades from v3X with
QUORUM-QUORUM write-read consistency.
- */
-public class MixedModeAvailabilityV3XQuorumQuorumTest extends
MixedModeAvailabilityTestBase
-{
- public MixedModeAvailabilityV3XQuorumQuorumTest()
- {
- super(v3X, ConsistencyLevel.QUORUM, ConsistencyLevel.QUORUM);
- }
-}
diff --git
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeConsistencyTestBase.java
b/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeConsistencyTestBase.java
deleted file mode 100644
index 519625e761..0000000000
---
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeConsistencyTestBase.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.cassandra.distributed.upgrade;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import com.vdurmont.semver4j.Semver;
-
-import org.apache.cassandra.distributed.UpgradeableCluster;
-import org.apache.cassandra.distributed.api.ConsistencyLevel;
-import org.apache.cassandra.distributed.api.IUpgradeableInstance;
-
-import static java.lang.String.format;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.apache.cassandra.distributed.api.ConsistencyLevel.ALL;
-import static org.apache.cassandra.distributed.api.ConsistencyLevel.ONE;
-import static org.apache.cassandra.distributed.api.ConsistencyLevel.QUORUM;
-import static org.apache.cassandra.distributed.shared.AssertUtils.assertRows;
-import static org.apache.cassandra.distributed.shared.AssertUtils.row;
-
-public class MixedModeConsistencyTestBase extends UpgradeTestBase
-{
- protected static void testConsistency(Semver initial) throws Throwable
- {
- List<Tester> testers = new ArrayList<>();
- testers.addAll(Tester.create(1, ALL));
- testers.addAll(Tester.create(2, ALL, QUORUM));
- testers.addAll(Tester.create(3, ALL, QUORUM, ONE));
-
- new TestCase()
- .nodes(3)
- .nodesToUpgrade(1)
- .upgradesToCurrentFrom(initial)
- .withConfig(config -> config.set("read_request_timeout_in_ms",
SECONDS.toMillis(30))
- .set("write_request_timeout_in_ms",
SECONDS.toMillis(30)))
- .setup(cluster -> {
- Tester.createTable(cluster);
- for (Tester tester : testers)
- tester.writeRows(cluster);
- }).runAfterNodeUpgrade((cluster, node) -> {
- for (Tester tester : testers)
- tester.readRows(cluster);
- }).run();
- }
-
- private static class Tester
- {
- private final int numWrittenReplicas;
- private final ConsistencyLevel readConsistencyLevel;
- private final UUID partitionKey;
-
- private Tester(int numWrittenReplicas, ConsistencyLevel
readConsistencyLevel)
- {
- this.numWrittenReplicas = numWrittenReplicas;
- this.readConsistencyLevel = readConsistencyLevel;
- partitionKey = UUID.randomUUID();
- }
-
- private static List<Tester> create(int numWrittenReplicas,
ConsistencyLevel... readConsistencyLevels)
- {
- return Stream.of(readConsistencyLevels)
- .map(readConsistencyLevel -> new
Tester(numWrittenReplicas, readConsistencyLevel))
- .collect(Collectors.toList());
- }
-
- private static void createTable(UpgradeableCluster cluster)
- {
- cluster.schemaChange(withKeyspace("CREATE TABLE %s.t (k uuid, c
int, v int, PRIMARY KEY (k, c))"));
- }
-
- private void writeRows(UpgradeableCluster cluster)
- {
- String query = withKeyspace("INSERT INTO %s.t (k, c, v) VALUES (?,
?, ?)");
- for (int i = 1; i <= numWrittenReplicas; i++)
- {
- IUpgradeableInstance node = cluster.get(i);
- node.executeInternal(query, partitionKey, 1, 10);
- node.executeInternal(query, partitionKey, 2, 20);
- node.executeInternal(query, partitionKey, 3, 30);
- }
- }
-
- private void readRows(UpgradeableCluster cluster)
- {
- String query = withKeyspace("SELECT * FROM %s.t WHERE k = ?");
- int coordinator = 1;
- try
- {
- for (coordinator = 1; coordinator <= cluster.size();
coordinator++)
- {
- assertRows(cluster.coordinator(coordinator).execute(query,
readConsistencyLevel, partitionKey),
- row(partitionKey, 1, 10),
- row(partitionKey, 2, 20),
- row(partitionKey, 3, 30));
- }
- }
- catch (Throwable t)
- {
- String format = "Unexpected error reading rows with %d written
replicas, CL=%s and coordinator=%s";
- throw new AssertionError(format(format, numWrittenReplicas,
readConsistencyLevel, coordinator), t);
- }
- }
- }
-}
diff --git
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeConsistencyV30Test.java
b/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeConsistencyV30Test.java
index 2712a46040..5ee80151a6 100644
---
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeConsistencyV30Test.java
+++
b/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeConsistencyV30Test.java
@@ -18,16 +18,108 @@
package org.apache.cassandra.distributed.upgrade;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
import org.junit.Test;
-/**
- * {@link MixedModeConsistencyTestBase} for upgrades from v30.
- */
-public class MixedModeConsistencyV30Test extends MixedModeConsistencyTestBase
+import org.apache.cassandra.distributed.UpgradeableCluster;
+import org.apache.cassandra.distributed.api.ConsistencyLevel;
+import org.apache.cassandra.distributed.api.IUpgradeableInstance;
+
+import static java.lang.String.format;
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.apache.cassandra.distributed.api.ConsistencyLevel.ALL;
+import static org.apache.cassandra.distributed.api.ConsistencyLevel.ONE;
+import static org.apache.cassandra.distributed.api.ConsistencyLevel.QUORUM;
+import static org.apache.cassandra.distributed.shared.AssertUtils.assertRows;
+import static org.apache.cassandra.distributed.shared.AssertUtils.row;
+
+public class MixedModeConsistencyV30Test extends UpgradeTestBase
{
@Test
public void testConsistency() throws Throwable
{
- testConsistency(v30);
+ List<Tester> testers = new ArrayList<>();
+ testers.addAll(Tester.create(1, ALL));
+ testers.addAll(Tester.create(2, ALL, QUORUM));
+ testers.addAll(Tester.create(3, ALL, QUORUM, ONE));
+
+ new TestCase()
+ .nodes(3)
+ .nodesToUpgrade(1)
+ .upgradesToCurrentFrom(v30)
+ .withConfig(config -> config.set("read_request_timeout_in_ms",
SECONDS.toMillis(30))
+ .set("write_request_timeout_in_ms",
SECONDS.toMillis(30)))
+ .setup(cluster -> {
+ Tester.createTable(cluster);
+ for (Tester tester : testers)
+ tester.writeRows(cluster);
+ }).runAfterNodeUpgrade((cluster, node) -> {
+ for (Tester tester : testers)
+ tester.readRows(cluster);
+ }).run();
+ }
+
+ private static class Tester
+ {
+ private final int numWrittenReplicas;
+ private final ConsistencyLevel readConsistencyLevel;
+ private final UUID partitionKey;
+
+ private Tester(int numWrittenReplicas, ConsistencyLevel
readConsistencyLevel)
+ {
+ this.numWrittenReplicas = numWrittenReplicas;
+ this.readConsistencyLevel = readConsistencyLevel;
+ partitionKey = UUID.randomUUID();
+ }
+
+ private static List<Tester> create(int numWrittenReplicas,
ConsistencyLevel... readConsistencyLevels)
+ {
+ return Stream.of(readConsistencyLevels)
+ .map(readConsistencyLevel -> new
Tester(numWrittenReplicas, readConsistencyLevel))
+ .collect(Collectors.toList());
+ }
+
+ private static void createTable(UpgradeableCluster cluster)
+ {
+ cluster.schemaChange(withKeyspace("CREATE TABLE %s.t (k uuid, c
int, v int, PRIMARY KEY (k, c))"));
+ }
+
+ private void writeRows(UpgradeableCluster cluster)
+ {
+ String query = withKeyspace("INSERT INTO %s.t (k, c, v) VALUES (?,
?, ?)");
+ for (int i = 1; i <= numWrittenReplicas; i++)
+ {
+ IUpgradeableInstance node = cluster.get(i);
+ node.executeInternal(query, partitionKey, 1, 10);
+ node.executeInternal(query, partitionKey, 2, 20);
+ node.executeInternal(query, partitionKey, 3, 30);
+ }
+ }
+
+ private void readRows(UpgradeableCluster cluster)
+ {
+ String query = withKeyspace("SELECT * FROM %s.t WHERE k = ?");
+ int coordinator = 1;
+ try
+ {
+ for (coordinator = 1; coordinator <= cluster.size();
coordinator++)
+ {
+ assertRows(cluster.coordinator(coordinator).execute(query,
readConsistencyLevel, partitionKey),
+ row(partitionKey, 1, 10),
+ row(partitionKey, 2, 20),
+ row(partitionKey, 3, 30));
+ }
+ }
+ catch (Throwable t)
+ {
+ String format = "Unexpected error reading rows with %d written
replicas, CL=%s and coordinator=%s";
+ throw new AssertionError(format(format, numWrittenReplicas,
readConsistencyLevel, coordinator), t);
+ }
+ }
}
}
diff --git
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeConsistencyV3XTest.java
b/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeConsistencyV3XTest.java
deleted file mode 100644
index d39ea56039..0000000000
---
a/test/distributed/org/apache/cassandra/distributed/upgrade/MixedModeConsistencyV3XTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.cassandra.distributed.upgrade;
-
-import org.junit.Test;
-
-/**
- * {@link MixedModeConsistencyTestBase} for upgrades from v3X.
- */
-public class MixedModeConsistencyV3XTest extends MixedModeConsistencyTestBase
-{
- @Test
- public void testConsistency() throws Throwable
- {
- testConsistency(v3X);
- }
-}
diff --git
a/test/distributed/org/apache/cassandra/distributed/upgrade/UpgradeTestBase.java
b/test/distributed/org/apache/cassandra/distributed/upgrade/UpgradeTestBase.java
index e44ecc721a..3f8f4d47c8 100644
---
a/test/distributed/org/apache/cassandra/distributed/upgrade/UpgradeTestBase.java
+++
b/test/distributed/org/apache/cassandra/distributed/upgrade/UpgradeTestBase.java
@@ -176,26 +176,26 @@ public class UpgradeTestBase extends DistributedTestBase
return this;
}
- /** performs all supported upgrade paths that exist in between from
and end on CURRENT (inclusive)
+ /** performs all supported upgrade paths that exist in between
lowerBound and end on CURRENT (inclusive)
* {@code upgradesToCurrentFrom(3.0); // produces: 3.0 -> CURRENT,
3.11 -> CURRENT, …}
**/
- public TestCase upgradesToCurrentFrom(Semver from)
+ public TestCase upgradesToCurrentFrom(Semver lowerBound)
{
- return upgradesTo(from, CURRENT);
+ return upgradesTo(lowerBound, CURRENT);
}
/**
* performs all supported upgrade paths to the "to" target; example
* {@code upgradesTo(3.0, 4.0); // produces: 3.0 -> 4.0, 3.11 -> 4.0}
*/
- public TestCase upgradesTo(Semver from, Semver to)
+ public TestCase upgradesTo(Semver lowerBound, Semver to)
{
List<TestVersions> upgrade = new ArrayList<>();
NavigableSet<Semver> vertices =
sortedVertices(SUPPORTED_UPGRADE_PATHS);
- for (Semver start : vertices.subSet(from, true, to, false))
+ for (Semver start : vertices.subSet(lowerBound, true, to, false))
{
// only include pairs that are allowed, and start or end on
CURRENT
- if (SUPPORTED_UPGRADE_PATHS.hasEdge(start, to) &&
contains(start, to, CURRENT))
+ if (SUPPORTED_UPGRADE_PATHS.hasEdge(start, to) &&
edgeTouchesTarget(start, to, CURRENT))
upgrade.add(new TestVersions(versions.getLatest(start),
Collections.singletonList(versions.getLatest(to))));
}
logger.info("Adding upgrades of\n{}",
upgrade.stream().map(TestVersions::toString).collect(Collectors.joining("\n")));
@@ -207,14 +207,14 @@ public class UpgradeTestBase extends DistributedTestBase
* performs all supported upgrade paths from the "from" target; example
* {@code upgradesFrom(4.0, 4.2); // produces: 4.0 -> 4.1, 4.0 -> 4.2}
*/
- public TestCase upgradesFrom(Semver from, Semver to)
+ public TestCase upgradesFrom(Semver from, Semver upperBound)
{
List<TestVersions> upgrade = new ArrayList<>();
NavigableSet<Semver> vertices =
sortedVertices(SUPPORTED_UPGRADE_PATHS);
- for (Semver end : vertices.subSet(from, false, to, true))
+ for (Semver end : vertices.subSet(from, false, upperBound, true))
{
// only include pairs that are allowed, and start or end on
CURRENT
- if (SUPPORTED_UPGRADE_PATHS.hasEdge(from, end) &&
contains(from, end, CURRENT))
+ if (SUPPORTED_UPGRADE_PATHS.hasEdge(from, end) &&
edgeTouchesTarget(from, end, CURRENT))
upgrade.add(new TestVersions(versions.getLatest(from),
Collections.singletonList(versions.getLatest(end))));
}
logger.info("Adding upgrades of\n{}",
upgrade.stream().map(TestVersions::toString).collect(Collectors.joining("\n")));
@@ -226,20 +226,41 @@ public class UpgradeTestBase extends DistributedTestBase
* performs all supported upgrade paths that exist in between from and
to that include the current version.
* This call is equivalent to calling {@code upgradesTo(from,
CURRENT).upgradesFrom(CURRENT, to)}.
**/
- public TestCase upgrades(Semver from, Semver to)
+ public TestCase upgrades(Semver lowerBound, Semver upperBound)
{
- Assume.assumeTrue("Unable to do upgrades(" + from + ", " + to +
"); does not contain CURRENT=" + CURRENT, contains(from, to, CURRENT));
- if (from.compareTo(CURRENT) < 0)
- upgradesTo(from, CURRENT);
- if (CURRENT.compareTo(to) < 0)
- upgradesFrom(CURRENT, to);
+ Assume.assumeTrue("Unable to do any upgrades in bounds (" +
lowerBound + ", " + upperBound + "); does not cover CURRENT=" + CURRENT,
rangeCoversTarget(lowerBound, upperBound, CURRENT));
+ if (lowerBound.compareTo(CURRENT) < 0)
+ upgradesTo(lowerBound, CURRENT);
+ if (CURRENT.compareTo(upperBound) < 0)
+ upgradesFrom(CURRENT, upperBound);
return this;
}
- private static boolean contains(Semver from, Semver to, Semver target)
+ private static boolean rangeCoversTarget(Semver lowerBound, Semver
upperBound, Semver target)
{
// target >= from && target <= to
- return target.compareTo(from) >= 0 && target.compareTo(to) <= 0;
+ return target.isGreaterThanOrEqualTo(lowerBound) &&
target.isLowerThanOrEqualTo(upperBound);
+ }
+
+ /** returns true if the target version has the same major and minor as
either the from or the to version **/
+ private static boolean edgeTouchesTarget(Semver from, Semver to,
Semver target)
+ {
+ switch (from.diff(target))
+ {
+ default:
+ return true;
+ case MAJOR:
+ case MINOR:
+ // fall through
+ }
+ switch (to.diff(target))
+ {
+ default:
+ return true;
+ case MAJOR:
+ case MINOR:
+ return false;
+ }
}
/** Will test this specific upgrade path **/
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]