This is an automated email from the ASF dual-hosted git repository. ifesdjeen pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit 9db161f038bfc756614795dc8616bb85572b5eaa Author: Alex Petrov <oleksandr.pet...@gmail.com> AuthorDate: Thu Dec 7 19:13:19 2023 +0100 Fix ShortPaxosSimulationTest.simulationTest Patch by Alex Petrov, reviewed by Sam Tunnicliffe for CASSANDRA-19058 --- .../cassandra/config/CassandraRelevantProperties.java | 2 +- .../org/apache/cassandra/config/DatabaseDescriptor.java | 2 +- src/java/org/apache/cassandra/net/MessagingService.java | 15 ++++++++++++++- .../apache/cassandra/repair/messages/PrepareMessage.java | 8 +++++--- .../simulator}/AlwaysDeliverNetworkScheduler.java | 10 +++------- .../apache/cassandra/simulator/ClusterSimulation.java | 1 + .../cassandra/simulator}/FixedLossNetworkScheduler.java | 6 ++---- .../cassandra/simulator/RunnableActionScheduler.java | 2 +- .../cassandra/simulator/cluster/KeyspaceActions.java | 16 ++++++++-------- .../simulator/paxos/PaxosClusterSimulation.java | 1 + .../cassandra/simulator/test/HarrySimulatorTest.java | 10 ++++++++-- 11 files changed, 45 insertions(+), 28 deletions(-) diff --git a/src/java/org/apache/cassandra/config/CassandraRelevantProperties.java b/src/java/org/apache/cassandra/config/CassandraRelevantProperties.java index 2af142a92a..b7330956ff 100644 --- a/src/java/org/apache/cassandra/config/CassandraRelevantProperties.java +++ b/src/java/org/apache/cassandra/config/CassandraRelevantProperties.java @@ -320,7 +320,7 @@ public enum CassandraRelevantProperties * * This is a dev/CI only property. Do not use otherwise. */ - JUNIT_STORAGE_COMPATIBILITY_MODE("cassandra.junit_storage_compatibility_mode", StorageCompatibilityMode.CASSANDRA_4.toString()), + JUNIT_STORAGE_COMPATIBILITY_MODE("cassandra.junit_storage_compatibility_mode", StorageCompatibilityMode.NONE.toString()), /** startup checks properties */ LIBJEMALLOC("cassandra.libjemalloc"), /** Line separator ("\n" on UNIX). */ diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java index 4b0f036914..940fd2d733 100644 --- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java +++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java @@ -5023,7 +5023,7 @@ public class DatabaseDescriptor { // Config is null for junits that don't load the config. Get from env var that CI/build.xml sets if (conf == null) - return CassandraRelevantProperties.JUNIT_STORAGE_COMPATIBILITY_MODE.getEnum(StorageCompatibilityMode.CASSANDRA_4); + return CassandraRelevantProperties.JUNIT_STORAGE_COMPATIBILITY_MODE.getEnum(StorageCompatibilityMode.NONE); else return conf.storage_compatibility_mode; } diff --git a/src/java/org/apache/cassandra/net/MessagingService.java b/src/java/org/apache/cassandra/net/MessagingService.java index a0f40d3126..d8512103da 100644 --- a/src/java/org/apache/cassandra/net/MessagingService.java +++ b/src/java/org/apache/cassandra/net/MessagingService.java @@ -224,7 +224,20 @@ public class MessagingService extends MessagingServiceMBeanImpl implements Messa VERSION_50(13), VERSION_51(14); - public static final Version CURRENT = DatabaseDescriptor.getStorageCompatibilityMode().isBefore(5) ? VERSION_40 : VERSION_51; + public static final Version CURRENT; + + static + { + if (DatabaseDescriptor.getStorageCompatibilityMode().isBefore(5)) + { + logger.warn("Starting in storage compatibility mode " + DatabaseDescriptor.getStorageCompatibilityMode()); + CURRENT = VERSION_40; + } + else + { + CURRENT = VERSION_51; + } + } public final int value; diff --git a/src/java/org/apache/cassandra/repair/messages/PrepareMessage.java b/src/java/org/apache/cassandra/repair/messages/PrepareMessage.java index bf76190fc3..a2951ef304 100644 --- a/src/java/org/apache/cassandra/repair/messages/PrepareMessage.java +++ b/src/java/org/apache/cassandra/repair/messages/PrepareMessage.java @@ -89,13 +89,14 @@ public class PrepareMessage extends RepairMessage } private static final String MIXED_MODE_ERROR = "Some nodes involved in repair are on an incompatible major version. " + - "Repair is not supported in mixed major version clusters."; + "Repair is not supported in mixed major version clusters (%d vs %d)."; public static final IVersionedSerializer<PrepareMessage> serializer = new IVersionedSerializer<PrepareMessage>() { public void serialize(PrepareMessage message, DataOutputPlus out, int version) throws IOException { - Preconditions.checkArgument(version == MessagingService.current_version, MIXED_MODE_ERROR); + Preconditions.checkArgument(version == MessagingService.current_version, + String.format(MIXED_MODE_ERROR, version, MessagingService.current_version)); out.writeInt(message.tableIds.size()); for (TableId tableId : message.tableIds) @@ -115,7 +116,8 @@ public class PrepareMessage extends RepairMessage public PrepareMessage deserialize(DataInputPlus in, int version) throws IOException { - Preconditions.checkArgument(version == MessagingService.current_version, MIXED_MODE_ERROR); + Preconditions.checkArgument(version == MessagingService.current_version, + String.format(MIXED_MODE_ERROR, version, MessagingService.current_version)); int tableIdCount = in.readInt(); List<TableId> tableIds = new ArrayList<>(tableIdCount); diff --git a/test/simulator/test/org/apache/cassandra/simulator/test/AlwaysDeliverNetworkScheduler.java b/test/simulator/main/org/apache/cassandra/simulator/AlwaysDeliverNetworkScheduler.java similarity index 82% rename from test/simulator/test/org/apache/cassandra/simulator/test/AlwaysDeliverNetworkScheduler.java rename to test/simulator/main/org/apache/cassandra/simulator/AlwaysDeliverNetworkScheduler.java index 59b274c335..601f308194 100644 --- a/test/simulator/test/org/apache/cassandra/simulator/test/AlwaysDeliverNetworkScheduler.java +++ b/test/simulator/main/org/apache/cassandra/simulator/AlwaysDeliverNetworkScheduler.java @@ -16,12 +16,11 @@ * limitations under the License. */ -package org.apache.cassandra.simulator.test; +package org.apache.cassandra.simulator; import java.util.concurrent.TimeUnit; import org.apache.cassandra.simulator.FutureActionScheduler; -import org.apache.cassandra.simulator.RandomSource; import org.apache.cassandra.simulator.systems.SimulatedTime; import org.apache.cassandra.simulator.utils.LongRange; @@ -35,19 +34,16 @@ import static java.util.concurrent.TimeUnit.NANOSECONDS; public class AlwaysDeliverNetworkScheduler implements FutureActionScheduler { private final SimulatedTime time; - private final RandomSource randomSource; - private final LongRange schedulerDelay = new LongRange(0, 50, MICROSECONDS, NANOSECONDS); private final long delayNanos; - AlwaysDeliverNetworkScheduler(SimulatedTime time, RandomSource randomSource) + public AlwaysDeliverNetworkScheduler(SimulatedTime time, RandomSource randomSource) { this(time, randomSource, TimeUnit.MILLISECONDS.toNanos(10)); } - AlwaysDeliverNetworkScheduler(SimulatedTime time, RandomSource randomSource, long dealayNanos) + public AlwaysDeliverNetworkScheduler(SimulatedTime time, RandomSource randomSource, long dealayNanos) { this.time = time; - this.randomSource = randomSource; this.delayNanos = dealayNanos; } public Deliver shouldDeliver(int from, int to) diff --git a/test/simulator/main/org/apache/cassandra/simulator/ClusterSimulation.java b/test/simulator/main/org/apache/cassandra/simulator/ClusterSimulation.java index 7eb5618ba7..b775ae22a6 100644 --- a/test/simulator/main/org/apache/cassandra/simulator/ClusterSimulation.java +++ b/test/simulator/main/org/apache/cassandra/simulator/ClusterSimulation.java @@ -500,6 +500,7 @@ public class ClusterSimulation<S extends Simulation> implements AutoCloseable switch (Choices.random(random, kinds).choose(random)) { default: throw new AssertionError(); + case IMMEDIATE: return new RunnableActionScheduler.Immediate(); case SEQUENTIAL: return new RunnableActionScheduler.Sequential(); case UNIFORM: return new RunnableActionScheduler.RandomUniform(random); case RANDOM_WALK: return new RunnableActionScheduler.RandomWalk(random); diff --git a/test/simulator/test/org/apache/cassandra/simulator/test/FixedLossNetworkScheduler.java b/test/simulator/main/org/apache/cassandra/simulator/FixedLossNetworkScheduler.java similarity index 95% rename from test/simulator/test/org/apache/cassandra/simulator/test/FixedLossNetworkScheduler.java rename to test/simulator/main/org/apache/cassandra/simulator/FixedLossNetworkScheduler.java index d2f6a2eb02..923b691de8 100644 --- a/test/simulator/test/org/apache/cassandra/simulator/test/FixedLossNetworkScheduler.java +++ b/test/simulator/main/org/apache/cassandra/simulator/FixedLossNetworkScheduler.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.cassandra.simulator.test; +package org.apache.cassandra.simulator; import java.util.HashMap; import java.util.Map; @@ -26,8 +26,6 @@ import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.apache.cassandra.simulator.FutureActionScheduler; -import org.apache.cassandra.simulator.RandomSource; import org.apache.cassandra.simulator.systems.SimulatedTime; import org.apache.cassandra.simulator.utils.ChanceRange; import org.apache.cassandra.simulator.utils.KindOfSequence; @@ -53,7 +51,7 @@ public class FixedLossNetworkScheduler implements FutureActionScheduler final KindOfSequence.Decision delayChance; final LongRange delayNanos, longDelayNanos; - FixedLossNetworkScheduler(int nodes, RandomSource random, SimulatedTime time, KindOfSequence kind, float min, float max) + public FixedLossNetworkScheduler(int nodes, RandomSource random, SimulatedTime time, KindOfSequence kind, float min, float max) { this.random = random; this.time = time; diff --git a/test/simulator/main/org/apache/cassandra/simulator/RunnableActionScheduler.java b/test/simulator/main/org/apache/cassandra/simulator/RunnableActionScheduler.java index 95be9296fd..69efe3486b 100644 --- a/test/simulator/main/org/apache/cassandra/simulator/RunnableActionScheduler.java +++ b/test/simulator/main/org/apache/cassandra/simulator/RunnableActionScheduler.java @@ -26,7 +26,7 @@ import org.apache.cassandra.simulator.utils.KindOfSequence; public abstract class RunnableActionScheduler implements Consumer<Action> { - public enum Kind { RANDOM_WALK, UNIFORM, SEQUENTIAL } + public enum Kind { RANDOM_WALK, UNIFORM, SEQUENTIAL, IMMEDIATE } public static class Immediate extends RunnableActionScheduler { diff --git a/test/simulator/main/org/apache/cassandra/simulator/cluster/KeyspaceActions.java b/test/simulator/main/org/apache/cassandra/simulator/cluster/KeyspaceActions.java index 7d5699d5d3..7551d31bbf 100644 --- a/test/simulator/main/org/apache/cassandra/simulator/cluster/KeyspaceActions.java +++ b/test/simulator/main/org/apache/cassandra/simulator/cluster/KeyspaceActions.java @@ -183,7 +183,7 @@ public class KeyspaceActions extends ClusterActions })); } - private PlacementSimulator.ReplicatedRanges placements(NodesByDc nodesByDc, NodeLookup lookup, int[] rfs) + private PlacementSimulator.ReplicatedRanges placements(NodesByDc nodesByDc, int[] rfs) { List<PlacementSimulator.Node> nodes = new ArrayList<>(); for (int dcIdx = 0; dcIdx < nodesByDc.dcs.length; dcIdx++) @@ -262,10 +262,10 @@ public class KeyspaceActions extends ClusterActions case JOIN: { Topology before = topology; - PlacementSimulator.ReplicatedRanges placementsBefore = placements(joined, nodeLookup, currentRf); + PlacementSimulator.ReplicatedRanges placementsBefore = placements(joined, currentRf); int join = registered.removeRandom(random, dc); joined.add(join); - PlacementSimulator.ReplicatedRanges placementsAfter = placements(joined, nodeLookup, currentRf); + PlacementSimulator.ReplicatedRanges placementsAfter = placements(joined, currentRf); Topology during = recomputeTopology(placementsBefore, placementsAfter); updateTopology(during); Topology after = recomputeTopology(placementsAfter, placementsAfter); @@ -275,13 +275,13 @@ public class KeyspaceActions extends ClusterActions case REPLACE: { Topology before = topology; - PlacementSimulator.ReplicatedRanges placementsBefore = placements(joined, nodeLookup, currentRf); + PlacementSimulator.ReplicatedRanges placementsBefore = placements(joined, currentRf); int join = registered.removeRandom(random, dc); int leave = joined.selectRandom(random, dc); joined.add(join); joined.remove(leave); left.add(leave); - PlacementSimulator.ReplicatedRanges placementsAfter = placements(joined, nodeLookup, currentRf); + PlacementSimulator.ReplicatedRanges placementsAfter = placements(joined, currentRf); nodeLookup.setTokenOf(join, nodeLookup.tokenOf(leave)); Topology during = recomputeTopology(placementsBefore, placementsAfter); updateTopology(during); @@ -296,10 +296,10 @@ public class KeyspaceActions extends ClusterActions case LEAVE: { Topology before = topology; - PlacementSimulator.ReplicatedRanges placementsBefore = placements(joined, nodeLookup, currentRf); + PlacementSimulator.ReplicatedRanges placementsBefore = placements(joined, currentRf); int leave = joined.removeRandom(random, dc); left.add(leave); - PlacementSimulator.ReplicatedRanges placementsAfter = placements(joined, nodeLookup, currentRf); + PlacementSimulator.ReplicatedRanges placementsAfter = placements(joined, currentRf); Topology during = recomputeTopology(placementsBefore, placementsAfter); updateTopology(during); Topology after = recomputeTopology(placementsAfter, placementsAfter); @@ -375,7 +375,7 @@ public class KeyspaceActions extends ClusterActions private Topology recomputeTopology() { - PlacementSimulator.ReplicatedRanges ranges = placements(joined, nodeLookup, currentRf); + PlacementSimulator.ReplicatedRanges ranges = placements(joined, currentRf); return recomputeTopology(ranges, ranges); } diff --git a/test/simulator/main/org/apache/cassandra/simulator/paxos/PaxosClusterSimulation.java b/test/simulator/main/org/apache/cassandra/simulator/paxos/PaxosClusterSimulation.java index 0fd9135f5b..03d7e61e7f 100644 --- a/test/simulator/main/org/apache/cassandra/simulator/paxos/PaxosClusterSimulation.java +++ b/test/simulator/main/org/apache/cassandra/simulator/paxos/PaxosClusterSimulation.java @@ -75,6 +75,7 @@ class PaxosClusterSimulation extends ClusterSimulation<PaxosSimulation> implemen { super(random, seed, uniqueNum, builder, config -> config.set("paxos_variant", builder.initialPaxosVariant.name()) + .set("storage_compatibility_mode", "NONE") .set("paxos_cache_size", (builder.stateCache != null ? builder.stateCache : random.uniformFloat() < 0.5) ? null : "0MiB") .set("paxos_state_purging", "repaired") .set("paxos_on_linearizability_violations", "log") diff --git a/test/simulator/test/org/apache/cassandra/simulator/test/HarrySimulatorTest.java b/test/simulator/test/org/apache/cassandra/simulator/test/HarrySimulatorTest.java index 80d39a51a6..d138b96f1c 100644 --- a/test/simulator/test/org/apache/cassandra/simulator/test/HarrySimulatorTest.java +++ b/test/simulator/test/org/apache/cassandra/simulator/test/HarrySimulatorTest.java @@ -71,8 +71,10 @@ import org.apache.cassandra.simulator.Action; import org.apache.cassandra.simulator.ActionList; import org.apache.cassandra.simulator.ActionSchedule; import org.apache.cassandra.simulator.Actions; +import org.apache.cassandra.simulator.AlwaysDeliverNetworkScheduler; import org.apache.cassandra.simulator.ClusterSimulation; import org.apache.cassandra.simulator.Debug; +import org.apache.cassandra.simulator.FixedLossNetworkScheduler; import org.apache.cassandra.simulator.FutureActionScheduler; import org.apache.cassandra.simulator.OrderOn; import org.apache.cassandra.simulator.RandomSource; @@ -394,6 +396,11 @@ public class HarrySimulatorTest this.schedule = schedule; } + public HarrySimulation withScheduler(RunnableActionScheduler scheduler) + { + return new HarrySimulation(simulated, scheduler, cluster, harryRun, (ignore) -> nodeState, schedule); + } + public HarrySimulation withSchedulers(Function<HarrySimulation, Map<Verb, FutureActionScheduler>> schedulers) { Map<Verb, FutureActionScheduler> perVerbFutureActionScheduler = schedulers.apply(this); @@ -523,7 +530,7 @@ public class HarrySimulatorTest { HarrySimulation current = simulation; if (i == 0) - current = current.withSchedulers((s) -> Collections.emptyMap()); + current = current.withScheduler(new RunnableActionScheduler.Immediate()).withSchedulers((s) -> Collections.emptyMap()); current.withSchedule(phases[i]).run(); } } @@ -534,7 +541,6 @@ public class HarrySimulatorTest } } } - ; } /** --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org