diff --git a/test/simulator/main/org/apache/cassandra/simulator/paxos/PairOfSequencesAccordSimulation.java b/test/simulator/main/org/apache/cassandra/simulator/paxos/PairOfSequencesAccordSimulation.java index f829da06c6..3bb911b41d 100644 --- a/test/simulator/main/org/apache/cassandra/simulator/paxos/PairOfSequencesAccordSimulation.java +++ b/test/simulator/main/org/apache/cassandra/simulator/paxos/PairOfSequencesAccordSimulation.java @@ -19,11 +19,9 @@ package org.apache.cassandra.simulator.paxos; import java.nio.ByteBuffer; -import java.nio.channels.ClosedChannelException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.concurrent.CancellationException; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.BiFunction; import java.util.function.LongSupplier; @@ -35,8 +33,6 @@ import javax.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import accord.coordinate.CoordinationFailed; -import accord.coordinate.Invalidated; import com.carrotsearch.hppc.IntArrayList; import com.carrotsearch.hppc.IntHashSet; import com.carrotsearch.hppc.cursors.IntCursor; @@ -52,7 +48,6 @@ import org.apache.cassandra.distributed.api.IInvokableInstance; import org.apache.cassandra.distributed.api.QueryResults; import org.apache.cassandra.distributed.api.SimpleQueryResult; import org.apache.cassandra.distributed.impl.Query; -import org.apache.cassandra.exceptions.RequestExecutionException; import org.apache.cassandra.schema.ColumnMetadata; import org.apache.cassandra.schema.TableMetadata; import org.apache.cassandra.service.consensus.TransactionalMode; @@ -62,7 +57,6 @@ import org.apache.cassandra.simulator.RunnableActionScheduler; import org.apache.cassandra.simulator.cluster.ClusterActions; import org.apache.cassandra.simulator.systems.SimulatedSystems; import org.apache.cassandra.simulator.utils.IntRange; -import org.apache.cassandra.streaming.StreamReceivedOutOfTokenRangeException; import static org.apache.cassandra.simulator.paxos.HistoryChecker.fail; @@ -159,13 +153,7 @@ public class PairOfSequencesAccordSimulation extends AbstractPairOfSequencesPaxo @Override protected Class[] expectedExceptions() { - return (Class[]) new Class[] { CancellationException.class, - CoordinationFailed.class, - ClosedChannelException.class, - Invalidated.class, - RequestExecutionException.class, - StreamReceivedOutOfTokenRangeException.class // should always come in combination with closed channel exception - }; + return expectedExceptionsAccord(); } @Override diff --git a/test/simulator/main/org/apache/cassandra/simulator/paxos/PairOfSequencesPaxosSimulation.java b/test/simulator/main/org/apache/cassandra/simulator/paxos/PairOfSequencesPaxosSimulation.java index 8592ff23b5..fbda896451 100644 --- a/test/simulator/main/org/apache/cassandra/simulator/paxos/PairOfSequencesPaxosSimulation.java +++ b/test/simulator/main/org/apache/cassandra/simulator/paxos/PairOfSequencesPaxosSimulation.java @@ -280,6 +280,20 @@ public class PairOfSequencesPaxosSimulation extends AbstractPairOfSequencesPaxos return new ModifyingOperation(operationId, instance, ANY, serialConsistency, primaryKey, historyChecker); } + @Override + protected Class[] expectedExceptions() + { + return maybeAccord() ? expectedExceptionsAccord() : expectedExceptionsPaxos(); + } + + private boolean maybeAccord() + { + // at startup are we accord? + if (transactionalMode != null && transactionalMode.accordIsEnabled) return true; + // do we migrate to accord? + return clusterOptions.consensusChangeLimit > 0; + } + @Override void log(@Nullable Integer primaryKey) { diff --git a/test/simulator/main/org/apache/cassandra/simulator/paxos/PaxosSimulation.java b/test/simulator/main/org/apache/cassandra/simulator/paxos/PaxosSimulation.java index 774c44a3a0..299e702a49 100644 --- a/test/simulator/main/org/apache/cassandra/simulator/paxos/PaxosSimulation.java +++ b/test/simulator/main/org/apache/cassandra/simulator/paxos/PaxosSimulation.java @@ -18,6 +18,7 @@ package org.apache.cassandra.simulator.paxos; +import java.nio.channels.ClosedChannelException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -37,7 +38,7 @@ import com.google.common.base.Throwables; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import accord.coordinate.Invalidated; +import accord.coordinate.CoordinationFailed; import org.apache.cassandra.concurrent.ExecutorFactory; import org.apache.cassandra.concurrent.ScheduledExecutorPlus; import org.apache.cassandra.distributed.Cluster; @@ -55,6 +56,7 @@ import org.apache.cassandra.simulator.cluster.ClusterActionListener; import org.apache.cassandra.simulator.systems.InterceptorOfGlobalMethods; import org.apache.cassandra.simulator.systems.SimulatedActionCallable; import org.apache.cassandra.simulator.systems.SimulatedSystems; +import org.apache.cassandra.streaming.StreamReceivedOutOfTokenRangeException; import org.apache.cassandra.utils.AssertionUtils; import org.apache.cassandra.utils.CloseableIterator; import org.apache.cassandra.utils.concurrent.Threads; @@ -74,17 +76,29 @@ public abstract class PaxosSimulation implements Simulation, ClusterActionListen private static String createDescription(int[] primaryKeys, int id, String idString) { - return (primaryKeys.length == 1 ? Integer.toString(primaryKeys[0]) : Arrays.toString(primaryKeys)) + "/" + id + ": " + idString; + return (primaryKeys.length == 1 ? Integer.toString(primaryKeys[0]) : Arrays.toString(primaryKeys)) + '/' + id + ": " + idString; } @SuppressWarnings("unchecked") - protected Class[] expectedExceptions() + protected Class[] expectedExceptionsPaxos() { return (Class[]) new Class[] { RequestExecutionException.class, - Invalidated.class, CancellationException.class }; } + @SuppressWarnings("unchecked") + protected Class[] expectedExceptionsAccord() + { + return (Class[]) new Class[] { RequestExecutionException.class, + CancellationException.class, + CoordinationFailed.class, + ClosedChannelException.class, + StreamReceivedOutOfTokenRangeException.class // should always come in combination with closed channel exception + }; + } + + protected abstract Class[] expectedExceptions(); + abstract class Operation extends SimulatedActionCallable implements BiConsumer { final int[] primaryKeys;