This is an automated email from the ASF dual-hosted git repository. dcapwell pushed a commit to branch cep-15-accord in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/cep-15-accord by this push: new ea01634739 CEP-15: (Accord) Migrate Accord away from JDK random to a new interface RandomSource ea01634739 is described below commit ea01634739ef09ceef567259637d07095447b28c Author: David Capwell <dcapw...@apache.org> AuthorDate: Thu Mar 9 18:05:20 2023 -0800 CEP-15: (Accord) Migrate Accord away from JDK random to a new interface RandomSource patch by David Capwell; reviewed by Blake Eggleston for CASSANDRA-18213 --- modules/accord | 2 +- .../cassandra/service/accord/AccordService.java | 4 ++-- .../service/accord/async/AsyncOperationTest.java | 5 +++-- .../serializers/CommandsForKeySerializerTest.java | 3 ++- .../apache/cassandra/utils/AccordGenerators.java | 26 ++-------------------- 5 files changed, 10 insertions(+), 30 deletions(-) diff --git a/modules/accord b/modules/accord index f607a05b76..bc81f81c75 160000 --- a/modules/accord +++ b/modules/accord @@ -1 +1 @@ -Subproject commit f607a05b76df32b39c97a6e49068ae35057be98a +Subproject commit bc81f81c75f93c73989a30bbc51b5c241a893c1a diff --git a/src/java/org/apache/cassandra/service/accord/AccordService.java b/src/java/org/apache/cassandra/service/accord/AccordService.java index 7e68da36b0..a86cb70c53 100644 --- a/src/java/org/apache/cassandra/service/accord/AccordService.java +++ b/src/java/org/apache/cassandra/service/accord/AccordService.java @@ -19,7 +19,6 @@ package org.apache.cassandra.service.accord; import java.util.Arrays; -import java.util.Random; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -40,6 +39,7 @@ import accord.messages.Request; import accord.primitives.Txn; import accord.primitives.TxnId; import accord.topology.TopologyManager; +import accord.utils.DefaultRandom; import accord.utils.async.AsyncChains; import org.apache.cassandra.concurrent.Shutdownable; import accord.utils.async.AsyncResult; @@ -144,7 +144,7 @@ public class AccordService implements IAccordService, Shutdownable () -> null, new KeyspaceSplitter(new EvenSplit<>(getConcurrentAccordOps(), getPartitioner().accordSplitter())), new AccordAgent(), - new Random(), + new DefaultRandom(), scheduler, SizeOfIntersectionSorter.SUPPLIER, SimpleProgressLog::new, diff --git a/test/unit/org/apache/cassandra/service/accord/async/AsyncOperationTest.java b/test/unit/org/apache/cassandra/service/accord/async/AsyncOperationTest.java index c51afa6412..b76793aaf7 100644 --- a/test/unit/org/apache/cassandra/service/accord/async/AsyncOperationTest.java +++ b/test/unit/org/apache/cassandra/service/accord/async/AsyncOperationTest.java @@ -62,6 +62,7 @@ import accord.primitives.TxnId; import accord.primitives.Writes; import accord.utils.Gen; import accord.utils.Gens; +import accord.utils.RandomSource; import accord.utils.async.AsyncChains; import accord.utils.async.AsyncResult; import org.apache.cassandra.SchemaLoader; @@ -481,7 +482,7 @@ public class AsyncOperationTest }); } - private static void createCommand(AccordCommandStore commandStore, Gen.Random rs, List<TxnId> ids) + private static void createCommand(AccordCommandStore commandStore, RandomSource rs, List<TxnId> ids) { // to simulate CommandsForKey not being found, use createCommittedAndPersist periodically as it does not update if (rs.nextBoolean()) ids.forEach(id -> createCommittedAndPersist(commandStore, id)); @@ -489,7 +490,7 @@ public class AsyncOperationTest commandStore.clearCache(); } - private static Map<TxnId, Boolean> selectFailedTxn(Gen.Random rs, List<TxnId> ids) + private static Map<TxnId, Boolean> selectFailedTxn(RandomSource rs, List<TxnId> ids) { Map<TxnId, Boolean> failed = Maps.newHashMapWithExpectedSize(ids.size()); for (TxnId id : ids) diff --git a/test/unit/org/apache/cassandra/service/accord/serializers/CommandsForKeySerializerTest.java b/test/unit/org/apache/cassandra/service/accord/serializers/CommandsForKeySerializerTest.java index 1cc800f5dc..547b03c10c 100644 --- a/test/unit/org/apache/cassandra/service/accord/serializers/CommandsForKeySerializerTest.java +++ b/test/unit/org/apache/cassandra/service/accord/serializers/CommandsForKeySerializerTest.java @@ -26,6 +26,7 @@ import org.junit.Test; import accord.impl.CommandsForKey; import accord.primitives.TxnId; +import accord.utils.AccordGens; import accord.utils.Gens; import org.apache.cassandra.SchemaLoader; import org.apache.cassandra.io.util.DataInputBuffer; @@ -56,7 +57,7 @@ public class CommandsForKeySerializerTest { DataOutputBuffer buffer = new DataOutputBuffer(); int version = MessagingService.Version.VERSION_40.value; - qt().forAll(Gens.lists(AccordGenerators.ids()).ofSizeBetween(0, 10)).check(ids -> { + qt().forAll(Gens.lists(AccordGens.txnIds()).ofSizeBetween(0, 10)).check(ids -> { buffer.clear(); long expectedSize = CommandsForKeySerializer.depsIdSerializer.serializedSize(ids, version); diff --git a/test/unit/org/apache/cassandra/utils/AccordGenerators.java b/test/unit/org/apache/cassandra/utils/AccordGenerators.java index e85b6e3a51..af5198538e 100644 --- a/test/unit/org/apache/cassandra/utils/AccordGenerators.java +++ b/test/unit/org/apache/cassandra/utils/AccordGenerators.java @@ -18,48 +18,26 @@ package org.apache.cassandra.utils; -import java.util.function.ToIntFunction; -import java.util.function.ToLongFunction; - import accord.local.Command; -import accord.local.Node; import accord.primitives.PartialTxn; -import accord.primitives.Routable; import accord.primitives.Timestamp; -import accord.primitives.Txn; import accord.primitives.TxnId; import accord.utils.Gen; import accord.utils.Gens; import org.apache.cassandra.service.accord.AccordTestUtils; +import static accord.utils.AccordGens.txnIds; import static org.apache.cassandra.service.accord.AccordTestUtils.createPartialTxn; public class AccordGenerators { private AccordGenerators() {} - public static Gen.LongGen epochs() - { - return Gens.longs().between(0, Timestamp.MAX_EPOCH); - } - - public static Gen<TxnId> ids() - { - return ids(epochs()::nextLong, Gen.Random::nextLong, Gen.Random::nextInt); - } - - public static Gen<TxnId> ids(ToLongFunction<Gen.Random> epochs, ToLongFunction<Gen.Random> hlcs, ToIntFunction<Gen.Random> nodes) - { - Gen<Txn.Kind> kinds = Gens.enums().all(Txn.Kind.class); - Gen<Routable.Domain> domains = Gens.enums().all(Routable.Domain.class); - return rs -> new TxnId(epochs.applyAsLong(rs), hlcs.applyAsLong(rs), kinds.next(rs), domains.next(rs), new Node.Id(nodes.applyAsInt(rs))); - } - private enum SupportedCommandTypes { notWitnessed, preaccepted, committed } public static Gen<Command> commands() { - Gen<TxnId> ids = ids(); + Gen<TxnId> ids = txnIds(); //TODO switch to Status once all types are supported Gen<SupportedCommandTypes> supportedTypes = Gens.enums().all(SupportedCommandTypes.class); //TODO goes against fuzz testing, and also limits to a very specific table existing... --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org