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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]