(cassandra) branch cep-15-accord updated: IndexOutOfBoundsException while serializing CommandsForKey

2024-05-17 Thread dcapwell
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 34232d7bd4 IndexOutOfBoundsException while serializing CommandsForKey
34232d7bd4 is described below

commit 34232d7bd45761a1c14c7e91d2f8e5ae183bc8e3
Author: David Capwell 
AuthorDate: Fri May 17 13:50:01 2024 -0700

IndexOutOfBoundsException while serializing CommandsForKey

patch by David Capwell; reviewed by Blake Eggleston for CASSANDRA-19642
---
 modules/accord |  2 +-
 .../serializers/CommandsForKeySerializer.java  | 29 ++
 .../serializers/CommandsForKeySerializerTest.java  | 35 --
 3 files changed, 50 insertions(+), 16 deletions(-)

diff --git a/modules/accord b/modules/accord
index d63d06aafe..21cdaf5d28 16
--- a/modules/accord
+++ b/modules/accord
@@ -1 +1 @@
-Subproject commit d63d06aafe2e60e57a9651ff6dd491175bbe6916
+Subproject commit 21cdaf5d280965cfdc690d385375635b498bc9f9
diff --git 
a/src/java/org/apache/cassandra/service/accord/serializers/CommandsForKeySerializer.java
 
b/src/java/org/apache/cassandra/service/accord/serializers/CommandsForKeySerializer.java
index dbe2f4845f..a81b62b4a3 100644
--- 
a/src/java/org/apache/cassandra/service/accord/serializers/CommandsForKeySerializer.java
+++ 
b/src/java/org/apache/cassandra/service/accord/serializers/CommandsForKeySerializer.java
@@ -385,15 +385,18 @@ public class CommandsForKeySerializer
 VIntCoding.writeUnsignedVInt32(unmanagedPendingCommitCount, out);
 VIntCoding.writeUnsignedVInt32(cfk.unmanagedCount() - 
unmanagedPendingCommitCount, out);
 Unmanaged.Pending pending = unmanagedPendingCommitCount == 0 ? 
Unmanaged.Pending.APPLY : Unmanaged.Pending.COMMIT;
-for (int i = 0 ; i < cfk.unmanagedCount() ; ++i)
 {
-Unmanaged unmanaged = cfk.getUnmanaged(i);
-Invariants.checkState(unmanaged.pending == pending);
-CommandSerializers.txnId.serialize(unmanaged.txnId, out, 
ByteBufferAccessor.instance, out.position());
-out.position(out.position() + 
CommandSerializers.txnId.serializedSize());
-CommandSerializers.timestamp.serialize(unmanaged.waitingUntil, 
out, ByteBufferAccessor.instance, out.position());
-out.position(out.position() + 
CommandSerializers.timestamp.serializedSize());
-if (--unmanagedPendingCommitCount == 0) pending = 
Unmanaged.Pending.APPLY;
+int offset = 0;
+for (int i = 0 ; i < cfk.unmanagedCount() ; ++i)
+{
+Unmanaged unmanaged = cfk.getUnmanaged(i);
+Invariants.checkState(unmanaged.pending == pending);
+
+offset += 
CommandSerializers.txnId.serialize(unmanaged.txnId, out, 
ByteBufferAccessor.instance, offset);
+offset += 
CommandSerializers.timestamp.serialize(unmanaged.waitingUntil, out, 
ByteBufferAccessor.instance, offset);
+if (--unmanagedPendingCommitCount == 0) pending = 
Unmanaged.Pending.APPLY;
+}
+out.position(out.position() + offset);
 }
 
 if ((executeAtCount | missingIdCount) > 0)
@@ -610,15 +613,17 @@ public class CommandsForKeySerializer
 {
 unmanageds = new Unmanaged[unmanagedCount];
 Unmanaged.Pending pending = unmanagedPendingCommitCount == 0 ? 
Unmanaged.Pending.APPLY : Unmanaged.Pending.COMMIT;
+int offset = 0;
 for (int i = 0 ; i < unmanagedCount ; ++i)
 {
-TxnId txnId = CommandSerializers.txnId.deserialize(in, 
ByteBufferAccessor.instance, in.position());
-in.position(in.position() + 
CommandSerializers.txnId.serializedSize());
-Timestamp waitingUntil = 
CommandSerializers.timestamp.deserialize(in, ByteBufferAccessor.instance, 
in.position());
-in.position(in.position() + 
CommandSerializers.timestamp.serializedSize());
+TxnId txnId = CommandSerializers.txnId.deserialize(in, 
ByteBufferAccessor.instance, offset);
+offset += CommandSerializers.txnId.serializedSize();
+Timestamp waitingUntil = 
CommandSerializers.timestamp.deserialize(in, ByteBufferAccessor.instance, 
offset);
+offset += CommandSerializers.timestamp.serializedSize();
 unmanageds[i] = new Unmanaged(pending, txnId, waitingUntil);
 if (--unmanagedPendingCommitCount == 0) pending = 
Unmanaged.Pending.APPLY;
 }
+in.position(in.position() + offset);
 }
 
 if (executeAtMasks + missingDepsMasks > 0)
diff --git 
a/test/unit/org/apache/cassandra

(cassandra-accord) branch trunk updated: IndexOutOfBoundsException while serializing CommandsForKey (#90)

2024-05-17 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new 21cdaf5d IndexOutOfBoundsException while serializing CommandsForKey 
(#90)
21cdaf5d is described below

commit 21cdaf5d280965cfdc690d385375635b498bc9f9
Author: dcapwell 
AuthorDate: Fri May 17 15:16:45 2024 -0700

IndexOutOfBoundsException while serializing CommandsForKey (#90)

patch by David Capwell; reviewed by Blake Eggleston for CASSANDRA-19642
---
 .../src/main/java/accord/local/CommandsForKey.java | 18 +++-
 .../accord/impl/basic/DelayedCommandStores.java| 25 +++---
 2 files changed, 25 insertions(+), 18 deletions(-)

diff --git a/accord-core/src/main/java/accord/local/CommandsForKey.java 
b/accord-core/src/main/java/accord/local/CommandsForKey.java
index cba170c9..cc44f242 100644
--- a/accord-core/src/main/java/accord/local/CommandsForKey.java
+++ b/accord-core/src/main/java/accord/local/CommandsForKey.java
@@ -161,6 +161,21 @@ public class CommandsForKey implements CommandsSummary
 return c;
 }
 
+@Override
+public boolean equals(Object o)
+{
+if (this == o) return true;
+if (o == null || getClass() != o.getClass()) return false;
+Unmanaged unmanaged = (Unmanaged) o;
+return pending == unmanaged.pending && 
waitingUntil.equals(unmanaged.waitingUntil) && txnId.equals(unmanaged.txnId);
+}
+
+@Override
+public int hashCode()
+{
+return Objects.hash(pending, waitingUntil, txnId);
+}
+
 @Override
 public String toString()
 {
@@ -1699,7 +1714,8 @@ public class CommandsForKey implements CommandsSummary
 if (o == null || getClass() != o.getClass()) return false;
 CommandsForKey that = (CommandsForKey) o;
 return Objects.equals(key, that.key)
-   && Arrays.equals(txns, that.txns);
+   && Arrays.equals(txns, that.txns)
+   && Arrays.equals(unmanageds, that.unmanageds);
 }
 
 @Override
diff --git 
a/accord-core/src/test/java/accord/impl/basic/DelayedCommandStores.java 
b/accord-core/src/test/java/accord/impl/basic/DelayedCommandStores.java
index ea97c5e0..17e18b81 100644
--- a/accord-core/src/test/java/accord/impl/basic/DelayedCommandStores.java
+++ b/accord-core/src/test/java/accord/impl/basic/DelayedCommandStores.java
@@ -48,7 +48,6 @@ import accord.local.PreLoadContext;
 import accord.local.SafeCommandStore;
 import accord.local.SerializerSupport;
 import accord.local.ShardDistributor;
-import accord.messages.Message;
 import accord.primitives.Range;
 import accord.primitives.RoutableKey;
 import accord.primitives.Txn;
@@ -266,22 +265,14 @@ public class DelayedCommandStores extends 
InMemoryCommandStores.SingleThread
 @Override
 public void postExecute()
 {
-if (context instanceof Message)
-{
-Message m = (Message) context;
-if (m.type() != null && !m.type().hasSideEffects())
-{
-// double check there are no modifications
-commands.entrySet().forEach(e -> {
-InMemorySafeCommand safe = e.getValue();
-if (!safe.isModified()) return;
-commandStore.validateRead(safe.current());
-Command original = safe.original();
-if (original != null)
-commandStore.validateRead(original);
-});
-}
-}
+commands.entrySet().forEach(e -> {
+InMemorySafeCommand safe = e.getValue();
+if (!safe.isModified()) return;
+commandStore.validateRead(safe.current());
+Command original = safe.original();
+if (original != null)
+commandStore.validateRead(original);
+});
 }
 }
 }


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) branch cep-15-accord updated: Accord: Need to simulate Cassandra Journal in Accord BurnTest to detect issues earlier before they are seen in Cassandra

2024-05-15 Thread dcapwell
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 ff755a191b Accord: Need to simulate Cassandra Journal in Accord 
BurnTest to detect issues earlier before they are seen in Cassandra
ff755a191b is described below

commit ff755a191b3650c99d98a978de894561177b831f
Author: David Capwell 
AuthorDate: Fri May 3 12:57:46 2024 -0700

Accord: Need to simulate Cassandra Journal in Accord BurnTest to detect 
issues earlier before they are seen in Cassandra

patch by Benedict Elliott Smith, David Capwell; reviewed by Benedict 
Elliott Smith, David Capwell for CASSANDRA-19618
---
 .gitmodules|   2 +-
 modules/accord |   2 +-
 .../org/apache/cassandra/config/AccordSpec.java|  60 ++
 .../cassandra/config/DatabaseDescriptor.java   |   5 +
 src/java/org/apache/cassandra/net/Verb.java|   8 +-
 .../cassandra/service/accord/AccordJournal.java| 124 +++-
 .../cassandra/service/accord/AccordKeyspace.java   |  12 +-
 .../cassandra/service/accord/AccordService.java|   7 +-
 .../service/accord/async/AsyncOperation.java   |   4 +-
 .../service/accord/async/ExecutionOrder.java   | 127 +++--
 .../migration/ConsensusRequestRouter.java  |   2 +-
 .../test/AccordJournalSimulationTest.java  |   3 +-
 .../config/DatabaseDescriptorRefTest.java  |   4 +
 .../compaction/CompactionAccordIteratorsTest.java  |   8 +-
 .../cassandra/service/accord/AccordTestUtils.java  |   3 +-
 .../cassandra/service/accord/MockJournal.java  |  28 +++
 .../accord/SimulatedAccordCommandStore.java|  13 +-
 .../accord/async/SimulatedAsyncOperationTest.java  | 207 +
 18 files changed, 497 insertions(+), 122 deletions(-)

diff --git a/.gitmodules b/.gitmodules
index 60a9510e7a..616dacf610 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,4 +1,4 @@
 [submodule "modules/accord"]
path = modules/accord
-   url = ../cassandra-accord.git
+   url = https://github.com/apache/cassandra-accord.git
branch = trunk
diff --git a/modules/accord b/modules/accord
index 202e673583..256b35e27d 16
--- a/modules/accord
+++ b/modules/accord
@@ -1 +1 @@
-Subproject commit 202e67358396a1e413e29498bea71047bd586d06
+Subproject commit 256b35e27d170db9fcd8024d5678b4f6e9d3a956
diff --git a/src/java/org/apache/cassandra/config/AccordSpec.java 
b/src/java/org/apache/cassandra/config/AccordSpec.java
index d6fb1a5011..b035b0b9b5 100644
--- a/src/java/org/apache/cassandra/config/AccordSpec.java
+++ b/src/java/org/apache/cassandra/config/AccordSpec.java
@@ -18,6 +18,8 @@
 
 package org.apache.cassandra.config;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.apache.cassandra.journal.Params;
 import org.apache.cassandra.service.consensus.TransactionalMode;
 
 public class AccordSpec
@@ -71,4 +73,62 @@ public class AccordSpec
 public TransactionalMode default_transactional_mode = 
TransactionalMode.off;
 public boolean ephemeralReadEnabled = false;
 public boolean state_cache_listener_jfr_enabled = true;
+public final JournalSpec journal = new JournalSpec();
+
+public static class JournalSpec implements Params
+{
+public int segmentSize = 32 << 20;
+public FailurePolicy failurePolicy = FailurePolicy.STOP;
+public FlushMode flushMode = FlushMode.BATCH;
+public DurationSpec.IntMillisecondsBound flushPeriod; // pulls default 
from 'commitlog_sync_period'
+public DurationSpec.IntMillisecondsBound periodicFlushLagBlock = new 
DurationSpec.IntMillisecondsBound("1500ms");
+
+@Override
+public int segmentSize()
+{
+return segmentSize;
+}
+
+@Override
+public FailurePolicy failurePolicy()
+{
+return failurePolicy;
+}
+
+@Override
+public FlushMode flushMode()
+{
+return flushMode;
+}
+
+@JsonIgnore
+@Override
+public int flushPeriodMillis()
+{
+return flushPeriod == null ? 
DatabaseDescriptor.getCommitLogSyncPeriod()
+   : flushPeriod.toMilliseconds();
+}
+
+@JsonIgnore
+@Override
+public int periodicFlushLagBlock()
+{
+return periodicFlushLagBlock.toMilliseconds();
+}
+
+/**
+ * This is required by the journal, but we don't have multiple 
versions, so block it from showing up, so we don't need to worry about 
maintaining it
+ */
+@JsonIgnore
+@Override
+public int userVersion()
+{
+/*
+ * NOTE: when accord journal version 

(cassandra-accord) branch trunk updated: Need to simulate Cassandra Journal in Accord BurnTest to detect issues earlier before they are seen in Cassandra (#87)

2024-05-15 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new 256b35e2 Need to simulate Cassandra Journal in Accord BurnTest to 
detect issues earlier before they are seen in Cassandra (#87)
256b35e2 is described below

commit 256b35e27d170db9fcd8024d5678b4f6e9d3a956
Author: dcapwell 
AuthorDate: Wed May 15 09:16:01 2024 -0700

Need to simulate Cassandra Journal in Accord BurnTest to detect issues 
earlier before they are seen in Cassandra (#87)

patch by Benedict Elliott Smith, David Capwell; reviewed by Benedict 
Elliott Smith, David Capwell for CASSANDRA-19618
---
 .../coordinate/AbstractCoordinatePreAccept.java|   8 +-
 .../accord/coordinate/CoordinatePreAccept.java |   2 +-
 .../accord/coordinate/CoordinationAdapter.java |   5 +
 .../java/accord/impl/InMemoryCommandStore.java |  26 +-
 .../main/java/accord/impl/InMemorySafeCommand.java |  28 ++
 .../src/main/java/accord/local/Bootstrap.java  |   5 +-
 .../src/main/java/accord/local/Command.java|  32 +-
 .../src/main/java/accord/local/CommandStore.java   |   6 +
 .../src/main/java/accord/local/CommandsForKey.java |   5 +-
 .../main/java/accord/local/CommonAttributes.java   |   6 +
 .../main/java/accord/local/SafeCommandStore.java   |   2 +-
 .../main/java/accord/local/SerializerSupport.java  | 166 ++--
 .../src/main/java/accord/messages/Propagate.java   |   1 +
 .../src/main/java/accord/primitives/Routables.java |   6 +
 .../src/main/java/accord/utils/Invariants.java |   5 +
 .../src/test/java/accord/burn/BurnTest.java|  50 ++-
 .../src/test/java/accord/impl/MessageListener.java |  19 +
 .../src/test/java/accord/impl/basic/Cluster.java   | 146 ++-
 .../accord/impl/basic/DelayedCommandStores.java| 107 -
 .../src/test/java/accord/impl/basic/Journal.java   | 436 +
 .../src/test/java/accord/impl/list/ListRead.java   |  18 +
 .../src/test/java/accord/impl/list/ListResult.java |  35 ++
 .../src/test/java/accord/impl/list/ListStore.java  |  11 +
 .../src/test/java/accord/impl/list/ListWrite.java  |  27 ++
 .../src/test/java/accord/utils/AccordGens.java |  44 +++
 accord-core/src/test/java/accord/utils/Gens.java   |  20 +-
 26 files changed, 1138 insertions(+), 78 deletions(-)

diff --git 
a/accord-core/src/main/java/accord/coordinate/AbstractCoordinatePreAccept.java 
b/accord-core/src/main/java/accord/coordinate/AbstractCoordinatePreAccept.java
index 39083dbd..b5c5b49d 100644
--- 
a/accord-core/src/main/java/accord/coordinate/AbstractCoordinatePreAccept.java
+++ 
b/accord-core/src/main/java/accord/coordinate/AbstractCoordinatePreAccept.java
@@ -96,6 +96,7 @@ abstract class AbstractCoordinatePreAccept extends 
SettableResult imple
 }
 
 final Node node;
+@Nullable
 final TxnId txnId;
 final FullRoute route;
 
@@ -219,7 +220,7 @@ abstract class AbstractCoordinatePreAccept extends 
SettableResult imple
 onNewEpochTopologyMismatch(mismatch);
 return;
 }
-topologies = node.topology().withUnsyncedEpochs(route, 
txnId.epoch(), latestEpoch);
+topologies = node.topology().withUnsyncedEpochs(route, 
earliestEpoch(), latestEpoch);
 boolean equivalent = topologies.oldestEpoch() <= 
prevTopologies.currentEpoch();
 for (long epoch = topologies.currentEpoch() ; equivalent && epoch 
> prevTopologies.currentEpoch() ; --epoch)
 equivalent = 
topologies.forEpoch(epoch).shards().equals(prevTopologies.current().shards());
@@ -236,6 +237,11 @@ abstract class AbstractCoordinatePreAccept extends 
SettableResult imple
 });
 }
 
+protected long earliestEpoch()
+{
+return txnId == null ? executeAtEpoch() : txnId.epoch();
+}
+
 @Override
 public final void accept(T success, Throwable failure)
 {
diff --git 
a/accord-core/src/main/java/accord/coordinate/CoordinatePreAccept.java 
b/accord-core/src/main/java/accord/coordinate/CoordinatePreAccept.java
index 5f25e41a..1c19fc60 100644
--- a/accord-core/src/main/java/accord/coordinate/CoordinatePreAccept.java
+++ b/accord-core/src/main/java/accord/coordinate/CoordinatePreAccept.java
@@ -152,7 +152,7 @@ abstract class CoordinatePreAccept extends 
AbstractCoordinatePreAccept 
mergeMax(ok.witnessedAt, prev), Timestamp.NONE);
-onPreAccepted(topologies, executeAt, oks);
+node.withEpoch(executeAt.epoch(), () -> onPreAccepted(topologies, 
executeAt, oks));
 }
 
 abstract void onPreAccepted(Topologies topologies, Timestamp executeAt, 
List oks);
diff --git 
a/accord-core/src/main/java/accord/coordinate/CoordinationAdapter.java 
b/accord-core/src/main/java/accord/coordinate/CoordinationAdapter.java
index 0b08dd2d..dc8de331 100644
--- a/accord-core/src

(cassandra) branch trunk updated (bbcf92b2c4 -> dd4e3fa6df)

2024-05-01 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git


from bbcf92b2c4 Merge branch 'cassandra-5.0' into trunk
 new c14abb40b2 IR may leak SSTables with pending repair when coming from 
streaming
 new 7c79d91b6f Merge branch 'cassandra-4.0' into cassandra-4.1
 new 1b1f88e38a Merge branch 'cassandra-4.1' into cassandra-5.0
 new dd4e3fa6df Merge branch 'cassandra-5.0' into trunk

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGES.txt|  1 +
 .../db/compaction/AbstractStrategyHolder.java  |  1 +
 .../db/compaction/CompactionStrategyHolder.java|  6 
 .../db/compaction/CompactionStrategyManager.java   | 18 +-
 .../db/compaction/PendingRepairHolder.java | 12 +++
 .../db/compaction/PendingRepairManager.java| 11 ++-
 .../org/apache/cassandra/db/lifecycle/Tracker.java |  2 ++
 .../apache/cassandra/repair/RepairCoordinator.java | 15 +
 .../cassandra/repair/RepairMessageVerbHandler.java |  3 ++
 .../distributed/test/DistributedRepairUtils.java   | 34 +++
 .../distributed/test/RepairCoordinatorFast.java|  3 ++
 .../test/RepairCoordinatorNeighbourDown.java   |  3 ++
 .../repair/ConcurrentIrWithPreviewFuzzTest.java|  2 +-
 .../cassandra/repair/FailingRepairFuzzTest.java|  1 +
 .../org/apache/cassandra/repair/FuzzTestBase.java  | 38 --
 15 files changed, 144 insertions(+), 6 deletions(-)


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) branch cassandra-5.0 updated (a9da19c311 -> 1b1f88e38a)

2024-05-01 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch cassandra-5.0
in repository https://gitbox.apache.org/repos/asf/cassandra.git


from a9da19c311 Merge branch 'cassandra-4.1' into cassandra-5.0
 new c14abb40b2 IR may leak SSTables with pending repair when coming from 
streaming
 new 7c79d91b6f Merge branch 'cassandra-4.0' into cassandra-4.1
 new 1b1f88e38a Merge branch 'cassandra-4.1' into cassandra-5.0

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGES.txt|  1 +
 .../db/compaction/AbstractStrategyHolder.java  |  1 +
 .../db/compaction/CompactionStrategyHolder.java|  6 
 .../db/compaction/CompactionStrategyManager.java   | 18 ++-
 .../db/compaction/PendingRepairHolder.java | 12 
 .../db/compaction/PendingRepairManager.java| 11 ++-
 .../org/apache/cassandra/db/lifecycle/Tracker.java |  2 ++
 .../apache/cassandra/repair/RepairCoordinator.java | 15 +
 .../cassandra/repair/RepairMessageVerbHandler.java |  3 ++
 .../distributed/test/DistributedRepairUtils.java   | 34 
 .../distributed/test/RepairCoordinatorFast.java|  3 ++
 .../test/RepairCoordinatorNeighbourDown.java   |  3 ++
 .../repair/ConcurrentIrWithPreviewFuzzTest.java|  2 +-
 .../cassandra/repair/FailingRepairFuzzTest.java|  1 +
 .../org/apache/cassandra/repair/FuzzTestBase.java  | 36 --
 15 files changed, 143 insertions(+), 5 deletions(-)


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) 01/01: Merge branch 'cassandra-4.0' into cassandra-4.1

2024-05-01 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch cassandra-4.1
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit 7c79d91b6fef51f87640d99b601845c1dc2f7032
Merge: 428fa1f445 c14abb40b2
Author: ci worker 
AuthorDate: Wed May 1 14:32:09 2024 -0700

Merge branch 'cassandra-4.0' into cassandra-4.1

 CHANGES.txt|  1 +
 .../db/compaction/AbstractStrategyHolder.java  |  1 +
 .../db/compaction/CompactionStrategyHolder.java|  6 
 .../db/compaction/CompactionStrategyManager.java   | 18 +++-
 .../db/compaction/PendingRepairHolder.java | 12 
 .../db/compaction/PendingRepairManager.java| 11 ++-
 .../org/apache/cassandra/db/lifecycle/Tracker.java |  2 ++
 .../cassandra/repair/RepairMessageVerbHandler.java |  3 ++
 .../apache/cassandra/repair/RepairRunnable.java|  4 +++
 .../distributed/test/DistributedRepairUtils.java   | 34 ++
 .../distributed/test/RepairCoordinatorFast.java|  3 ++
 .../test/RepairCoordinatorNeighbourDown.java   |  3 ++
 12 files changed, 96 insertions(+), 2 deletions(-)

diff --cc CHANGES.txt
index e4de315818,5db267e099..17257d606a
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,10 -1,5 +1,11 @@@
 -4.0.13
 +4.1.5
 + * Make queries visible to the "system_views.queries" virtual table at the 
coordinator level (CASSANDRA-19577)
 + * Concurrent equivalent schema updates lead to unresolved disagreement 
(CASSANDRA-19578)
 + * Fix hints delivery for a node going down repeatedly (CASSANDRA-19495)
 + * Do not go to disk for reading hints file sizes (CASSANDRA-19477)
 + * Fix system_views.settings to handle array types (CASSANDRA-19475)
 +Merged from 4.0:
+  * IR may leak SSTables with pending repair when coming from streaming 
(CASSANDRA-19182)
   * Streaming exception race creates corrupt transaction log files that 
prevent restart (CASSANDRA-18736)
   * Fix CQL tojson timestamp output on negative timestamp values before 
Gregorian calendar reform in 1582 (CASSANDRA-19566)
   * Fix few types issues and implement types compatibility tests 
(CASSANDRA-19479)
diff --cc 
src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java
index 5e1d56122b,93105c8a11..e6b27594f2
--- a/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java
@@@ -434,6 -434,20 +434,20 @@@ public class CompactionStrategyManager 
  }
  }
  
+ @VisibleForTesting
 -public boolean hasPendingRepairSSTable(UUID sessionID, SSTableReader 
sstable)
++public boolean hasPendingRepairSSTable(TimeUUID sessionID, SSTableReader 
sstable)
+ {
+ readLock.lock();
+ try
+ {
+ return pendingRepairs.hasPendingRepairSSTable(sessionID, sstable) 
|| transientRepairs.hasPendingRepairSSTable(sessionID, sstable);
+ }
+ finally
+ {
+ readLock.unlock();
+ }
+ }
+ 
  public void shutdown()
  {
  writeLock.lock();
@@@ -1183,8 -1159,10 +1197,10 @@@
   * Mutates sstable repairedAt times and notifies listeners of the change 
with the writeLock held. Prevents races
   * with other processes between when the metadata is changed and when 
sstables are moved between strategies.
*/
 -public void mutateRepaired(Collection sstables, long 
repairedAt, UUID pendingRepair, boolean isTransient) throws IOException
 +public void mutateRepaired(Collection sstables, long 
repairedAt, TimeUUID pendingRepair, boolean isTransient) throws IOException
  {
+ if (sstables.isEmpty())
+ return;
  Set changed = new HashSet<>();
  
  writeLock.lock();
diff --cc src/java/org/apache/cassandra/db/compaction/PendingRepairHolder.java
index 314df9e25e,d8a561bc40..86c40e8958
--- a/src/java/org/apache/cassandra/db/compaction/PendingRepairHolder.java
+++ b/src/java/org/apache/cassandra/db/compaction/PendingRepairHolder.java
@@@ -281,4 -288,9 +288,9 @@@ public class PendingRepairHolder extend
  {
  return Iterables.any(managers, prm -> prm.containsSSTable(sstable));
  }
+ 
 -public boolean hasPendingRepairSSTable(UUID sessionID, SSTableReader 
sstable)
++public boolean hasPendingRepairSSTable(TimeUUID sessionID, SSTableReader 
sstable)
+ {
+ return Iterables.any(managers, prm -> 
prm.hasPendingRepairSSTable(sessionID, sstable));
+ }
  }
diff --cc src/java/org/apache/cassandra/db/compaction/PendingRepairManager.java
index 11d6fe82a5,bbc7198fb4..b99d01b00e
--- a/src/java/org/apache/cassandra/db/compaction/PendingRepairManager.java
+++ b/src/java/org/apache/cassandra/db/compaction/PendingRepairManager.java
@@@ -462,9 -462,9 +462,9 @@@ class PendingRepairManage
  return strategies.values().contains(strategy);
  }
  
 -public synchronized boo

(cassandra) 01/01: Merge branch 'cassandra-5.0' into trunk

2024-05-01 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit dd4e3fa6df781e8debb3be88fcee4968ace56b7f
Merge: bbcf92b2c4 1b1f88e38a
Author: ci worker 
AuthorDate: Wed May 1 14:35:14 2024 -0700

Merge branch 'cassandra-5.0' into trunk

 CHANGES.txt|  1 +
 .../db/compaction/AbstractStrategyHolder.java  |  1 +
 .../db/compaction/CompactionStrategyHolder.java|  6 
 .../db/compaction/CompactionStrategyManager.java   | 18 +-
 .../db/compaction/PendingRepairHolder.java | 12 +++
 .../db/compaction/PendingRepairManager.java| 11 ++-
 .../org/apache/cassandra/db/lifecycle/Tracker.java |  2 ++
 .../apache/cassandra/repair/RepairCoordinator.java | 15 +
 .../cassandra/repair/RepairMessageVerbHandler.java |  3 ++
 .../distributed/test/DistributedRepairUtils.java   | 34 +++
 .../distributed/test/RepairCoordinatorFast.java|  3 ++
 .../test/RepairCoordinatorNeighbourDown.java   |  3 ++
 .../repair/ConcurrentIrWithPreviewFuzzTest.java|  2 +-
 .../cassandra/repair/FailingRepairFuzzTest.java|  1 +
 .../org/apache/cassandra/repair/FuzzTestBase.java  | 38 --
 15 files changed, 144 insertions(+), 6 deletions(-)

diff --cc CHANGES.txt
index 54f370529b,ac41c7c180..19eb240b42
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -74,9 -37,11 +74,10 @@@ Merged from 4.1
   * Fix hints delivery for a node going down repeatedly (CASSANDRA-19495)
   * Do not go to disk for reading hints file sizes (CASSANDRA-19477)
   * Fix system_views.settings to handle array types (CASSANDRA-19475)
 - * Memoize Cassandra verion and add a backoff interval for failed schema 
pulls (CASSANDRA-18902)
   * Fix StackOverflowError on ALTER after many previous schema changes 
(CASSANDRA-19166)
 + * Memoize Cassandra verion (CASSANDRA-18902)
  Merged from 4.0:
+  * IR may leak SSTables with pending repair when coming from streaming 
(CASSANDRA-19182)
   * Streaming exception race creates corrupt transaction log files that 
prevent restart (CASSANDRA-18736)
   * Fix CQL tojson timestamp output on negative timestamp values before 
Gregorian calendar reform in 1582 (CASSANDRA-19566)
   * Fix few types issues and implement types compatibility tests 
(CASSANDRA-19479)
diff --cc 
test/distributed/org/apache/cassandra/distributed/test/RepairCoordinatorNeighbourDown.java
index 7815cbe3bc,590c65aa72..1d6060c082
--- 
a/test/distributed/org/apache/cassandra/distributed/test/RepairCoordinatorNeighbourDown.java
+++ 
b/test/distributed/org/apache/cassandra/distributed/test/RepairCoordinatorNeighbourDown.java
@@@ -41,8 -39,8 +41,9 @@@ import org.apache.cassandra.service.Sto
  import org.apache.cassandra.utils.FBUtilities;
  
  import static java.lang.String.format;
 +import static 
org.apache.cassandra.config.CassandraRelevantProperties.TEST_JVM_SHUTDOWN_MESSAGING_GRACEFULLY;
  import static org.apache.cassandra.distributed.api.IMessageFilters.Matcher.of;
+ import static 
org.apache.cassandra.distributed.test.DistributedRepairUtils.assertNoSSTableLeak;
  import static 
org.apache.cassandra.distributed.test.DistributedRepairUtils.assertParentRepairFailedWithMessageContains;
  import static 
org.apache.cassandra.distributed.test.DistributedRepairUtils.assertParentRepairNotExist;
  import static 
org.apache.cassandra.distributed.test.DistributedRepairUtils.getRepairExceptions;
diff --cc test/unit/org/apache/cassandra/repair/FuzzTestBase.java
index ff205554f8,b389231c68..40959a21e1
--- a/test/unit/org/apache/cassandra/repair/FuzzTestBase.java
+++ b/test/unit/org/apache/cassandra/repair/FuzzTestBase.java
@@@ -50,6 -50,9 +50,9 @@@ import javax.annotation.Nullable
  
  import com.google.common.collect.Iterables;
  import com.google.common.collect.Maps;
 -import org.junit.Before;
+ import com.google.common.collect.Sets;
+ 
++import org.apache.cassandra.config.UnitConfigOverride;
  import org.junit.BeforeClass;
  
  import accord.utils.DefaultRandom;
@@@ -69,7 -71,7 +72,6 @@@ import org.apache.cassandra.concurrent.
  import org.apache.cassandra.concurrent.SimulatedExecutorFactory;
  import org.apache.cassandra.concurrent.Stage;
  import org.apache.cassandra.config.DatabaseDescriptor;
--import org.apache.cassandra.config.UnitConfigOverride;
  import org.apache.cassandra.cql3.CQLTester;
  import org.apache.cassandra.db.ColumnFamilyStore;
  import org.apache.cassandra.db.Digest;


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) 01/01: Merge branch 'cassandra-4.1' into cassandra-5.0

2024-05-01 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch cassandra-5.0
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit 1b1f88e38a363b7937e8472b6863f9168b687659
Merge: a9da19c311 7c79d91b6f
Author: ci worker 
AuthorDate: Wed May 1 14:34:24 2024 -0700

Merge branch 'cassandra-4.1' into cassandra-5.0

 CHANGES.txt|  1 +
 .../db/compaction/AbstractStrategyHolder.java  |  1 +
 .../db/compaction/CompactionStrategyHolder.java|  6 
 .../db/compaction/CompactionStrategyManager.java   | 18 ++-
 .../db/compaction/PendingRepairHolder.java | 12 
 .../db/compaction/PendingRepairManager.java| 11 ++-
 .../org/apache/cassandra/db/lifecycle/Tracker.java |  2 ++
 .../apache/cassandra/repair/RepairCoordinator.java | 15 +
 .../cassandra/repair/RepairMessageVerbHandler.java |  3 ++
 .../distributed/test/DistributedRepairUtils.java   | 34 
 .../distributed/test/RepairCoordinatorFast.java|  3 ++
 .../test/RepairCoordinatorNeighbourDown.java   |  3 ++
 .../repair/ConcurrentIrWithPreviewFuzzTest.java|  2 +-
 .../cassandra/repair/FailingRepairFuzzTest.java|  1 +
 .../org/apache/cassandra/repair/FuzzTestBase.java  | 36 --
 15 files changed, 143 insertions(+), 5 deletions(-)

diff --cc CHANGES.txt
index 7e18e40c97,17257d606a..ac41c7c180
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -38,9 -4,8 +38,10 @@@ Merged from 4.1
   * Fix hints delivery for a node going down repeatedly (CASSANDRA-19495)
   * Do not go to disk for reading hints file sizes (CASSANDRA-19477)
   * Fix system_views.settings to handle array types (CASSANDRA-19475)
 + * Memoize Cassandra verion and add a backoff interval for failed schema 
pulls (CASSANDRA-18902)
 + * Fix StackOverflowError on ALTER after many previous schema changes 
(CASSANDRA-19166)
  Merged from 4.0:
+  * IR may leak SSTables with pending repair when coming from streaming 
(CASSANDRA-19182)
   * Streaming exception race creates corrupt transaction log files that 
prevent restart (CASSANDRA-18736)
   * Fix CQL tojson timestamp output on negative timestamp values before 
Gregorian calendar reform in 1582 (CASSANDRA-19566)
   * Fix few types issues and implement types compatibility tests 
(CASSANDRA-19479)
diff --cc src/java/org/apache/cassandra/db/compaction/PendingRepairHolder.java
index 534bf3ae82,86c40e8958..0c5d53c1d8
--- a/src/java/org/apache/cassandra/db/compaction/PendingRepairHolder.java
+++ b/src/java/org/apache/cassandra/db/compaction/PendingRepairHolder.java
@@@ -285,12 -289,8 +292,17 @@@ public class PendingRepairHolder extend
  return Iterables.any(managers, prm -> prm.containsSSTable(sstable));
  }
  
 +@Override
 +public int getEstimatedRemainingTasks()
 +{
 +int tasks = 0;
 +for (PendingRepairManager manager : managers)
 +tasks += manager.getEstimatedRemainingTasks();
 +return tasks;
 +}
++
+ public boolean hasPendingRepairSSTable(TimeUUID sessionID, SSTableReader 
sstable)
+ {
+ return Iterables.any(managers, prm -> 
prm.hasPendingRepairSSTable(sessionID, sstable));
+ }
  }
diff --cc src/java/org/apache/cassandra/repair/RepairCoordinator.java
index 27dd3a73b5,00..82664f2d3c
mode 100644,00..100644
--- a/src/java/org/apache/cassandra/repair/RepairCoordinator.java
+++ b/src/java/org/apache/cassandra/repair/RepairCoordinator.java
@@@ -1,635 -1,0 +1,650 @@@
 +/*
 + * 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.repair;
 +
 +import java.nio.ByteBuffer;
 +import java.util.ArrayList;
 +import java.util.Arrays;
 +import java.util.Collection;
 +import java.util.HashSet;
 +import java.util.List;
 +import java.util.Set;
 +import java.util.UUID;
 +import java.util.concurrent.TimeUnit;
 +import java.util.concurrent.atomic.AtomicInteger;
 +import java.util.concurrent.atomic.AtomicReference;
 +import java.util.function.BiFunction;
 +import java.util.function.Function;
 +import java.util.function.Supplier;
 +
 +import com.google.common.ba

(cassandra) branch cassandra-4.0 updated: IR may leak SSTables with pending repair when coming from streaming

2024-05-01 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch cassandra-4.0
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/cassandra-4.0 by this push:
 new c14abb40b2 IR may leak SSTables with pending repair when coming from 
streaming
c14abb40b2 is described below

commit c14abb40b2d0e2e1db121eac65a1264a287bcd18
Author: David Capwell 
AuthorDate: Wed May 1 09:47:06 2024 -0700

IR may leak SSTables with pending repair when coming from streaming

patch by David Capwell; reviewed by Blake Eggleston for CASSANDRA-19182
---
 CHANGES.txt|  1 +
 .../db/compaction/AbstractStrategyHolder.java  |  1 +
 .../db/compaction/CompactionStrategyHolder.java|  6 
 .../db/compaction/CompactionStrategyManager.java   | 18 +++-
 .../db/compaction/PendingRepairHolder.java | 13 -
 .../db/compaction/PendingRepairManager.java| 11 ++-
 .../org/apache/cassandra/db/lifecycle/Tracker.java |  2 ++
 .../distributed/test/DistributedRepairUtils.java   | 34 ++
 .../distributed/test/RepairCoordinatorFast.java|  3 ++
 .../test/RepairCoordinatorNeighbourDown.java   |  3 ++
 10 files changed, 89 insertions(+), 3 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index 64c63912ba..5db267e099 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 4.0.13
+ * IR may leak SSTables with pending repair when coming from streaming 
(CASSANDRA-19182)
  * Streaming exception race creates corrupt transaction log files that prevent 
restart (CASSANDRA-18736)
  * Fix CQL tojson timestamp output on negative timestamp values before 
Gregorian calendar reform in 1582 (CASSANDRA-19566)
  * Fix few types issues and implement types compatibility tests 
(CASSANDRA-19479)
diff --git 
a/src/java/org/apache/cassandra/db/compaction/AbstractStrategyHolder.java 
b/src/java/org/apache/cassandra/db/compaction/AbstractStrategyHolder.java
index 95fc7b85b0..824b22f9a5 100644
--- a/src/java/org/apache/cassandra/db/compaction/AbstractStrategyHolder.java
+++ b/src/java/org/apache/cassandra/db/compaction/AbstractStrategyHolder.java
@@ -181,6 +181,7 @@ public abstract class AbstractStrategyHolder
 return new GroupedSSTableContainer(this);
 }
 
+public abstract void addSSTable(SSTableReader sstable);
 public abstract void addSSTables(GroupedSSTableContainer sstables);
 
 public abstract void removeSSTables(GroupedSSTableContainer sstables);
diff --git 
a/src/java/org/apache/cassandra/db/compaction/CompactionStrategyHolder.java 
b/src/java/org/apache/cassandra/db/compaction/CompactionStrategyHolder.java
index 129ee797ee..a4084a37d7 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionStrategyHolder.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionStrategyHolder.java
@@ -138,6 +138,12 @@ public class CompactionStrategyHolder extends 
AbstractStrategyHolder
 return tasks;
 }
 
+@Override
+public void addSSTable(SSTableReader sstable)
+{
+getStrategyFor(sstable).addSSTable(sstable);
+}
+
 @Override
 public void addSSTables(GroupedSSTableContainer sstables)
 {
diff --git 
a/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java 
b/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java
index 99e2ce996f..93105c8a11 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java
@@ -434,6 +434,20 @@ public class CompactionStrategyManager implements 
INotificationConsumer
 }
 }
 
+@VisibleForTesting
+public boolean hasPendingRepairSSTable(UUID sessionID, SSTableReader 
sstable)
+{
+readLock.lock();
+try
+{
+return pendingRepairs.hasPendingRepairSSTable(sessionID, sstable) 
|| transientRepairs.hasPendingRepairSSTable(sessionID, sstable);
+}
+finally
+{
+readLock.unlock();
+}
+}
+
 public void shutdown()
 {
 writeLock.lock();
@@ -608,7 +622,7 @@ public class CompactionStrategyManager implements 
INotificationConsumer
 private void handleFlushNotification(Iterable added)
 {
 for (SSTableReader sstable : added)
-compactionStrategyFor(sstable).addSSTable(sstable);
+getHolder(sstable).addSSTable(sstable);
 }
 
 private int getHolderIndex(SSTableReader sstable)
@@ -1147,6 +1161,8 @@ public class CompactionStrategyManager implements 
INotificationConsumer
   */
 public void mutateRepaired(Collection sstables, long 
repairedAt, UUID pendingRepair, boolean isTransient) throws IOException
 {
+if (sstables.isEmpty())
+return;
 Set changed = new HashSet<>();
 
 writeLock.lock();
diff --git 

(cassandra) branch cassandra-4.1 updated (428fa1f445 -> 7c79d91b6f)

2024-05-01 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch cassandra-4.1
in repository https://gitbox.apache.org/repos/asf/cassandra.git


from 428fa1f445 Make queries visible to the "system_views.queries" virtual 
table at the coordinator level
 new c14abb40b2 IR may leak SSTables with pending repair when coming from 
streaming
 new 7c79d91b6f Merge branch 'cassandra-4.0' into cassandra-4.1

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGES.txt|  1 +
 .../db/compaction/AbstractStrategyHolder.java  |  1 +
 .../db/compaction/CompactionStrategyHolder.java|  6 
 .../db/compaction/CompactionStrategyManager.java   | 18 +++-
 .../db/compaction/PendingRepairHolder.java | 12 
 .../db/compaction/PendingRepairManager.java| 11 ++-
 .../org/apache/cassandra/db/lifecycle/Tracker.java |  2 ++
 .../cassandra/repair/RepairMessageVerbHandler.java |  3 ++
 .../apache/cassandra/repair/RepairRunnable.java|  4 +++
 .../distributed/test/DistributedRepairUtils.java   | 34 ++
 .../distributed/test/RepairCoordinatorFast.java|  3 ++
 .../test/RepairCoordinatorNeighbourDown.java   |  3 ++
 12 files changed, 96 insertions(+), 2 deletions(-)


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) branch cep-15-accord updated: Accord: NPE in RangeDeps.forEach

2024-05-01 Thread dcapwell
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 58bc444d05 Accord: NPE in RangeDeps.forEach
58bc444d05 is described below

commit 58bc444d05548a0c8d06a3ee5901811dc65a68a2
Author: ci worker 
AuthorDate: Wed May 1 09:12:03 2024 -0700

Accord: NPE in RangeDeps.forEach

patch by Benedict Elliott Smith, David Capwell; reviewed by Benedict 
Elliott Smith for CASSANDRA-19605
---
 modules/accord | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/accord b/modules/accord
index 3aaec7566e..202e673583 16
--- a/modules/accord
+++ b/modules/accord
@@ -1 +1 @@
-Subproject commit 3aaec7566e389a0037b93b748867886fb68a0fd0
+Subproject commit 202e67358396a1e413e29498bea71047bd586d06


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra-accord) branch trunk updated: Accord: NPE in RangeDeps.forEach

2024-05-01 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new 202e673  Accord: NPE in RangeDeps.forEach
202e673 is described below

commit 202e67358396a1e413e29498bea71047bd586d06
Author: David Capwell 
AuthorDate: Wed May 1 09:08:47 2024 -0700

Accord: NPE in RangeDeps.forEach

patch by Benedict Elliott Smith, David Capwell; reviewed by Benedict 
Elliott Smith for CASSANDRA-19605
---
 accord-core/src/main/java/accord/primitives/RangeDeps.java  |  7 ++-
 .../src/test/java/accord/primitives/RangeDepsTest.java  | 13 +++--
 2 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/accord-core/src/main/java/accord/primitives/RangeDeps.java 
b/accord-core/src/main/java/accord/primitives/RangeDeps.java
index 14c4bef..f939d26 100644
--- a/accord-core/src/main/java/accord/primitives/RangeDeps.java
+++ b/accord-core/src/main/java/accord/primitives/RangeDeps.java
@@ -149,6 +149,11 @@ public class RangeDeps implements 
Iterable>
 this.txnIdsToRanges = txnIdsToRanges;
 }
 
+public void forEach(RoutableKey key, Consumer forEach)
+{
+forEach(key, Consumer::accept, forEach, 0, null);
+}
+
 @Inline
 public  int forEach(RoutableKey key, 
IndexedQuadConsumer forEachScanOrCheckpoint, 
IndexedRangeQuadConsumer forEachRange, P1 p1, P2 p2, P3 p3, P4 
p4, int minIndex)
 {
@@ -270,7 +275,7 @@ public class RangeDeps implements Iterable>
  */
 public void forEach(Range range, Consumer forEach)
 {
-forEach(range, forEach, 0, null);
+forEach(range, Consumer::accept, forEach, 0, null);
 }
 
 /**
diff --git a/accord-core/src/test/java/accord/primitives/RangeDepsTest.java 
b/accord-core/src/test/java/accord/primitives/RangeDepsTest.java
index 2a41b22..bbb9356 100644
--- a/accord-core/src/test/java/accord/primitives/RangeDepsTest.java
+++ b/accord-core/src/test/java/accord/primitives/RangeDepsTest.java
@@ -27,6 +27,7 @@ import org.junit.jupiter.api.Test;
 import java.util.*;
 
 import static accord.primitives.Txn.Kind.Write;
+import static org.assertj.core.api.Assertions.assertThat;
 
 public class RangeDepsTest
 {
@@ -96,8 +97,12 @@ public class RangeDepsTest
 
 Set testOverlaps(Range range)
 {
+List uniq = new ArrayList<>();
+test.forEachUniqueTxnId(range, uniq::add);
 Set set = new TreeSet<>();
-test.forEachUniqueTxnId(range, set::add);
+test.forEach(range, set::add);
+assertThat(uniq).doesNotHaveDuplicates()
+.containsExactlyInAnyOrderElementsOf(set);
 return set;
 }
 
@@ -114,8 +119,12 @@ public class RangeDepsTest
 
 Set testOverlaps(RoutableKey key)
 {
+List uniq = new ArrayList<>();
+test.forEachUniqueTxnId(key, uniq::add);
 Set set = new TreeSet<>();
-test.forEachUniqueTxnId(key, set::add);
+test.forEach(key, set::add);
+assertThat(uniq).doesNotHaveDuplicates()
+.containsExactlyInAnyOrderElementsOf(set);
 return set;
 }
 


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) branch cep-15-accord updated: When jvm-dtest is shutting down an instance TCM retries block the shutdown causing the test to fail

2024-04-02 Thread dcapwell
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 a5b8c06bb9 When jvm-dtest is shutting down an instance TCM retries 
block the shutdown causing the test to fail
a5b8c06bb9 is described below

commit a5b8c06bb925905719261b1f449fffb049f54d1b
Author: David Capwell 
AuthorDate: Tue Apr 2 22:18:50 2024 -0700

When jvm-dtest is shutting down an instance TCM retries block the shutdown 
causing the test to fail

patch by David Capwell; reviewed by Blake Eggleston for CASSANDRA-19514
---
 .../apache/cassandra/concurrent/Shutdownable.java  | 14 +++-
 .../cassandra/service/accord/AccordService.java| 10 ++
 .../apache/cassandra/tcm/EpochAwareDebounce.java   | 40 +-
 .../org/apache/cassandra/tcm/RemoteProcessor.java  |  2 ++
 .../cassandra/distributed/impl/Instance.java   |  7 
 5 files changed, 64 insertions(+), 9 deletions(-)

diff --git a/src/java/org/apache/cassandra/concurrent/Shutdownable.java 
b/src/java/org/apache/cassandra/concurrent/Shutdownable.java
index 185875b791..a72253fc87 100644
--- a/src/java/org/apache/cassandra/concurrent/Shutdownable.java
+++ b/src/java/org/apache/cassandra/concurrent/Shutdownable.java
@@ -19,7 +19,9 @@
 package org.apache.cassandra.concurrent;
 
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 
+import org.apache.cassandra.utils.ExecutorUtils;
 import org.apache.cassandra.utils.Shared;
 
 import static org.apache.cassandra.utils.Shared.Scope.SIMULATION;
@@ -29,6 +31,11 @@ public interface Shutdownable
 {
 boolean isTerminated();
 
+default boolean isShutdown()
+{
+return isTerminated();
+}
+
 /**
  * Shutdown once any remaining work has completed (however this is defined 
for the implementation).
  */
@@ -42,5 +49,10 @@ public interface Shutdownable
 /**
  * Await termination of this object, i.e. the cessation of all current and 
future work.
  */
-public boolean awaitTermination(long timeout, TimeUnit units) throws 
InterruptedException;
+boolean awaitTermination(long timeout, TimeUnit units) throws 
InterruptedException;
+
+default void shutdownAndWait(long timeout, TimeUnit unit) throws 
InterruptedException, TimeoutException
+{
+ExecutorUtils.shutdownAndWait(timeout, unit, this);
+}
 }
diff --git a/src/java/org/apache/cassandra/service/accord/AccordService.java 
b/src/java/org/apache/cassandra/service/accord/AccordService.java
index 9a44da4538..6e136029a0 100644
--- a/src/java/org/apache/cassandra/service/accord/AccordService.java
+++ b/src/java/org/apache/cassandra/service/accord/AccordService.java
@@ -35,7 +35,9 @@ import com.google.common.primitives.Ints;
 import accord.coordinate.TopologyMismatch;
 import accord.impl.CoordinateDurabilityScheduling;
 import org.apache.cassandra.cql3.statements.RequestValidations;
+import org.apache.cassandra.service.StorageService;
 import 
org.apache.cassandra.service.accord.interop.AccordInteropAdapter.AccordInteropFactory;
+import org.apache.cassandra.tcm.ClusterMetadata;
 import org.apache.cassandra.tcm.ClusterMetadataService;
 import org.apache.cassandra.service.accord.api.*;
 import org.apache.cassandra.utils.*;
@@ -241,6 +243,14 @@ public class AccordService implements IAccordService, 
Shutdownable
 }
 AccordService as = new 
AccordService(AccordTopology.tcmIdToAccord(tcmId));
 as.startup();
+if (StorageService.instance.isReplacingSameAddress())
+{
+// when replacing another node but using the same ip the hostId 
will also match, this causes no TCM transactions
+// to be committed...
+// In order to bootup correctly, need to pull in the current epoch
+ClusterMetadata current = ClusterMetadata.current();
+as.configurationService().notifyPostCommit(current, current, 
false);
+}
 instance = as;
 }
 
diff --git a/src/java/org/apache/cassandra/tcm/EpochAwareDebounce.java 
b/src/java/org/apache/cassandra/tcm/EpochAwareDebounce.java
index a1cc6e5a95..41e09073f4 100644
--- a/src/java/org/apache/cassandra/tcm/EpochAwareDebounce.java
+++ b/src/java/org/apache/cassandra/tcm/EpochAwareDebounce.java
@@ -20,12 +20,11 @@ package org.apache.cassandra.tcm;
 
 import java.util.concurrent.Callable;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.cassandra.concurrent.ExecutorFactory;
 import org.apache.cassandra.concurrent.ExecutorPlus;
-import org.apache.cassandra.utils.ExecutorUtils;
+import org.apache.cassandra.concurrent.Shutdownable;
 import org.apache.cassandra.utils.concurrent.AsyncPromise;
 import

(cassandra) branch cep-15-accord updated: AccordGens.rangeDeps did not enforce unique ranges, which caused tests to fail

2024-04-01 Thread dcapwell
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 9c35158f6a AccordGens.rangeDeps did not enforce unique ranges, which 
caused tests to fail
9c35158f6a is described below

commit 9c35158f6a82ddda5bb9a2297855aaf03abe99bd
Author: David Capwell 
AuthorDate: Mon Apr 1 10:31:57 2024 -0700

AccordGens.rangeDeps did not enforce unique ranges, which caused tests to 
fail
---
 modules/accord | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/accord b/modules/accord
index 1a5cb4f100..8b4f3895cb 16
--- a/modules/accord
+++ b/modules/accord
@@ -1 +1 @@
-Subproject commit 1a5cb4f10002fb3650ad464b3a77664f18e2a901
+Subproject commit 8b4f3895cb926f937450676b1db2e23d01a8b820


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra-accord) branch trunk updated: AccordGens.rangeDeps did not enforce unique ranges, which caused tests to fail

2024-04-01 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new 8b4f389  AccordGens.rangeDeps did not enforce unique ranges, which 
caused tests to fail
8b4f389 is described below

commit 8b4f3895cb926f937450676b1db2e23d01a8b820
Author: David Capwell 
AuthorDate: Mon Apr 1 10:31:33 2024 -0700

AccordGens.rangeDeps did not enforce unique ranges, which caused tests to 
fail
---
 accord-core/src/test/java/accord/utils/AccordGens.java | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/accord-core/src/test/java/accord/utils/AccordGens.java 
b/accord-core/src/test/java/accord/utils/AccordGens.java
index d87c2d5..971c70e 100644
--- a/accord-core/src/test/java/accord/utils/AccordGens.java
+++ b/accord-core/src/test/java/accord/utils/AccordGens.java
@@ -403,9 +403,10 @@ public class AccordGens
 return rs -> {
 if (rs.decide(emptyProb)) return RangeDeps.NONE;
 RangeDeps.Builder builder = RangeDeps.builder();
-for (int i = 0, numKeys = rs.nextInt(1, 10); i < numKeys; i++)
+List uniqRanges = 
Gens.lists(rangeGen).uniqueBestEffort().ofSize(rs.nextInt(1, 10)).next(rs);
+for (Range range : uniqRanges)
 {
-builder.nextKey(rangeGen.next(rs));
+builder.nextKey(range);
 for (int j = 0, numTxn = rs.nextInt(1, 10); j < numTxn; j++)
 builder.add(idGen.next(rs));
 }


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) branch cep-15-accord updated: (Accord) Cassandra bootstrap no longer using the range txn and instead uses the sync point empty txn for reads

2024-04-01 Thread dcapwell
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 63f39562ec (Accord) Cassandra bootstrap no longer using the range txn 
and instead uses the sync point empty txn for reads
63f39562ec is described below

commit 63f39562ec2f1da182034c24eeb1e7bef29749ec
Author: David Capwell 
AuthorDate: Mon Apr 1 10:16:27 2024 -0700

(Accord) Cassandra bootstrap no longer using the range txn and instead uses 
the sync point empty txn for reads

patch by David Capwell; reviewed by Blake Eggleston for CASSANDRA-19503
---
 modules/accord |  2 +-
 .../cassandra/service/accord/AccordJournal.java| 10 ++
 .../service/accord/AccordMessageSink.java  |  2 ++
 .../test/accord/AccordBootstrapTest.java   |  2 +-
 .../cassandra/service/accord/MockJournal.java  | 39 --
 5 files changed, 42 insertions(+), 13 deletions(-)

diff --git a/modules/accord b/modules/accord
index f78d1da27b..1a5cb4f100 16
--- a/modules/accord
+++ b/modules/accord
@@ -1 +1 @@
-Subproject commit f78d1da27b09f89417dd29bde0529f12cd744e3d
+Subproject commit 1a5cb4f10002fb3650ad464b3a77664f18e2a901
diff --git a/src/java/org/apache/cassandra/service/accord/AccordJournal.java 
b/src/java/org/apache/cassandra/service/accord/AccordJournal.java
index 0562da1139..b659cf4733 100644
--- a/src/java/org/apache/cassandra/service/accord/AccordJournal.java
+++ b/src/java/org/apache/cassandra/service/accord/AccordJournal.java
@@ -1408,6 +1408,7 @@ public class AccordJournal implements IJournal, 
Shutdownable
 return presentMessages;
 }
 
+@Override
 public Set all()
 {
 Set types = EnumSet.allOf(Type.class);
@@ -1514,6 +1515,15 @@ public class AccordJournal implements IJournal, 
Shutdownable
 return confirmed;
 }
 
+@Override
+public Set all()
+{
+logger.debug("Checking all messages for {}", txnId);
+Set confirmed = provider.all();
+logger.debug("Confirmed {} messages for {}", confirmed, txnId);
+return confirmed;
+}
+
 @Override
 public PreAccept preAccept()
 {
diff --git 
a/src/java/org/apache/cassandra/service/accord/AccordMessageSink.java 
b/src/java/org/apache/cassandra/service/accord/AccordMessageSink.java
index d72644811a..5a514219e3 100644
--- a/src/java/org/apache/cassandra/service/accord/AccordMessageSink.java
+++ b/src/java/org/apache/cassandra/service/accord/AccordMessageSink.java
@@ -126,6 +126,8 @@ public class AccordMessageSink implements MessageSink
 builder.put(MessageType.GET_DEPS_RSP, 
Verb.ACCORD_GET_DEPS_RSP);
 builder.put(MessageType.GET_EPHEMERAL_READ_DEPS_REQ,  
Verb.ACCORD_GET_EPHMRL_READ_DEPS_REQ);
 builder.put(MessageType.GET_EPHEMERAL_READ_DEPS_RSP,  
Verb.ACCORD_GET_EPHMRL_READ_DEPS_RSP);
+builder.put(MessageType.GET_MAX_CONFLICT_REQ, 
Verb.ACCORD_GET_MAX_CONFLICT_REQ);
+builder.put(MessageType.GET_MAX_CONFLICT_RSP, 
Verb.ACCORD_GET_MAX_CONFLICT_RSP);
 builder.put(MessageType.COMMIT_SLOW_PATH_REQ, 
Verb.ACCORD_COMMIT_REQ);
 builder.put(MessageType.COMMIT_MAXIMAL_REQ,   
Verb.ACCORD_COMMIT_REQ);
 builder.put(MessageType.STABLE_FAST_PATH_REQ, 
Verb.ACCORD_COMMIT_REQ);
diff --git 
a/test/distributed/org/apache/cassandra/distributed/test/accord/AccordBootstrapTest.java
 
b/test/distributed/org/apache/cassandra/distributed/test/accord/AccordBootstrapTest.java
index f040e9d4db..2241a8c911 100644
--- 
a/test/distributed/org/apache/cassandra/distributed/test/accord/AccordBootstrapTest.java
+++ 
b/test/distributed/org/apache/cassandra/distributed/test/accord/AccordBootstrapTest.java
@@ -91,7 +91,7 @@ public class AccordBootstrapTest extends TestBaseImpl
 //withProperty(BOOTSTRAP_SCHEMA_DELAY_MS.getKey(), Integer.toString(90 
* 1000),
 // () -> withProperty("cassandra.join_ring", false, () -> 
newInstance.startup(cluster)));
 //newInstance.nodetoolResult("join").asserts().success();
-newInstance.nodetoolResult("describecms").asserts().success(); // just 
make sure we're joined, remove later
+newInstance.nodetoolResult("cms", "describe").asserts().success(); // 
just make sure we're joined, remove later
 }
 
 private static AccordService service()
diff --git a/test/unit/org/apache/cassandra/service/accord/MockJournal.java 
b/test/unit/org/apache/cassandra/service/accord/MockJournal.java
index 575b9

(cassandra-accord) branch trunk updated: (Accord) Cassandra bootstrap no longer using the range txn and instead uses the sync point empty txn for reads

2024-04-01 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new 1a5cb4f  (Accord) Cassandra bootstrap no longer using the range txn 
and instead uses the sync point empty txn for reads
1a5cb4f is described below

commit 1a5cb4f10002fb3650ad464b3a77664f18e2a901
Author: David Capwell 
AuthorDate: Mon Apr 1 10:14:04 2024 -0700

(Accord) Cassandra bootstrap no longer using the range txn and instead uses 
the sync point empty txn for reads

patch by David Capwell; reviewed by Blake Eggleston for CASSANDRA-19503
---
 .../java/accord/coordinate/FetchMaxConflict.java   |  2 +-
 .../java/accord/impl/AbstractFetchCoordinator.java | 30 +++--
 .../main/java/accord/local/SerializerSupport.java  | 33 ++
 .../main/java/accord/messages/GetMaxConflict.java  |  4 +-
 .../src/main/java/accord/messages/MessageType.java |  2 +
 .../messages/WaitUntilAppliedAndReadData.java  | 51 --
 .../main/java/accord/topology/TopologyManager.java |  7 ++-
 .../src/main/java/accord/utils/Invariants.java |  7 ++-
 .../main/java/accord/utils/async/AsyncResults.java |  7 +--
 .../src/test/java/accord/impl/list/ListRead.java   |  4 ++
 10 files changed, 77 insertions(+), 70 deletions(-)

diff --git a/accord-core/src/main/java/accord/coordinate/FetchMaxConflict.java 
b/accord-core/src/main/java/accord/coordinate/FetchMaxConflict.java
index 0793ae7..5963ebd 100644
--- a/accord-core/src/main/java/accord/coordinate/FetchMaxConflict.java
+++ b/accord-core/src/main/java/accord/coordinate/FetchMaxConflict.java
@@ -85,7 +85,7 @@ public class FetchMaxConflict extends 
AbstractCoordinatePreAccept nodes, Topologies topologies, 
Callback callback)
 {
-node.send(nodes, to -> new GetMaxConflict(to, topologies, route, 
keysOrRanges, executionEpoch));
+node.send(nodes, to -> new GetMaxConflict(to, topologies, route, 
keysOrRanges, executionEpoch), callback);
 }
 
 @Override
diff --git 
a/accord-core/src/main/java/accord/impl/AbstractFetchCoordinator.java 
b/accord-core/src/main/java/accord/impl/AbstractFetchCoordinator.java
index 23de1e2..a88c541 100644
--- a/accord-core/src/main/java/accord/impl/AbstractFetchCoordinator.java
+++ b/accord-core/src/main/java/accord/impl/AbstractFetchCoordinator.java
@@ -23,6 +23,9 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import accord.local.SafeCommandStore;
+import accord.messages.ReadData;
+import accord.utils.async.AsyncChain;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -37,7 +40,6 @@ import accord.messages.MessageType;
 import accord.messages.ReadData.CommitOrReadNack;
 import accord.messages.ReadData.ReadOk;
 import accord.messages.ReadData.ReadReply;
-import accord.messages.WaitUntilAppliedAndReadData;
 import accord.primitives.PartialDeps;
 import accord.primitives.PartialTxn;
 import accord.primitives.Ranges;
@@ -50,6 +52,7 @@ import accord.utils.async.AsyncResult;
 import accord.utils.async.AsyncResults;
 import javax.annotation.Nullable;
 
+import static accord.local.SaveStatus.Applied;
 import static accord.messages.ReadData.CommitOrReadNack.Insufficient;
 import static accord.primitives.Routables.Slice.Minimal;
 
@@ -231,16 +234,37 @@ public abstract class AbstractFetchCoordinator extends 
FetchCoordinator
 // TODO (expected): implement abort
 }
 
-public static class FetchRequest extends WaitUntilAppliedAndReadData
+public static class FetchRequest extends ReadData
 {
+private static final ExecuteOn EXECUTE_ON = new ExecuteOn(Applied, 
Applied);
+public final PartialTxn read;
+
 public final PartialDeps partialDeps;
 
 public FetchRequest(long sourceEpoch, TxnId syncId, Ranges ranges, 
PartialDeps partialDeps, PartialTxn partialTxn)
 {
-super(syncId, ranges, sourceEpoch, partialTxn);
+super(syncId, ranges, sourceEpoch);
+this.read = partialTxn;
 this.partialDeps = partialDeps;
 }
 
+@Override
+protected ExecuteOn executeOn()
+{
+return EXECUTE_ON;
+}
+
+@Override
+public ReadType kind()
+{
+return ReadType.waitUntilApplied;
+}
+
+@Override
+protected AsyncChain beginRead(SafeCommandStore safeStore, 
Timestamp executeAt, PartialTxn txn, Ranges unavailable) {
+return read.read(safeStore, executeAt, unavailable);
+}
+
 @Override
 protected void readComplete(CommandStore commandStore, Data result, 
Ranges unavailable)
 {
diff --git a/accord-core/src/main/java/accord/local/SerializerSupport.java 
b/accord-core/src/main/java/accord/local/SerializerSupport.java
index 962e7d9..7ca59e0 100644
--- a/accord-core/src/mai

(cassandra-accord) branch trunk updated: Accord: PreLoadContext must properly and consistently support ranges

2024-03-29 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new f78d1da  Accord: PreLoadContext must properly and consistently support 
ranges
f78d1da is described below

commit f78d1da27b09f89417dd29bde0529f12cd744e3d
Author: David Capwell 
AuthorDate: Fri Mar 29 10:03:44 2024 -0700

Accord: PreLoadContext must properly and consistently support ranges

patch by David Capwell; reviewed by Benedict Elliott Smith for 
CASSANDRA-19355
---
 .../src/main/java/accord/local/CommandsForKey.java |1 -
 .../java/accord/utils/CheckpointIntervalArray.java |  222 
 ...er.java => CheckpointIntervalArrayBuilder.java} |  211 ++--
 .../src/main/java/accord/utils/RandomSource.java   |   10 +-
 .../java/accord/utils/SearchableRangeList.java |  197 +---
 .../accord/utils/SearchableRangeListBuilder.java   | 1067 +---
 .../main/java/accord/utils/async/AsyncChains.java  |   12 +
 .../src/main/java/accord/utils/random/Picker.java  |   27 +-
 accord-core/src/test/java/accord/utils/Gen.java|   30 +
 accord-core/src/test/java/accord/utils/Gens.java   |  307 ++
 .../src/test/java/accord/utils/Property.java   |  144 ++-
 .../java/accord/utils/SearchableRangeListTest.java |  116 +++
 .../src/main/groovy/accord.java-conventions.gradle |2 +-
 13 files changed, 1023 insertions(+), 1323 deletions(-)

diff --git a/accord-core/src/main/java/accord/local/CommandsForKey.java 
b/accord-core/src/main/java/accord/local/CommandsForKey.java
index 0e24d67..9e628b9 100644
--- a/accord-core/src/main/java/accord/local/CommandsForKey.java
+++ b/accord-core/src/main/java/accord/local/CommandsForKey.java
@@ -1698,7 +1698,6 @@ public class CommandsForKey implements CommandsSummary
 if (o == null || getClass() != o.getClass()) return false;
 CommandsForKey that = (CommandsForKey) o;
 return Objects.equals(key, that.key)
-   && Objects.equals(redundantBefore, that.redundantBefore)
&& Arrays.equals(txns, that.txns);
 }
 
diff --git 
a/accord-core/src/main/java/accord/utils/CheckpointIntervalArray.java 
b/accord-core/src/main/java/accord/utils/CheckpointIntervalArray.java
new file mode 100644
index 000..84063da
--- /dev/null
+++ b/accord-core/src/main/java/accord/utils/CheckpointIntervalArray.java
@@ -0,0 +1,222 @@
+/*
+ * 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 accord.utils;
+
+import java.util.Arrays;
+
+import accord.utils.CheckpointIntervalArrayBuilder.Accessor;
+import net.nicoulaj.compilecommand.annotations.Inline;
+
+import static accord.utils.SortedArrays.Search.CEIL;
+
+public class CheckpointIntervalArray
+{
+// scan distance can be kept very small as we guarantee to use at most 
linear extra space even with a scan distance of zero
+static final int MAX_SCAN_DISTANCE = 255;
+protected static final int BIT30 = 0x4000;
+protected static final int BIT29 = 0x2000;
+
+final Ranges ranges;
+
+/**
+ * The lower bound for each checkpoint.
+ * The checkpoint {@code i} applies to all ranges (incl) starting from 
{@code lowerBounds[i]},
+ * but before (excl) {@code lowerBounds[i+1]}.
+ */
+final int[] lowerBounds;
+
+/**
+ * Logically one entry per checkpoint, mapping {@link #lowerBounds} to 
{@link #checkpointLists},
+ * however we also encode an additional byte per entry representing the 
scan distance for the
+ * ranges handled by this checkpoint. These are grouped into an integer 
per four mappings, i.e.
+ * we encode batches of five ints, with the first int containing the four 
scan distances for the
+ * next four checkpoints, and the following four ints containing the 
respective offsets into
+ * {@link #checkpointLists}.
+ * 
+ * 
[0.32b.64b.96b128b160b192b]
+ * [ d1 d2 d3 d4  mapping1mapping2   mapping3mapping4d5 d6 d7 
d8 ]
+ */
+final int[] headers;
+
+/**
+ * A list 

(cassandra) branch cep-15-accord updated: Ninja for CASSANDRA-19305: Disable EphemeralRead by default to get benchmarks stable

2024-03-29 Thread dcapwell
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 548924fdb2 Ninja for CASSANDRA-19305: Disable EphemeralRead by default 
to get benchmarks stable
548924fdb2 is described below

commit 548924fdb24fb2056f8cb709048c5cfb142520ba
Author: ci worker 
AuthorDate: Fri Mar 29 08:30:03 2024 -0700

Ninja for CASSANDRA-19305: Disable EphemeralRead by default to get 
benchmarks stable
---
 src/java/org/apache/cassandra/service/StorageProxy.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java 
b/src/java/org/apache/cassandra/service/StorageProxy.java
index fc3dcd2dfb..cf45849b23 100644
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@ -2028,7 +2028,7 @@ public class StorageProxy implements StorageProxyMBean
 consistencyLevel = 
transactionalMode.readCLForStrategy(consistencyLevel);
 TxnRead read = TxnRead.createSerialRead(readCommand, consistencyLevel);
 Invariants.checkState(read.keys().size() == 1, "Ephemeral reads are 
only strict-serializable for single partition reads");
-Txn txn = new Txn.InMemory(transactionalMode == TransactionalMode.full 
? EphemeralRead : Read, read.keys(), read, TxnQuery.ALL, null);
+Txn txn = new Txn.InMemory(transactionalMode == TransactionalMode.full 
&& DatabaseDescriptor.getAccordEphemeralReadEnabledEnabled() ? EphemeralRead : 
Read, read.keys(), read, TxnQuery.ALL, null);
 IAccordService accordService = AccordService.instance();
 TxnResult txnResult = accordService.coordinate(txn, consistencyLevel, 
queryStartNanoTime);
 if (txnResult.kind() == retry_new_protocol)


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) branch cep-15-accord updated: Ninja for CASSANDRA-19305: Disable EphemeralRead by default to get benchmarks stable

2024-03-28 Thread dcapwell
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 9ca1e1ac2d Ninja for CASSANDRA-19305: Disable EphemeralRead by default 
to get benchmarks stable
9ca1e1ac2d is described below

commit 9ca1e1ac2dd9d1841e22e3205e3feb8236b26487
Author: ci worker 
AuthorDate: Thu Mar 28 20:03:39 2024 -0700

Ninja for CASSANDRA-19305: Disable EphemeralRead by default to get 
benchmarks stable
---
 src/java/org/apache/cassandra/config/AccordSpec.java| 1 +
 src/java/org/apache/cassandra/config/DatabaseDescriptor.java| 4 
 .../org/apache/cassandra/cql3/statements/TransactionStatement.java  | 6 --
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/java/org/apache/cassandra/config/AccordSpec.java 
b/src/java/org/apache/cassandra/config/AccordSpec.java
index e76745a233..ab80ec4b32 100644
--- a/src/java/org/apache/cassandra/config/AccordSpec.java
+++ b/src/java/org/apache/cassandra/config/AccordSpec.java
@@ -69,4 +69,5 @@ public class AccordSpec
  * default transactional mode for tables created by this node when no 
transactional mode has been specified in the DDL
  */
 public TransactionalMode default_transactional_mode = 
TransactionalMode.off;
+public boolean ephemeralReadEnabled = false;
 }
diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java 
b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
index 7273f3c5c7..8e98f91b69 100644
--- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
+++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
@@ -5379,4 +5379,8 @@ public class DatabaseDescriptor
 {
 return conf.sai_sstable_indexes_per_query_fail_threshold;
 }
+
+public static boolean getAccordEphemeralReadEnabledEnabled() {
+return conf.accord.ephemeralReadEnabled;
+}
 }
diff --git 
a/src/java/org/apache/cassandra/cql3/statements/TransactionStatement.java 
b/src/java/org/apache/cassandra/cql3/statements/TransactionStatement.java
index fa09b8ec7e..68a8fd13f2 100644
--- a/src/java/org/apache/cassandra/cql3/statements/TransactionStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/TransactionStatement.java
@@ -331,8 +331,10 @@ public class TransactionStatement implements 
CQLStatement.CompositeCQLStatement,
 List reads = createNamedReads(options, state, 
ImmutableMap.of(), keySet::add);
 Keys txnKeys = toKeys(keySet);
 TxnRead read = createTxnRead(reads, txnKeys, null);
-Txn.Kind kind = txnKeys.size() == 1 && 
transactionalModeForSingleKey(txnKeys) == TransactionalMode.full
-? EphemeralRead : Read;
+Txn.Kind kind = txnKeys.size() == 1
+&& transactionalModeForSingleKey(txnKeys) == 
TransactionalMode.full
+&& 
DatabaseDescriptor.getAccordEphemeralReadEnabledEnabled()
+? EphemeralRead : Read;
 return new Txn.InMemory(kind, txnKeys, read, TxnQuery.ALL, null);
 }
 else


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) branch trunk updated (c2a78639de -> c9625e0102)

2024-03-26 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git


from c2a78639de ninja: add entry to CHANGES.txt for CASSANDRA-18951
 new ca0b77d743 Repair fuzz tests fail with paxos_variant: v2
 new c9625e0102 Merge branch 'cassandra-5.0' into trunk

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 src/java/org/apache/cassandra/gms/Gossiper.java|   2 +
 src/java/org/apache/cassandra/gms/IGossiper.java   |   3 +
 .../org/apache/cassandra/net/MessageDelivery.java  |   4 +
 .../org/apache/cassandra/net/MessagingService.java |   5 -
 .../org/apache/cassandra/repair/RepairJob.java |   2 +-
 .../org/apache/cassandra/repair/SharedContext.java |  40 +
 .../cassandra/service/ActiveRepairService.java |   4 +-
 .../apache/cassandra/service/StorageService.java   |   7 +-
 .../org/apache/cassandra/service/paxos/Paxos.java  |  12 +-
 .../cassandra/service/paxos/PaxosRepair.java   |   9 +-
 .../service/paxos/cleanup/PaxosCleanup.java|  34 ++---
 .../paxos/cleanup/PaxosCleanupComplete.java|  28 ++--
 .../cleanup/PaxosCleanupLocalCoordinator.java  |  22 +--
 .../service/paxos/cleanup/PaxosCleanupRequest.java |  70 -
 .../paxos/cleanup/PaxosCleanupResponse.java|   8 +-
 .../service/paxos/cleanup/PaxosCleanupSession.java |  54 +++
 .../paxos/cleanup/PaxosFinishPrepareCleanup.java   | 112 ++
 ...shPrepareCleanup.java => PaxosRepairState.java} | 138 +++---
 .../paxos/cleanup/PaxosStartPrepareCleanup.java|  38 +++--
 .../service/paxos/cleanup/PaxosTableRepairs.java   |  24 ---
 .../paxos/uncommitted/PaxosUncommittedTracker.java |   4 +-
 .../org/apache/cassandra/tcm/ClusterMetadata.java  |   7 +-
 .../distributed/test/PaxosRepairTest.java  |   7 +-
 .../org/apache/cassandra/repair/FuzzTestBase.java  | 162 ++---
 .../org/apache/cassandra/repair/RepairJobTest.java |   4 +-
 25 files changed, 459 insertions(+), 341 deletions(-)
 copy 
src/java/org/apache/cassandra/service/paxos/cleanup/{PaxosFinishPrepareCleanup.java
 => PaxosRepairState.java} (56%)


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) 01/01: Merge branch 'cassandra-5.0' into trunk

2024-03-26 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit c9625e0102dab66f41d3ef2338c54d499e73a8c5
Merge: c2a78639de ca0b77d743
Author: David Capwell 
AuthorDate: Tue Mar 26 13:04:03 2024 -0700

Merge branch 'cassandra-5.0' into trunk

 src/java/org/apache/cassandra/gms/Gossiper.java|   2 +
 src/java/org/apache/cassandra/gms/IGossiper.java   |   3 +
 .../org/apache/cassandra/net/MessageDelivery.java  |   4 +
 .../org/apache/cassandra/net/MessagingService.java |   5 -
 .../org/apache/cassandra/repair/RepairJob.java |   2 +-
 .../org/apache/cassandra/repair/SharedContext.java |  40 +
 .../cassandra/service/ActiveRepairService.java |   4 +-
 .../apache/cassandra/service/StorageService.java   |   7 +-
 .../org/apache/cassandra/service/paxos/Paxos.java  |  12 +-
 .../cassandra/service/paxos/PaxosRepair.java   |   9 +-
 .../service/paxos/cleanup/PaxosCleanup.java|  34 ++---
 .../paxos/cleanup/PaxosCleanupComplete.java|  28 ++--
 .../cleanup/PaxosCleanupLocalCoordinator.java  |  22 +--
 .../service/paxos/cleanup/PaxosCleanupRequest.java |  70 -
 .../paxos/cleanup/PaxosCleanupResponse.java|   8 +-
 .../service/paxos/cleanup/PaxosCleanupSession.java |  54 +++
 .../paxos/cleanup/PaxosFinishPrepareCleanup.java   | 112 ++
 ...shPrepareCleanup.java => PaxosRepairState.java} | 138 +++---
 .../paxos/cleanup/PaxosStartPrepareCleanup.java|  38 +++--
 .../service/paxos/cleanup/PaxosTableRepairs.java   |  24 ---
 .../paxos/uncommitted/PaxosUncommittedTracker.java |   4 +-
 .../org/apache/cassandra/tcm/ClusterMetadata.java  |   7 +-
 .../distributed/test/PaxosRepairTest.java  |   7 +-
 .../org/apache/cassandra/repair/FuzzTestBase.java  | 162 ++---
 .../org/apache/cassandra/repair/RepairJobTest.java |   4 +-
 25 files changed, 459 insertions(+), 341 deletions(-)

diff --cc src/java/org/apache/cassandra/gms/Gossiper.java
index 21d4ab5b8f,d907f76686..35cf57d3e1
--- a/src/java/org/apache/cassandra/gms/Gossiper.java
+++ b/src/java/org/apache/cassandra/gms/Gossiper.java
@@@ -1058,6 -1317,18 +1058,7 @@@ public class Gossiper implements IFailu
  return reqdEndpointState;
  }
  
 -/**
 - * determine which endpoint started up earlier
 - */
 -public int compareEndpointStartup(InetAddressAndPort addr1, 
InetAddressAndPort addr2)
 -{
 -EndpointState ep1 = getEndpointStateForEndpoint(addr1);
 -EndpointState ep2 = getEndpointStateForEndpoint(addr2);
 -assert ep1 != null && ep2 != null;
 -return ep1.getHeartBeatState().getGeneration() - 
ep2.getHeartBeatState().getGeneration();
 -}
 -
+ @Override
  public void notifyFailureDetector(Map 
remoteEpStateMap)
  {
  for (Entry entry : 
remoteEpStateMap.entrySet())
diff --cc src/java/org/apache/cassandra/net/MessagingService.java
index ceae703097,94586b41c8..d1e2f7b260
--- a/src/java/org/apache/cassandra/net/MessagingService.java
+++ b/src/java/org/apache/cassandra/net/MessagingService.java
@@@ -472,41 -449,8 +472,36 @@@ public class MessagingService extends M
  send(message.responseWith(response), message.respondTo());
  }
  
 +public  Future sendWithResponse(InetAddressAndPort to, 
Message msg)
 +{
 +Promise future = AsyncPromise.uncancellable();
 +MessagingService.instance().sendWithCallback(msg, to,
 + new 
RequestCallback()
 + {
 + @Override
 + public void 
onResponse(Message msg)
 + {
 + 
future.setSuccess(msg.payload);
 + }
 +
 + @Override
 + public void 
onFailure(InetAddressAndPort from, RequestFailureReason failureReason)
 + {
 + 
future.setFailure(new RuntimeException(failureReason.toString()));
 + }
 + });
 +
 +return future;
 +}
 +
- public  void respondWithFailure(RequestFailureReason reason, 
Message message)
- {
- send(Message.failureResponse(message.id(), message.expiresAtNanos(), 
reason), message.respondTo());
- }
- 
  public void send(Message message, InetAddressAndPort to, ConnectionType 
specifyConnection)
  {
 +if (isS

(cassandra) branch cassandra-5.0 updated: Repair fuzz tests fail with paxos_variant: v2

2024-03-26 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch cassandra-5.0
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/cassandra-5.0 by this push:
 new ca0b77d743 Repair fuzz tests fail with paxos_variant: v2
ca0b77d743 is described below

commit ca0b77d7434aa75528e0cb625889825d29c5f122
Author: David Capwell 
AuthorDate: Mon Mar 25 14:40:09 2024 -0700

Repair fuzz tests fail with paxos_variant: v2

patch by David Capwell; reviewed by Blake Eggleston, Ekaterina Dimitrova 
for CASSANDRA-19042
---
 src/java/org/apache/cassandra/gms/Gossiper.java|   2 +
 src/java/org/apache/cassandra/gms/IGossiper.java   |   3 +
 .../org/apache/cassandra/net/MessageDelivery.java  |   5 +
 .../org/apache/cassandra/net/MessagingService.java |   5 -
 .../org/apache/cassandra/repair/RepairJob.java |   2 +-
 .../org/apache/cassandra/repair/SharedContext.java |  54 
 .../cassandra/service/ActiveRepairService.java |   2 +-
 .../apache/cassandra/service/StorageService.java   |   7 +-
 .../org/apache/cassandra/service/paxos/Paxos.java  |  12 +-
 .../cassandra/service/paxos/PaxosRepair.java   |  43 ++
 .../service/paxos/cleanup/PaxosCleanup.java|  35 +++--
 .../paxos/cleanup/PaxosCleanupComplete.java|  28 ++--
 .../cleanup/PaxosCleanupLocalCoordinator.java  |  22 +--
 .../service/paxos/cleanup/PaxosCleanupRequest.java |  63 +
 .../paxos/cleanup/PaxosCleanupResponse.java|   8 +-
 .../service/paxos/cleanup/PaxosCleanupSession.java |  54 +++-
 .../paxos/cleanup/PaxosFinishPrepareCleanup.java   | 112 ++-
 ...shPrepareCleanup.java => PaxosRepairState.java} | 138 ---
 .../paxos/cleanup/PaxosStartPrepareCleanup.java|  41 +++---
 .../service/paxos/cleanup/PaxosTableRepairs.java   |  24 
 .../paxos/uncommitted/PaxosUncommittedTracker.java |   4 +-
 .../distributed/test/PaxosRepairTest.java  |   7 +-
 .../org/apache/cassandra/repair/FuzzTestBase.java  | 152 +++--
 .../org/apache/cassandra/repair/RepairJobTest.java |   4 +-
 24 files changed, 468 insertions(+), 359 deletions(-)

diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java 
b/src/java/org/apache/cassandra/gms/Gossiper.java
index adf465de21..d907f76686 100644
--- a/src/java/org/apache/cassandra/gms/Gossiper.java
+++ b/src/java/org/apache/cassandra/gms/Gossiper.java
@@ -1328,6 +1328,7 @@ public class Gossiper implements 
IFailureDetectionEventListener, GossiperMBean,
 return ep1.getHeartBeatState().getGeneration() - 
ep2.getHeartBeatState().getGeneration();
 }
 
+@Override
 public void notifyFailureDetector(Map 
remoteEpStateMap)
 {
 for (Entry entry : 
remoteEpStateMap.entrySet())
@@ -1624,6 +1625,7 @@ public class Gossiper implements 
IFailureDetectionEventListener, GossiperMBean,
 }
 
 @VisibleForTesting
+@Override
 public void applyStateLocally(Map 
epStateMap)
 {
 checkProperThreadForStateMutation();
diff --git a/src/java/org/apache/cassandra/gms/IGossiper.java 
b/src/java/org/apache/cassandra/gms/IGossiper.java
index 0e33526d22..aa9d95a97d 100644
--- a/src/java/org/apache/cassandra/gms/IGossiper.java
+++ b/src/java/org/apache/cassandra/gms/IGossiper.java
@@ -18,6 +18,7 @@
 
 package org.apache.cassandra.gms;
 
+import java.util.Map;
 import javax.annotation.Nullable;
 
 import org.apache.cassandra.locator.InetAddressAndPort;
@@ -30,6 +31,8 @@ public interface IGossiper
 
 @Nullable
 EndpointState getEndpointStateForEndpoint(InetAddressAndPort ep);
+void notifyFailureDetector(Map 
remoteEpStateMap);
+void applyStateLocally(Map epStateMap);
 @Nullable
 default CassandraVersion getReleaseVersion(InetAddressAndPort ep)
 {
diff --git a/src/java/org/apache/cassandra/net/MessageDelivery.java 
b/src/java/org/apache/cassandra/net/MessageDelivery.java
index dd8c6ceeda..36001c4988 100644
--- a/src/java/org/apache/cassandra/net/MessageDelivery.java
+++ b/src/java/org/apache/cassandra/net/MessageDelivery.java
@@ -18,6 +18,7 @@
 
 package org.apache.cassandra.net;
 
+import org.apache.cassandra.exceptions.RequestFailureReason;
 import org.apache.cassandra.locator.InetAddressAndPort;
 import org.apache.cassandra.utils.concurrent.Future;
 
@@ -28,4 +29,8 @@ public interface MessageDelivery
 public  void sendWithCallback(Message message, 
InetAddressAndPort to, RequestCallback cb, ConnectionType 
specifyConnection);
 public  Future> sendWithResult(Message 
message, InetAddressAndPort to);
 public  void respond(V response, Message message);
+public default void respondWithFailure(RequestFailureReason reason, 
Message message)
+{
+send(Message.failureResponse(message.id(), message.expiresAtNanos(), 
reason), message.respondTo());
+}
 }
diff --git a/src/java/org/apache/cassandra/net/MessagingService.java 
b/src/ja

(cassandra-accord) branch trunk updated: (Accord) AsyncChain.flatMap does not begin the result of the flatMap, which causes AsyncLoader to hang in some cases (#81)

2024-02-19 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new b37c43e  (Accord) AsyncChain.flatMap does not begin the result of the 
flatMap, which causes AsyncLoader to hang in some cases (#81)
b37c43e is described below

commit b37c43e5148228b309166d71080b5125faae85cc
Author: dcapwell 
AuthorDate: Mon Feb 19 14:36:04 2024 -0800

(Accord) AsyncChain.flatMap does not begin the result of the flatMap, which 
causes AsyncLoader to hang in some cases (#81)

patch by David Capwell; reviewed by Benedict Elliott Smith, David Capwell 
for CASSANDRA-19405
---
 accord-core/src/main/java/accord/utils/async/AsyncChains.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/accord-core/src/main/java/accord/utils/async/AsyncChains.java 
b/accord-core/src/main/java/accord/utils/async/AsyncChains.java
index fcc2956..579bbf9 100644
--- a/accord-core/src/main/java/accord/utils/async/AsyncChains.java
+++ b/accord-core/src/main/java/accord/utils/async/AsyncChains.java
@@ -570,7 +570,7 @@ public abstract class AsyncChains implements 
AsyncChain
 executor.execute(() -> {
 try
 {
-mapper.apply(v).addCallback(callback);
+mapper.apply(v).begin(callback);
 }
 catch (Throwable t)
 {


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) branch cep-15-accord updated: Ninja: Added check that command.route is not null when SPL is trying to inform, saw this event in CI and need more details to know what happened

2024-01-11 Thread dcapwell
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 cc9f18b16f Ninja: Added check that command.route is not null when SPL 
is trying to inform, saw this event in CI and need more details to know what 
happened
cc9f18b16f is described below

commit cc9f18b16f80dc69c9aa5ed37261ac7cdec3f27b
Author: ci worker 
AuthorDate: Thu Jan 11 09:23:43 2024 -0800

Ninja: Added check that command.route is not null when SPL is trying to 
inform, saw this event in CI and need more details to know what happened
---
 modules/accord | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/accord b/modules/accord
index 7c88978d1f..901a0868cd 16
--- a/modules/accord
+++ b/modules/accord
@@ -1 +1 @@
-Subproject commit 7c88978d1f9095a114787abd8a8dbb4df69aaa93
+Subproject commit 901a0868cdaf6426226e6bafb0675773e04668bd


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra-accord) branch trunk updated: Ninja: Added check that command.route is not null when SPL is trying to inform, saw this event in CI and need more details to know what happened

2024-01-11 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new 901a086  Ninja: Added check that command.route is not null when SPL is 
trying to inform, saw this event in CI and need more details to know what 
happened
901a086 is described below

commit 901a0868cdaf6426226e6bafb0675773e04668bd
Author: David Capwell 
AuthorDate: Thu Jan 11 09:22:24 2024 -0800

Ninja: Added check that command.route is not null when SPL is trying to 
inform, saw this event in CI and need more details to know what happened
---
 accord-core/src/main/java/accord/impl/SimpleProgressLog.java | 2 ++
 accord-core/src/main/java/accord/local/Command.java  | 8 +---
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/accord-core/src/main/java/accord/impl/SimpleProgressLog.java 
b/accord-core/src/main/java/accord/impl/SimpleProgressLog.java
index 32e432d..575252d 100644
--- a/accord-core/src/main/java/accord/impl/SimpleProgressLog.java
+++ b/accord-core/src/main/java/accord/impl/SimpleProgressLog.java
@@ -402,6 +402,8 @@ public class SimpleProgressLog implements 
ProgressLog.Factory
 {
 Command command = safeCommand.current();
 // make sure a quorum of the home shard is aware of the 
transaction, so we can rely on it to ensure progress
+if (command.route() == null)
+throw new AssertionError(String.format("Attempted to 
inform but route is not known for command %s", command));
 AsyncChain inform = inform(node, txnId, 
command.route());
 inform.begin((success, fail) -> {
 commandStore.execute(empty(), ignore -> {
diff --git a/accord-core/src/main/java/accord/local/Command.java 
b/accord-core/src/main/java/accord/local/Command.java
index 1f082a9..cb157b7 100644
--- a/accord-core/src/main/java/accord/local/Command.java
+++ b/accord-core/src/main/java/accord/local/Command.java
@@ -225,11 +225,12 @@ public abstract class Command implements CommonAttributes
 private final TxnId txnId;
 private final SaveStatus status;
 private final Durability durability;
+@Nullable
 private final Route route;
 private final Ballot promised;
 private final Listeners.Immutable listeners;
 
-private AbstractCommand(TxnId txnId, SaveStatus status, Durability 
durability, Route route, Ballot promised, Listeners.Immutable listeners)
+private AbstractCommand(TxnId txnId, SaveStatus status, Durability 
durability, @Nullable Route route, Ballot promised, Listeners.Immutable 
listeners)
 {
 this.txnId = txnId;
 this.status = validateCommandClass(status, getClass());
@@ -418,6 +419,7 @@ public abstract class Command implements CommonAttributes
  *or any route will do
  */
 @Override
+@Nullable
 public abstract Route route();
 
 /**
@@ -629,7 +631,7 @@ public abstract class Command implements CommonAttributes
 
 public static final class NotDefined extends AbstractCommand
 {
-NotDefined(TxnId txnId, SaveStatus status, Durability durability, 
Route route, Ballot promised, Listeners.Immutable listeners)
+NotDefined(TxnId txnId, SaveStatus status, Durability durability, 
@Nullable Route route, Ballot promised, Listeners.Immutable listeners)
 {
 super(txnId, status, durability, route, promised, listeners);
 }
@@ -706,7 +708,7 @@ public abstract class Command implements CommonAttributes
 this.result = result;
 }
 
-public Truncated(TxnId txnId, SaveStatus saveStatus, Durability 
durability, Route route, @Nullable Timestamp executeAt, Listeners.Immutable 
listeners, @Nullable Writes writes, @Nullable Result result)
+public Truncated(TxnId txnId, SaveStatus saveStatus, Durability 
durability, @Nullable Route route, @Nullable Timestamp executeAt, 
Listeners.Immutable listeners, @Nullable Writes writes, @Nullable Result result)
 {
 super(txnId, saveStatus, durability, route, Ballot.MAX, listeners);
 this.executeAt = executeAt;


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) branch cep-15-accord updated (1271f5f778 -> d95372b4d2)

2024-01-10 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch cep-15-accord
in repository https://gitbox.apache.org/repos/asf/cassandra.git


from 1271f5f778 Quick fix for AccordAddTableTest: make rejections catch up
 add d95372b4d2 (Accord): Bug fixes from CASSANDRA-18675 to better support 
adding keyspaces

No new revisions were added by this update.

Summary of changes:
 modules/accord|  2 +-
 .../org/apache/cassandra/service/accord/AccordService.java|  7 +++
 .../org/apache/cassandra/service/accord/IAccordService.java   |  9 -
 .../cassandra/distributed/test/accord/AccordTestBase.java | 11 ++-
 .../cassandra/simulator/test/AccordJournalSimulationTest.java |  5 +++--
 .../cassandra/service/accord/AccordMessageSinkTest.java   |  5 +++--
 6 files changed, 24 insertions(+), 15 deletions(-)


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) branch cep-15-accord updated (38f355ce7f -> eb1572e9f5)

2024-01-09 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch cep-15-accord
in repository https://gitbox.apache.org/repos/asf/cassandra.git


from 38f355ce7f Schema based accord fast path configuration
 add eb1572e9f5 (Accord) NPE while trying to serialize FoundKnownMap as 
value is null half the time but unexpected while serializing

No new revisions were added by this update.

Summary of changes:
 modules/accord |   2 +-
 src/java/org/apache/cassandra/db/Mutation.java |   8 +-
 .../cassandra/service/accord/IAccordService.java   |   2 +-
 .../accord/serializers/CheckStatusSerializers.java |   9 +-
 .../cassandra/distributed/test/ReadRepairTest.java |   1 -
 .../distributed/test/tcm/AccordAddTableTest.java   |  80 +++
 .../serializers/CheckStatusSerializersTest.java| 107 +
 .../apache/cassandra/utils/AccordGenerators.java   |  17 +++-
 8 files changed, 216 insertions(+), 10 deletions(-)
 create mode 100644 
test/distributed/org/apache/cassandra/distributed/test/tcm/AccordAddTableTest.java
 create mode 100644 
test/unit/org/apache/cassandra/service/accord/serializers/CheckStatusSerializersTest.java


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra-accord) branch trunk updated: (Accord) NPE while trying to serialize FoundKnownMap as value is null half the time but unexpected while serializing (#78)

2024-01-09 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new 0d8f60f  (Accord) NPE while trying to serialize FoundKnownMap as value 
is null half the time but unexpected while serializing (#78)
0d8f60f is described below

commit 0d8f60f742d443365a50115397ff1f0ab10fc694
Author: dcapwell 
AuthorDate: Tue Jan 9 15:49:24 2024 -0800

(Accord) NPE while trying to serialize FoundKnownMap as value is null half 
the time but unexpected while serializing (#78)

patch by David Capwell; reviewed by Blake Eggleston for CASSANDRA-19253
---
 .../main/java/accord/impl/CommandTimeseries.java   |  4 ++--
 .../src/test/java/accord/utils/AccordGens.java | 26 ++
 2 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/accord-core/src/main/java/accord/impl/CommandTimeseries.java 
b/accord-core/src/main/java/accord/impl/CommandTimeseries.java
index 4cc5046..d7d37dc 100644
--- a/accord-core/src/main/java/accord/impl/CommandTimeseries.java
+++ b/accord-core/src/main/java/accord/impl/CommandTimeseries.java
@@ -130,12 +130,12 @@ public class CommandTimeseries
 {
 if (result == null)
 {
-result = Timestamp.min(loader.txnId(data), 
loader.executeAt(data));
+result = Timestamp.nonNullOrMin(loader.txnId(data), 
loader.executeAt(data));
 }
 else
 {
 result = Timestamp.min(result, loader.txnId(data));
-result = Timestamp.min(result, loader.executeAt(data));
+result = Timestamp.nonNullOrMin(result, 
loader.executeAt(data));
 }
 }
 return result;
diff --git a/accord-core/src/test/java/accord/utils/AccordGens.java 
b/accord-core/src/test/java/accord/utils/AccordGens.java
index 87c012a..29b5839 100644
--- a/accord-core/src/test/java/accord/utils/AccordGens.java
+++ b/accord-core/src/test/java/accord/utils/AccordGens.java
@@ -29,6 +29,7 @@ import accord.api.RoutingKey;
 import accord.impl.IntHashKey;
 import accord.impl.IntKey;
 import accord.local.Node;
+import accord.primitives.Ballot;
 import accord.primitives.Deps;
 import accord.primitives.KeyDeps;
 import accord.primitives.Range;
@@ -55,6 +56,21 @@ public class AccordGens
 return nodes.map(Node.Id::new);
 }
 
+public static Gen.IntGen flags()
+{
+return rs -> rs.nextInt(0, 1 << 16);
+}
+
+public static Gen timestamps()
+{
+return timestamps(epochs()::nextLong, rs -> rs.nextLong(0, 
Long.MAX_VALUE), flags(), RandomSource::nextInt);
+}
+
+public static Gen timestamps(Gen.LongGen epochs, Gen.LongGen 
hlcs, Gen.IntGen flags, Gen.IntGen nodes)
+{
+return rs -> Timestamp.fromValues(epochs.nextLong(rs), 
hlcs.nextLong(rs), flags.nextInt(rs), new Node.Id(nodes.nextInt(rs)));
+}
+
 public static Gen txnIds()
 {
 return txnIds(epochs()::nextLong, rs -> rs.nextLong(0, 
Long.MAX_VALUE), RandomSource::nextInt);
@@ -67,6 +83,16 @@ public class AccordGens
 return rs -> new TxnId(epochs.nextLong(rs), hlcs.nextLong(rs), 
kinds.next(rs), domains.next(rs), new Node.Id(nodes.nextInt(rs)));
 }
 
+public static Gen ballot()
+{
+return ballot(epochs()::nextLong, rs -> rs.nextLong(0, 
Long.MAX_VALUE), flags(), RandomSource::nextInt);
+}
+
+public static Gen ballot(Gen.LongGen epochs, Gen.LongGen hlcs, 
Gen.IntGen flags, Gen.IntGen nodes)
+{
+return rs -> Ballot.fromValues(epochs.nextLong(rs), hlcs.nextLong(rs), 
flags.nextInt(rs), new Node.Id(nodes.nextInt(rs)));
+}
+
 public static Gen intKeys()
 {
 return rs -> new IntKey.Raw(rs.nextInt());


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra-accord) branch trunk updated: Fix flaky test accord.utils.RandomSourceTest.testBiasedInts (#73)

2024-01-05 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new 3ab92e6  Fix flaky test accord.utils.RandomSourceTest.testBiasedInts 
(#73)
3ab92e6 is described below

commit 3ab92e6de199ca08c354dc4abb46d5eaed9a1d41
Author: dcapwell 
AuthorDate: Fri Jan 5 09:28:07 2024 -0800

Fix flaky test accord.utils.RandomSourceTest.testBiasedInts (#73)

patch by David Capwell; reviewed by Benedict Elliott Smith for 
CASSANDRA-19114
---
 .../test/java/accord/utils/RandomSourceTest.java   | 116 +
 .../test/java/accord/utils/RandomTestRunner.java   |  69 
 2 files changed, 164 insertions(+), 21 deletions(-)

diff --git a/accord-core/src/test/java/accord/utils/RandomSourceTest.java 
b/accord-core/src/test/java/accord/utils/RandomSourceTest.java
index 3d5aaa1..31e2823 100644
--- a/accord-core/src/test/java/accord/utils/RandomSourceTest.java
+++ b/accord-core/src/test/java/accord/utils/RandomSourceTest.java
@@ -19,13 +19,14 @@
 package accord.utils;
 
 import java.util.Arrays;
-import java.util.Random;
 
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static accord.utils.RandomTestRunner.test;
+
 public class RandomSourceTest
 {
 private static final Logger logger = 
LoggerFactory.getLogger(RandomSourceTest.class);
@@ -33,11 +34,7 @@ public class RandomSourceTest
 @Test
 public void testBiasedInts()
 {
-RandomSource random = RandomSource.wrap(new Random());
-long seed = random.nextLong();
-logger.info("Seed: {}", seed);
-random.setSeed(seed);
-testBiasedInts(random, 1000, 10, 0.01, 0.1);
+test().check(random -> testBiasedInts(random, 1000, 10, 0.01, 
0.1));
 }
 
 private void testBiasedInts(RandomSource random, int tests, int perTest, 
double fudge, double perTestFudge)
@@ -54,7 +51,7 @@ public class RandomSourceTest
 overallDrift /= tests;
 Assertions.assertTrue(overallDrift < fudge);
 Assertions.assertTrue(overallDrift > -fudge);
-System.out.println(overallDrift);
+logger.info("{}", overallDrift);
 }
 
 private double testOneBiasedInts(RandomSource random, int min, int median, 
int max, int[] results, double fudge)
@@ -63,9 +60,9 @@ public class RandomSourceTest
 results[i] = random.nextBiasedInt(min, median, max);
 
 Arrays.sort(results);
-int i = Arrays.binarySearch(results, median);
+int i = ceil(results, median);
 if (i < 0) i = -1 - i;
-int j = Arrays.binarySearch(results, median + 1);
+int j = ceil(results, median + 1);
 if (j < 0) j = -2 - j;
 else --j;
 i -= results.length/2;
@@ -74,18 +71,14 @@ public class RandomSourceTest
 // find minimum distance of the target median value from the actual 
median value
 double distance = Math.abs(i) < Math.abs(j) ? i : j;
 double ratio = distance / results.length;
-Assertions.assertTrue(ratio < fudge);
+Assertions.assertTrue(ratio < fudge, () -> String.format("ratio (%,2f) 
>= fudge (%,2f); results.length (%,d)", ratio, fudge, results.length));
 return ratio;
 }
 
 @Test
 public void testBiasedLongs()
 {
-RandomSource random = RandomSource.wrap(new Random());
-long seed = random.nextLong();
-logger.info("Seed: {}", seed);
-random.setSeed(seed);
-testBiasedLongs(random, 1000, 10, 0.01, 0.1);
+test().check(random -> testBiasedLongs(random, 1000, 10, 0.01, 
0.1));
 }
 
 private void testBiasedLongs(RandomSource random, int tests, int perTest, 
double fudge, double perTestFudge)
@@ -102,7 +95,7 @@ public class RandomSourceTest
 overallDrift /= tests;
 Assertions.assertTrue(overallDrift < fudge);
 Assertions.assertTrue(overallDrift > -fudge);
-System.out.println(overallDrift);
+logger.info("{}", overallDrift);
 }
 
 private double testOneBiasedLongs(RandomSource random, int min, int 
median, int max, long[] results, double fudge)
@@ -111,18 +104,99 @@ public class RandomSourceTest
 results[i] = random.nextBiasedInt(min, median, max);
 
 Arrays.sort(results);
-int i = Arrays.binarySearch(results, median);
+int i = ceil(results, median);
 if (i < 0) i = -1 - i;
-int j = Arrays.binarySearch(results, median + 1);
+int j = ceil(results, median + 1);
 if (j < 0) j = -2 - j;
 else --j;
 i -= results.length/2;
 j -= results.length/2;
 
 // find minimum distance of the target median v

(cassandra-accord) branch CASSANDRA-18804 deleted (was d68c82a7)

2023-11-28 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch CASSANDRA-18804
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


 was d68c82a7 Fixed flakey test from RandomSourceTest as the binary search 
needed a ceil to find the first match in the list.  Fixed a bug where the seed 
can get clost or put into the wrong test

The revisions that were on this branch are still contained in
other references; therefore, this change does not discard any commits
from the repository.


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra-accord) 05/10: test stable

2023-11-28 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18804
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit a718cf4fd86dfa8ba775e2f35215de372205e0f6
Author: David Capwell 
AuthorDate: Tue Nov 28 14:53:06 2023 -0800

test stable
---
 .../src/test/java/accord/burn/BurnTest.java|   3 +-
 .../src/test/java/accord/impl/basic/Cluster.java   |   4 +-
 .../src/test/java/accord/local/CommandsTest.java   | 102 -
 3 files changed, 65 insertions(+), 44 deletions(-)

diff --git a/accord-core/src/test/java/accord/burn/BurnTest.java 
b/accord-core/src/test/java/accord/burn/BurnTest.java
index 684dd77c..722d2657 100644
--- a/accord-core/src/test/java/accord/burn/BurnTest.java
+++ b/accord-core/src/test/java/accord/burn/BurnTest.java
@@ -376,7 +376,8 @@ public class BurnTest
   queue::checkFailures,
   responseSink, random::fork, 
nowSupplier,
   topologyFactory, 
initialRequests::poll,
-  onSubmitted::set
+  onSubmitted::set,
+  ignore -> {}
 );
 for (Verifier verifier : validators.values())
 verifier.close();
diff --git a/accord-core/src/test/java/accord/impl/basic/Cluster.java 
b/accord-core/src/test/java/accord/impl/basic/Cluster.java
index cf21bc0c..a9dbcf5f 100644
--- a/accord-core/src/test/java/accord/impl/basic/Cluster.java
+++ b/accord-core/src/test/java/accord/impl/basic/Cluster.java
@@ -262,7 +262,8 @@ public class Cluster implements Scheduler
   BiFunction, AgentExecutor> nodeExecutorSupplier,
   Runnable checkFailures, 
Consumer responseSink,
   Supplier 
randomSupplier, Supplier nowSupplierSupplier,
-  TopologyFactory topologyFactory, 
Supplier in, Consumer noMoreWorkSignal)
+  TopologyFactory topologyFactory, 
Supplier in, Consumer noMoreWorkSignal,
+  Consumer> 
readySignal)
 {
 Topology topology = topologyFactory.toTopology(nodes);
 Map nodeMap = new LinkedHashMap<>();
@@ -344,6 +345,7 @@ public class Cluster implements Scheduler
 reconfigure.cancel();
 
durabilityScheduling.forEach(CoordinateDurabilityScheduling::stop);
 });
+readySignal.accept(nodeMap);
 
 Packet next;
 while ((next = in.get()) != null)
diff --git a/accord-core/src/test/java/accord/local/CommandsTest.java 
b/accord-core/src/test/java/accord/local/CommandsTest.java
index f91003e8..0e3133c9 100644
--- a/accord-core/src/test/java/accord/local/CommandsTest.java
+++ b/accord-core/src/test/java/accord/local/CommandsTest.java
@@ -21,6 +21,8 @@ package accord.local;
 import accord.api.Key;
 import accord.api.TestableConfigurationService;
 import accord.burn.random.FrequentLargeRange;
+import accord.coordinate.Timeout;
+import accord.coordinate.TopologyMismatch;
 import accord.impl.MessageListener;
 import accord.impl.PrefixedIntHashKey;
 import accord.impl.TopologyFactory;
@@ -47,55 +49,57 @@ import accord.utils.AccordGens;
 import accord.utils.Gen;
 import accord.utils.Gens;
 import accord.utils.RandomSource;
+
 import org.junit.jupiter.api.Test;
 
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
-import java.util.LinkedList;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.LongSupplier;
 import java.util.function.Supplier;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import static accord.Utils.listWriteTxn;
 import static accord.utils.Property.qt;
 import static accord.utils.Utils.addAll;
 
 class CommandsTest
 {
-private static final Node.Id N1 = new Node.Id(1);
+private static final Logger logger = 
LoggerFactory.getLogger(CommandsTest.class);
 
 @Test
-void addAndRemoveRangesValidate()
+void removeRangesValidate()
 {
-Gen> nodeGen = 
Gens.lists(AccordGens.nodes()).ofSizeBetween(1, 100);
+Gen> nodeGen = 
Gens.lists(AccordGens.nodes()).ofSizeBetween(1, 10);
 qt().check(rs -> {
 List nodes = nodeGen.next(rs);
-if (!nodes.contains(N1))
-nodes.add(N1);
 nodes.sort(Comparator.naturalOrder());
+

(cassandra-accord) 10/10: Fixed flakey test from RandomSourceTest as the binary search needed a ceil to find the first match in the list. Fixed a bug where the seed can get clost or put into the wron

2023-11-28 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18804
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit d68c82a71e5c8bee8ee7f7ba9b7e0fb0995e14ce
Author: David Capwell 
AuthorDate: Mon Nov 27 14:03:27 2023 -0800

Fixed flakey test from RandomSourceTest as the binary search needed a ceil 
to find the first match in the list.  Fixed a bug where the seed can get clost 
or put into the wrong test
---
 .../test/java/accord/utils/RandomSourceTest.java   | 122 +
 .../test/java/accord/utils/RandomTestRunner.java   |  69 
 2 files changed, 168 insertions(+), 23 deletions(-)

diff --git a/accord-core/src/test/java/accord/utils/RandomSourceTest.java 
b/accord-core/src/test/java/accord/utils/RandomSourceTest.java
index 3d5aaa10..00b7eff7 100644
--- a/accord-core/src/test/java/accord/utils/RandomSourceTest.java
+++ b/accord-core/src/test/java/accord/utils/RandomSourceTest.java
@@ -19,13 +19,14 @@
 package accord.utils;
 
 import java.util.Arrays;
-import java.util.Random;
 
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static accord.utils.RandomTestRunner.test;
+
 public class RandomSourceTest
 {
 private static final Logger logger = 
LoggerFactory.getLogger(RandomSourceTest.class);
@@ -33,11 +34,7 @@ public class RandomSourceTest
 @Test
 public void testBiasedInts()
 {
-RandomSource random = RandomSource.wrap(new Random());
-long seed = random.nextLong();
-logger.info("Seed: {}", seed);
-random.setSeed(seed);
-testBiasedInts(random, 1000, 10, 0.01, 0.1);
+test().check(random -> testBiasedInts(random, 1000, 10, 0.01, 
0.1));
 }
 
 private void testBiasedInts(RandomSource random, int tests, int perTest, 
double fudge, double perTestFudge)
@@ -54,7 +51,7 @@ public class RandomSourceTest
 overallDrift /= tests;
 Assertions.assertTrue(overallDrift < fudge);
 Assertions.assertTrue(overallDrift > -fudge);
-System.out.println(overallDrift);
+logger.info("{}", overallDrift);
 }
 
 private double testOneBiasedInts(RandomSource random, int min, int median, 
int max, int[] results, double fudge)
@@ -63,9 +60,9 @@ public class RandomSourceTest
 results[i] = random.nextBiasedInt(min, median, max);
 
 Arrays.sort(results);
-int i = Arrays.binarySearch(results, median);
+int i = firstBinarySearch(results, median);
 if (i < 0) i = -1 - i;
-int j = Arrays.binarySearch(results, median + 1);
+int j = firstBinarySearch(results, median + 1);
 if (j < 0) j = -2 - j;
 else --j;
 i -= results.length/2;
@@ -74,18 +71,14 @@ public class RandomSourceTest
 // find minimum distance of the target median value from the actual 
median value
 double distance = Math.abs(i) < Math.abs(j) ? i : j;
 double ratio = distance / results.length;
-Assertions.assertTrue(ratio < fudge);
+Assertions.assertTrue(ratio < fudge, () -> String.format("ratio (%,2f) 
>= fudge (%,2f); results.length (%,d)", ratio, fudge, results.length));
 return ratio;
 }
 
 @Test
 public void testBiasedLongs()
 {
-RandomSource random = RandomSource.wrap(new Random());
-long seed = random.nextLong();
-logger.info("Seed: {}", seed);
-random.setSeed(seed);
-testBiasedLongs(random, 1000, 10, 0.01, 0.1);
+test().check(random -> testBiasedLongs(random, 1000, 10, 0.01, 
0.1));
 }
 
 private void testBiasedLongs(RandomSource random, int tests, int perTest, 
double fudge, double perTestFudge)
@@ -102,7 +95,7 @@ public class RandomSourceTest
 overallDrift /= tests;
 Assertions.assertTrue(overallDrift < fudge);
 Assertions.assertTrue(overallDrift > -fudge);
-System.out.println(overallDrift);
+logger.info("{}", overallDrift);
 }
 
 private double testOneBiasedLongs(RandomSource random, int min, int 
median, int max, long[] results, double fudge)
@@ -111,18 +104,101 @@ public class RandomSourceTest
 results[i] = random.nextBiasedInt(min, median, max);
 
 Arrays.sort(results);
-int i = Arrays.binarySearch(results, median);
+int i = firstBinarySearch(results, median);
 if (i < 0) i = -1 - i;
-int j = Arrays.binarySearch(results, median + 1);
+int j = firstBinarySearch(results, median + 1);
 if (j < 0) j = -2 - j;
 else --j;
-i -= results.length/2;
-j -= results.length/2;
+i -= Math.abs(results.length/2);
+j -= Math.abs(results.length/2);
 
 // find minimum distance of the target median v

(cassandra-accord) branch CASSANDRA-18804 created (now d68c82a7)

2023-11-28 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch CASSANDRA-18804
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


  at d68c82a7 Fixed flakey test from RandomSourceTest as the binary search 
needed a ceil to find the first match in the list.  Fixed a bug where the seed 
can get clost or put into the wrong test

This branch includes the following new commits:

 new 7d01dba5 CASSANDRA-18804: (Accord): Bug fixes from CASSANDRA-18675 to 
better support adding keyspaces
 new 96fc0957 formatting
 new 1810a84b working on backporting tests to show invalidate doesnt break 
on topology drop
 new ee0fcf21 make it so we can compute prefix keyx within ranges
 new a718cf4f test stable
 new d21d8cd1 didnt see Preempted yet, but just in case
 new f4b32440 revert overrding test jvm args as a different way did that 
and rebasiing didnt conflict
 new f7f64aa6 removed while true in burn test
 new b8a2adc3 revert cache logic
 new d68c82a7 Fixed flakey test from RandomSourceTest as the binary search 
needed a ceil to find the first match in the list.  Fixed a bug where the seed 
can get clost or put into the wrong test

The 10 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra-accord) 06/10: didnt see Preempted yet, but just in case

2023-11-28 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18804
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit d21d8cd133e3e9919e8bbc66ae824a0174433d57
Author: David Capwell 
AuthorDate: Tue Nov 28 14:54:49 2023 -0800

didnt see Preempted yet, but just in case
---
 accord-core/src/test/java/accord/local/CommandsTest.java | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/accord-core/src/test/java/accord/local/CommandsTest.java 
b/accord-core/src/test/java/accord/local/CommandsTest.java
index 0e3133c9..47d3b4ae 100644
--- a/accord-core/src/test/java/accord/local/CommandsTest.java
+++ b/accord-core/src/test/java/accord/local/CommandsTest.java
@@ -21,6 +21,7 @@ package accord.local;
 import accord.api.Key;
 import accord.api.TestableConfigurationService;
 import accord.burn.random.FrequentLargeRange;
+import accord.coordinate.Preempted;
 import accord.coordinate.Timeout;
 import accord.coordinate.TopologyMismatch;
 import accord.impl.MessageListener;
@@ -117,10 +118,9 @@ class CommandsTest
 }
 else if (!(failure instanceof TopologyMismatch))
 {
-if (failure instanceof Timeout)
+if (failure instanceof Timeout || failure 
instanceof Preempted)
 {
-// TODO (now): we don't know the result...
-logger.warn("Timeout seen...");
+logger.warn("{} seen...", 
failure.getClass().getSimpleName());
 }
 else
 {


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra-accord) 09/10: revert cache logic

2023-11-28 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18804
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit b8a2adc3d9ee7b25ce31ac845559b6f81d341db9
Author: David Capwell 
AuthorDate: Tue Nov 28 15:20:49 2023 -0800

revert cache logic
---
 .../java/accord/impl/InMemoryCommandStore.java | 59 +-
 1 file changed, 2 insertions(+), 57 deletions(-)

diff --git a/accord-core/src/main/java/accord/impl/InMemoryCommandStore.java 
b/accord-core/src/main/java/accord/impl/InMemoryCommandStore.java
index db6be242..35fa6f13 100644
--- a/accord-core/src/main/java/accord/impl/InMemoryCommandStore.java
+++ b/accord-core/src/main/java/accord/impl/InMemoryCommandStore.java
@@ -24,7 +24,6 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.NavigableMap;
@@ -101,11 +100,6 @@ public abstract class InMemoryCommandStore extends 
CommandStore
 
 private final TreeMap rangeCommands = new TreeMap<>();
 private final TreeMap historicalRangeCommands = new 
TreeMap<>();
-/**
- * Since this cache is fully in-memory the store does not hit states that 
most stores will; that data is not in-memory!
- * To simulate such behaviors, a "cache" is used to state what is 
in-memory vs what needs to be loaded.
- */
-private final Set cache = new LinkedHashSet<>();
 protected Timestamp maxRedundant = Timestamp.NONE;
 
 private InMemorySafeStore current;
@@ -138,7 +132,7 @@ public abstract class InMemoryCommandStore extends 
CommandStore
 
 public GlobalCommand ifPresent(TxnId txnId)
 {
-return cache.contains(txnId) ? commands.get(txnId) : null;
+return commands.get(txnId);
 }
 
 public GlobalCommand command(TxnId txnId)
@@ -233,7 +227,7 @@ public abstract class InMemoryCommandStore extends 
CommandStore
 
 public GlobalCommandsForKey ifPresent(Key key)
 {
-return cache.contains(key) ? commandsForKey.get(key) : null;
+return commandsForKey.get(key);
 }
 
 public GlobalCommandsForKey commandsForKey(Key key)
@@ -418,58 +412,9 @@ public abstract class InMemoryCommandStore extends 
CommandStore
 // load range cfks here
 }
 }
-maybeUpdateCache(commands, commandsForKeys);
 return createSafeStore(context, ranges, commands, commandsForKeys);
 }
 
-private void maybeUpdateCache(Map commands, 
Map commandsForKeys)
-{
-int cacheSize = this.cache.size();
-boolean canEvict = true;
-for (InMemorySafeCommand cmd : commands.values())
-{
-if (this.cache.contains(cmd.txnId())) continue;
-if (canEvict && ++cacheSize > 10)
-{
-// need to remove 1 element from the cache!
-boolean removed = false;
-Iterator it = cache.iterator();
-while (it.hasNext())
-{
-Object next = it.next();
-if (commands.containsKey(next) || 
commandsForKeys.containsKey(next)) continue;
-it.remove();
-removed = true;
-if (--cacheSize == 10)
-break;
-}
-if (!removed) canEvict = false;
-}
-this.cache.add(cmd.txnId());
-}
-for (InMemorySafeCommandsForKey cfk : commandsForKeys.values())
-{
-if (this.cache.contains(cfk.key())) continue;
-if (canEvict && ++cacheSize > 10)
-{
-// need to remove 1 element from the cache!
-boolean removed = false;
-Iterator it = cache.iterator();
-while (it.hasNext())
-{
-Object next = it.next();
-if (commands.containsKey(next) || 
commandsForKeys.containsKey(next)) continue;
-it.remove();
-removed = true;
-if (--cacheSize == 10)
-break;
-}
-if (!removed) canEvict = false;
-}
-this.cache.add(cfk.key());
-}
-}
-
 public SafeCommandStore beginOperation(PreLoadContext context)
 {
 if (current != null)


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra-accord) 07/10: revert overrding test jvm args as a different way did that and rebasiing didnt conflict

2023-11-28 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18804
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit f4b324404e957242e56b8601fe4bc4483f7133f9
Author: David Capwell 
AuthorDate: Tue Nov 28 15:18:14 2023 -0800

revert overrding test jvm args as a different way did that and rebasiing 
didnt conflict
---
 buildSrc/src/main/groovy/accord.java-conventions.gradle | 4 
 1 file changed, 4 deletions(-)

diff --git a/buildSrc/src/main/groovy/accord.java-conventions.gradle 
b/buildSrc/src/main/groovy/accord.java-conventions.gradle
index 109dd722..f77a0c07 100644
--- a/buildSrc/src/main/groovy/accord.java-conventions.gradle
+++ b/buildSrc/src/main/groovy/accord.java-conventions.gradle
@@ -49,10 +49,6 @@ test {
 jvmArgs += ['-XX:+HeapDumpOnOutOfMemoryError', 
"-XX:HeapDumpPath=${buildDir}"]
 }
 
-tasks.withType(Test) {
-  jvmArgs '-XX:+HeapDumpOnOutOfMemoryError'
-}
-
 dependencies {
 testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
 testImplementation 'org.junit.jupiter:junit-jupiter-params:5.7.0'


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra-accord) 08/10: removed while true in burn test

2023-11-28 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18804
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit f7f64aa679706b03376b464a001f2c2e4ec9aa76
Author: David Capwell 
AuthorDate: Tue Nov 28 15:18:21 2023 -0800

removed while true in burn test
---
 accord-core/src/test/java/accord/burn/BurnTest.java | 1 -
 1 file changed, 1 deletion(-)

diff --git a/accord-core/src/test/java/accord/burn/BurnTest.java 
b/accord-core/src/test/java/accord/burn/BurnTest.java
index 722d2657..ca247e9f 100644
--- a/accord-core/src/test/java/accord/burn/BurnTest.java
+++ b/accord-core/src/test/java/accord/burn/BurnTest.java
@@ -456,7 +456,6 @@ public class BurnTest
 @Timeout(value = 3, unit = TimeUnit.MINUTES)
 public void testOne()
 {
-while (true)
 run(ThreadLocalRandom.current().nextLong(), 1000);
 }
 


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra-accord) 04/10: make it so we can compute prefix keyx within ranges

2023-11-28 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18804
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit ee0fcf21e4f6a7d6db4e7b3e94d9878493f07e2c
Author: David Capwell 
AuthorDate: Tue Nov 28 14:19:26 2023 -0800

make it so we can compute prefix keyx within ranges
---
 .../test/java/accord/impl/PrefixedIntHashKey.java  | 25 ---
 .../src/test/java/accord/local/CommandsTest.java   | 21 ++
 .../java/accord/primitives/AbstractRangesTest.java | 72 +++-
 .../src/test/java/accord/utils/AccordGens.java | 79 +-
 .../src/test/java/accord/utils/CRCUtils.java   | 51 ++
 .../src/test/java/accord/utils/CRCUtilsTest.java   | 40 +++
 6 files changed, 194 insertions(+), 94 deletions(-)

diff --git a/accord-core/src/test/java/accord/impl/PrefixedIntHashKey.java 
b/accord-core/src/test/java/accord/impl/PrefixedIntHashKey.java
index 28618f60..2cf1b504 100644
--- a/accord-core/src/test/java/accord/impl/PrefixedIntHashKey.java
+++ b/accord-core/src/test/java/accord/impl/PrefixedIntHashKey.java
@@ -18,22 +18,24 @@
 
 package accord.impl;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import javax.annotation.Nonnull;
+
 import accord.api.RoutingKey;
 import accord.local.ShardDistributor;
 import accord.primitives.Ranges;
 import accord.primitives.RoutableKey;
+import accord.utils.CRCUtils;
 import accord.utils.Invariants;
 
-import javax.annotation.Nonnull;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.zip.CRC32;
-
 import static accord.utils.Utils.toArray;
 
 public class PrefixedIntHashKey implements RoutableKey
 {
+public static final int MIN_KEY = Integer.MIN_VALUE + 1;
+
 public static class Splitter implements 
ShardDistributor.EvenSplit.Splitter
 {
 @Override
@@ -180,7 +182,7 @@ public class PrefixedIntHashKey implements RoutableKey
 else
 {
 if (key == Integer.MIN_VALUE)
-throw new IllegalArgumentException();
+throw new IllegalArgumentException("Key was int MIN_VALUE but 
not for hash");
 this.key = key;
 this.hash = hash(key);
 }
@@ -199,6 +201,8 @@ public class PrefixedIntHashKey implements RoutableKey
 public static accord.primitives.Range[] ranges(int prefix, int count)
 {
 List result = new ArrayList<>(count);
+// The hash is crc32, which is 32 bits, but to keep this logic simple 
shrink the domain to 16 bits.
+// Since this method is only for testing, changing this to 32 bits in 
the future is fine.
 long delta = 0x / count;
 long start = 0;
 Hash prev = new Hash(prefix, (int) start);
@@ -246,12 +250,7 @@ public class PrefixedIntHashKey implements RoutableKey
 
 static int hash(int key)
 {
-CRC32 crc32c = new CRC32();
-crc32c.update(key);
-crc32c.update(key >> 8);
-crc32c.update(key >> 16);
-crc32c.update(key >> 24);
-return (int) crc32c.getValue() & 0x;
+return CRCUtils.crc32LittleEnding(key);
 }
 
 @Override
diff --git a/accord-core/src/test/java/accord/local/CommandsTest.java 
b/accord-core/src/test/java/accord/local/CommandsTest.java
index 967ceecc..f91003e8 100644
--- a/accord-core/src/test/java/accord/local/CommandsTest.java
+++ b/accord-core/src/test/java/accord/local/CommandsTest.java
@@ -32,12 +32,10 @@ import accord.impl.basic.RandomDelayQueue;
 import accord.impl.basic.SimulatedDelayedExecutorService;
 import accord.impl.list.ListAgent;
 import accord.messages.MessageType;
-import accord.messages.PreAccept;
 import accord.messages.ReplyContext;
 import accord.messages.Request;
 import accord.primitives.Timestamp;
 import accord.topology.TopologyUtils;
-import accord.primitives.FullRoute;
 import accord.primitives.Keys;
 import accord.primitives.Range;
 import accord.primitives.Ranges;
@@ -65,7 +63,6 @@ import java.util.function.LongSupplier;
 import java.util.function.Supplier;
 
 import static accord.Utils.listWriteTxn;
-import static accord.Utils.writeTxn;
 import static accord.utils.Property.qt;
 import static accord.utils.Utils.addAll;
 
@@ -77,7 +74,7 @@ class CommandsTest
 void addAndRemoveRangesValidate()
 {
 Gen> nodeGen = 
Gens.lists(AccordGens.nodes()).ofSizeBetween(1, 100);
-qt().withSeed(-8991099031722289106L).check(rs -> {
+qt().check(rs -> {
 List nodes = nodeGen.next(rs);
 if (!nodes.contains(N1))
 nodes.add(N1);
@@ -86,8 +83,7 @@ class CommandsTest
 Range[] prefix0 = PrefixedIntHashKey.ranges(0, nodes.size());
 Range[] prefix1 = PrefixedIntHashKey.ranges(1, nodes.size());
 Range[] allRanges = addAll(prefix0, prefix1);
-//boole

(cassandra-accord) 03/10: working on backporting tests to show invalidate doesnt break on topology drop

2023-11-28 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18804
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit 1810a84b763e98134d36dc692889735486d84062
Author: David Capwell 
AuthorDate: Mon Nov 27 16:38:59 2023 -0800

working on backporting tests to show invalidate doesnt break on topology 
drop
---
 accord-core/src/main/java/accord/utils/Utils.java  |   9 +
 accord-core/src/test/java/accord/Utils.java|  15 ++
 .../src/test/java/accord/burn/BurnTest.java|   1 +
 .../src/test/java/accord/impl/basic/Cluster.java   |   2 +-
 .../java/accord/impl/basic/RandomDelayQueue.java   |   2 +-
 .../src/test/java/accord/local/CommandsTest.java   | 206 +
 .../src/test/java/accord/utils/AccordGens.java |  15 ++
 7 files changed, 248 insertions(+), 2 deletions(-)

diff --git a/accord-core/src/main/java/accord/utils/Utils.java 
b/accord-core/src/main/java/accord/utils/Utils.java
index 696edb94..1358db22 100644
--- a/accord-core/src/main/java/accord/utils/Utils.java
+++ b/accord-core/src/main/java/accord/utils/Utils.java
@@ -18,6 +18,7 @@
 
 package accord.utils;
 
+import java.lang.reflect.Array;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
@@ -117,4 +118,12 @@ public class Utils
 {
 return set instanceof ImmutableBitSet ? (ImmutableBitSet) set : new 
ImmutableBitSet(set);
 }
+
+public static  T[] addAll(T[] first, T[] second)
+{
+T[] array = (T[]) 
Array.newInstance(first.getClass().getComponentType(), first.length + 
second.length);
+System.arraycopy(first, 0, array, 0, first.length);
+System.arraycopy(second, 0, array, first.length, second.length);
+return array;
+}
 }
diff --git a/accord-core/src/test/java/accord/Utils.java 
b/accord-core/src/test/java/accord/Utils.java
index ac36fb16..40d4df08 100644
--- a/accord-core/src/test/java/accord/Utils.java
+++ b/accord-core/src/test/java/accord/Utils.java
@@ -23,9 +23,11 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
 
 import com.google.common.collect.Sets;
 
+import accord.api.Key;
 import accord.api.MessageSink;
 import accord.api.Scheduler;
 import accord.coordinate.TxnExecute;
@@ -36,6 +38,9 @@ import accord.impl.IntKey;
 import accord.impl.SimpleProgressLog;
 import accord.impl.SizeOfIntersectionSorter;
 import accord.impl.TestAgent;
+import accord.impl.list.ListQuery;
+import accord.impl.list.ListRead;
+import accord.impl.list.ListUpdate;
 import accord.impl.mock.MockCluster;
 import accord.impl.mock.MockConfigurationService;
 import accord.impl.mock.MockStore;
@@ -118,6 +123,16 @@ public class Utils
 return new Txn.InMemory(ranges, MockStore.read(ranges), 
MockStore.QUERY, MockStore.update(ranges));
 }
 
+public static Txn listWriteTxn(Node.Id client, Keys keys)
+{
+ListUpdate update = new ListUpdate(Function.identity());
+for (Key k : keys)
+update.put(k, 1);
+ListRead read = new ListRead(Function.identity(), keys, keys);
+ListQuery query = new ListQuery(client, keys.size());
+return new Txn.InMemory(keys, read, query, update);
+}
+
 public static Txn readTxn(Keys keys)
 {
 return new Txn.InMemory(keys, MockStore.read(keys), MockStore.QUERY);
diff --git a/accord-core/src/test/java/accord/burn/BurnTest.java 
b/accord-core/src/test/java/accord/burn/BurnTest.java
index cba50420..684dd77c 100644
--- a/accord-core/src/test/java/accord/burn/BurnTest.java
+++ b/accord-core/src/test/java/accord/burn/BurnTest.java
@@ -455,6 +455,7 @@ public class BurnTest
 @Timeout(value = 3, unit = TimeUnit.MINUTES)
 public void testOne()
 {
+while (true)
 run(ThreadLocalRandom.current().nextLong(), 1000);
 }
 
diff --git a/accord-core/src/test/java/accord/impl/basic/Cluster.java 
b/accord-core/src/test/java/accord/impl/basic/Cluster.java
index 43b8920e..cf21bc0c 100644
--- a/accord-core/src/test/java/accord/impl/basic/Cluster.java
+++ b/accord-core/src/test/java/accord/impl/basic/Cluster.java
@@ -504,7 +504,7 @@ public class Cluster implements Scheduler
 case RANDOM_BIDIRECTIONAL:
 case RANDOM_UNIDIRECTIONAL:
 boolean bidirectional = kind == RANDOM_BIDIRECTIONAL;
-int count = random.nextInt(bidirectional || 
random.nextBoolean() ? nodesList.size() : (nodesList.size() * 
nodesList.size())/2);
+int count = random.nextInt(bidirectional || 
random.nextBoolean() ? nodesList.size() : Math.max(1, (nodesList.size() * 
nodesList.size())/2));
 return randomOverrides(bidirectional, linkOverride, count, 
nodesList, random, defaultLinks);
 }
 };
diff --git a/accord-core/src/test/java/accord/impl/basic

(cassandra-accord) 02/10: formatting

2023-11-28 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18804
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit 96fc095758ed6b1ce938e52d871106c7d75df79a
Author: David Capwell 
AuthorDate: Mon Nov 27 14:38:13 2023 -0800

formatting
---
 accord-core/src/test/java/accord/impl/basic/Cluster.java | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/accord-core/src/test/java/accord/impl/basic/Cluster.java 
b/accord-core/src/test/java/accord/impl/basic/Cluster.java
index 0473c34c..43b8920e 100644
--- a/accord-core/src/test/java/accord/impl/basic/Cluster.java
+++ b/accord-core/src/test/java/accord/impl/basic/Cluster.java
@@ -259,10 +259,10 @@ public class Cluster implements Scheduler
 }
 
 public static Map run(Id[] nodes, MessageListener 
messageListener, Supplier queueSupplier,
-  BiFunction, AgentExecutor> nodeExecutorSupplier,
-  Runnable checkFailures, 
Consumer responseSink,
-  Supplier 
randomSupplier, Supplier nowSupplierSupplier,
-  TopologyFactory 
topologyFactory, Supplier in, Consumer noMoreWorkSignal)
+  BiFunction, AgentExecutor> nodeExecutorSupplier,
+  Runnable checkFailures, 
Consumer responseSink,
+  Supplier 
randomSupplier, Supplier nowSupplierSupplier,
+  TopologyFactory topologyFactory, 
Supplier in, Consumer noMoreWorkSignal)
 {
 Topology topology = topologyFactory.toTopology(nodes);
 Map nodeMap = new LinkedHashMap<>();


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) branch cep-15-accord updated (99fc9e28cc -> 8645cf49af)

2023-11-27 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch cep-15-accord
in repository https://gitbox.apache.org/repos/asf/cassandra.git


from 99fc9e28cc Ninja for CASSANDRA-19045: make sure to use https rather 
than git@ for submodule so its portable
 add 8645cf49af Ninja for CASSANDRA-19045: use the latest sha from trunk 
rather than an old one from 10 months ago

No new revisions were added by this update.

Summary of changes:
 modules/accord | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) branch cep-15-accord updated: Ninja for CASSANDRA-19045: make sure to use https rather than git@ for submodule so its portable

2023-11-27 Thread dcapwell
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 99fc9e28cc Ninja for CASSANDRA-19045: make sure to use https rather 
than git@ for submodule so its portable
99fc9e28cc is described below

commit 99fc9e28cc6b91a3f500715efeafc77f4d19f306
Author: David Capwell 
AuthorDate: Mon Nov 27 10:32:35 2023 -0800

Ninja for CASSANDRA-19045: make sure to use https rather than git@ for 
submodule so its portable
---
 .gitmodules | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitmodules b/.gitmodules
index c85d47c922..616dacf610 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,4 +1,4 @@
 [submodule "modules/accord"]
path = modules/accord
-   url = g...@github.com:apache/cassandra-accord
+   url = https://github.com/apache/cassandra-accord.git
branch = trunk


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra-dtest) branch trunk updated: Python DTest does not release CQL connections, which can cause containers to hang for 2 hours trying to connect to a server thats already gone

2023-11-15 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-dtest.git


The following commit(s) were added to refs/heads/trunk by this push:
 new b355b84c Python DTest does not release CQL connections, which can 
cause containers to hang for 2 hours trying to connect to a server thats 
already gone
b355b84c is described below

commit b355b84c5f7b53d390822332215e3751df562559
Author: David Capwell 
AuthorDate: Wed Nov 15 13:09:06 2023 -0500

Python DTest does not release CQL connections, which can cause containers 
to hang for 2 hours trying to connect to a server thats already gone

patch by David Capwell; reviewed by Brandon Williams for CASSANDRA-19028
---
 dtest.py   | 6 ++
 dtest_setup.py | 5 -
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/dtest.py b/dtest.py
index 6d753d36..da7b31a7 100644
--- a/dtest.py
+++ b/dtest.py
@@ -249,6 +249,12 @@ class Tester(object):
 self.dtest_config = fixture_dtest_setup.dtest_config
 return None
 
+@pytest.fixture(autouse=True)
+def cleanup_connections(self):
+yield None
+logger.info('Cleaning up CQL Connections...')
+self.fixture_dtest_setup.cleanup_connections()
+
 def assert_supported_upgrade_path(self, from_version, to_version):
 for path in build_upgrade_pairs():
 if from_version.startswith(path.starting_meta.family) and 
to_version.startswith(path.upgrade_meta.family):
diff --git a/dtest_setup.py b/dtest_setup.py
index 1a82555b..a1f661ac 100644
--- a/dtest_setup.py
+++ b/dtest_setup.py
@@ -417,11 +417,14 @@ class DTestSetup(object):
 os.rmdir(self.test_path)
 self.cleanup_last_test_dir()
 
-def cleanup_and_replace_cluster(self):
+def cleanup_connections(self):
 for con in self.connections:
 con.cluster.shutdown()
 self.connections = []
 
+def cleanup_and_replace_cluster(self):
+self.cleanup_connections()
+
 self.cleanup_cluster()
 self.test_path = self.get_test_path()
 self.initialize_cluster(self.create_cluster_func)


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra-accord) branch trunk updated: Ninja for CASSANDRA-18874: When using Elle make sure to set -Djava.awt.headless=true so rhizome does not try to spin up a GUI. Make the build timeout after 20

2023-11-08 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new bed79d2c Ninja for CASSANDRA-18874: When using Elle make sure to set 
-Djava.awt.headless=true so rhizome does not try to spin up a GUI.  Make the 
build timeout after 20m as a successful build takes around 10m (the default 
timeout)
bed79d2c is described below

commit bed79d2c4a1564857c8ac53b66db15d65e5a3b5f
Author: David Capwell 
AuthorDate: Wed Nov 8 15:05:51 2023 -0800

Ninja for CASSANDRA-18874: When using Elle make sure to set 
-Djava.awt.headless=true so rhizome does not try to spin up a GUI.  Make the 
build timeout after 20m as a successful build takes around 10m (the default 
timeout)
---
 .circleci/config.yml  | 7 +--
 accord-core/src/test/java/accord/verify/ElleVerifier.java | 3 +++
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 2f59771f..c78356f0 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -80,8 +80,11 @@ jobs:
 - ~/.gradle
   key: v1-dependencies-{{ checksum "build.gradle" }}-{{ checksum 
"accord-core/build.gradle" }}-{{ checksum "accord-maelstrom/build.gradle" }}-{{ 
checksum "gradle/wrapper/gradle-wrapper.properties" }}
 
-  # run tests!
-  - run: ./gradlew check
+  - run:
+  name: Run Tests
+  command: ./gradlew check
+  no_output_timeout: 20m
+
   - run:
   name: Save Test Results
   command: |
diff --git a/accord-core/src/test/java/accord/verify/ElleVerifier.java 
b/accord-core/src/test/java/accord/verify/ElleVerifier.java
index c4b228ec..a336ae58 100644
--- a/accord-core/src/test/java/accord/verify/ElleVerifier.java
+++ b/accord-core/src/test/java/accord/verify/ElleVerifier.java
@@ -281,6 +281,9 @@ public class ElleVerifier implements Verifier
 {
 static
 {
+// Needed else elle loads rhizome which then would call 
java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() which fails in CI
+System.setProperty("java.awt.headless", "true");
+
 IFn require = Clojure.var("clojure.core", "require");
 require.invoke(Clojure.read("elle.list-append"));
 require.invoke(Clojure.read("jepsen.history"));


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra-accord) branch trunk updated: Ninja fix for CASSANDRA-18874. Make sure to add clojars repo to accord-core to pick up elle

2023-11-07 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new 3056d13b Ninja fix for CASSANDRA-18874.  Make sure to add clojars repo 
to accord-core to pick up elle
3056d13b is described below

commit 3056d13bc8c45a22ec794e0979d02f469cc4e209
Author: David Capwell 
AuthorDate: Tue Nov 7 10:56:51 2023 -0800

Ninja fix for CASSANDRA-18874.  Make sure to add clojars repo to 
accord-core to pick up elle
---
 accord-core/build.gradle | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/accord-core/build.gradle b/accord-core/build.gradle
index db395aaf..46b29308 100644
--- a/accord-core/build.gradle
+++ b/accord-core/build.gradle
@@ -26,6 +26,12 @@ java {
   withSourcesJar()
 }
 
+repositories {
+mavenCentral()
+// needed for clojure dependencies
+maven { url "https://clojars.org/repo; }
+}
+
 dependencies {
 implementation group: "com.google.guava", name: "guava", version: 
"27.0-jre"
 implementation group: "net.ju-n.compile-command-annotations", name: 
"compile-command-annotations", version: "1.2.0"


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra-accord) branch trunk updated: Add Jepsen's Elle to Accord and Paxos validation (#67)

2023-11-07 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new 11ced982 Add Jepsen's Elle to Accord and Paxos validation (#67)
11ced982 is described below

commit 11ced982a6e78810268677b4b6aeed90bc06e25b
Author: dcapwell 
AuthorDate: Tue Nov 7 10:15:19 2023 -0800

Add Jepsen's Elle to Accord and Paxos validation (#67)


patch by David Capwell, Jaroslaw Kijanowski; reviewed by Caleb Rackliffe 
for CASSANDRA-18874
---
 accord-core/build.gradle   |  10 +
 .../src/test/java/accord/burn/BurnTest.java|  42 ++-
 .../test/java/accord/verify/CompositeVerifier.java |  81 +
 .../src/test/java/accord/verify/ElleVerifier.java  | 381 +
 .../test/java/accord/verify/ElleVerifierTest.java  | 138 
 .../verify/StrictSerializabilityVerifier.java  |  29 +-
 .../src/test/java/accord/verify/Verifier.java  |  36 ++
 7 files changed, 701 insertions(+), 16 deletions(-)

diff --git a/accord-core/build.gradle b/accord-core/build.gradle
index df6203b9..db395aaf 100644
--- a/accord-core/build.gradle
+++ b/accord-core/build.gradle
@@ -36,6 +36,16 @@ dependencies {
 implementation 'org.agrona:agrona:1.17.1'
 
 testImplementation group: 'org.assertj', name: 'assertj-core', version: 
'3.24.2'
+testImplementation 'org.clojure:clojure:1.11.1'
+testImplementation 'elle:elle:0.1.7'
+// for some reason this isn't pulled in properly?  Have to be explicit
+testImplementation('spootnik:unilog:0.7.31') {
+exclude group: 'ch.qos.logback'
+
+exclude group: 'org.slf4j', module: 'slf4j-api'
+exclude group: 'org.slf4j', module: 'log4j-over-slf4j'
+exclude group: 'org.slf4j', module: 'jcl-over-slf4j'
+}
 }
 
 task burn(type: JavaExec) {
diff --git a/accord-core/src/test/java/accord/burn/BurnTest.java 
b/accord-core/src/test/java/accord/burn/BurnTest.java
index 5fa84f75..b147efb7 100644
--- a/accord-core/src/test/java/accord/burn/BurnTest.java
+++ b/accord-core/src/test/java/accord/burn/BurnTest.java
@@ -42,6 +42,10 @@ import java.util.function.Supplier;
 
 import accord.burn.random.FrequentLargeRange;
 import accord.impl.MessageListener;
+import accord.verify.CompositeVerifier;
+import accord.verify.ElleVerifier;
+import accord.verify.StrictSerializabilityVerifier;
+import accord.verify.Verifier;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
@@ -73,7 +77,6 @@ import accord.primitives.Txn;
 import accord.utils.DefaultRandom;
 import accord.utils.RandomSource;
 import accord.utils.async.AsyncExecutor;
-import accord.verify.StrictSerializabilityVerifier;
 
 import static accord.impl.IntHashKey.forHash;
 import static accord.utils.Utils.toArray;
@@ -212,8 +215,9 @@ public class BurnTest
 .asLongSupplier(forked);
 };
 
-StrictSerializabilityVerifier strictSerializable = new 
StrictSerializabilityVerifier(keyCount);
+Verifier verifier = createVerifier(keyCount);
 SimulatedDelayedExecutorService globalExecutor = new 
SimulatedDelayedExecutorService(queue, agent);
+
 Function executor = ignore -> 
globalExecutor;
 
 MessageListener listener = MessageListener.get();
@@ -280,23 +284,22 @@ public class BurnTest
 }
 
 acks.incrementAndGet();
-strictSerializable.begin();
-
-for (int i = 0 ; i < reply.read.length ; ++i)
+try (Verifier.Checker check  = verifier.witness(start, end))
 {
-Key key = reply.responseKeys.get(i);
-int k = key(key);
+for (int i = 0 ; i < reply.read.length ; ++i)
+{
+Key key = reply.responseKeys.get(i);
+int k = key(key);
 
-int[] read = reply.read[i];
-int write = reply.update == null ? -1 : 
reply.update.getOrDefault(key, -1);
+int[] read = reply.read[i];
+int write = reply.update == null ? -1 : 
reply.update.getOrDefault(key, -1);
 
-if (read != null)
-strictSerializable.witnessRead(k, read);
-if (write >= 0)
-strictSerializable.witnessWrite(k, write);
+if (read != null)
+check.read(k, read);
+if (write >= 0)
+check.write(k, write);
+}
 }
-
-strictSerializable.apply(start, end);
 }
 catch (Throwable t)
 {
@@ -313,6 +316,7 @@ public

(cassandra) 01/01: Merge branch 'cassandra-5.0' into trunk

2023-11-01 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit bb686fc27d4a43bc69dc9c4e4934cd4e65c3bdb5
Merge: 7377d5501d dca76145c2
Author: David Capwell 
AuthorDate: Wed Nov 1 15:12:51 2023 -0700

Merge branch 'cassandra-5.0' into trunk

 CHANGES.txt|   1 +
 src/java/org/apache/cassandra/net/Verb.java|  12 +--
 .../cassandra/repair/RepairMessageVerbHandler.java |  17 ++-
 .../org/apache/cassandra/repair/SharedContext.java | 115 +
 .../repair/consistent/ConsistentSession.java   |   2 +-
 .../repair/consistent/CoordinatorSession.java  |  57 ++
 .../repair/consistent/CoordinatorSessions.java |  24 -
 .../cassandra/repair/consistent/LocalSessions.java |  77 ++
 .../cassandra/repair/messages/FailSession.java |   6 ++
 .../cassandra/repair/messages/FinalizeCommit.java  |   6 ++
 .../cassandra/repair/messages/FinalizePromise.java |   6 ++
 .../cassandra/repair/messages/FinalizePropose.java |   6 ++
 .../repair/messages/PrepareConsistentRequest.java  |   6 ++
 .../repair/messages/PrepareConsistentResponse.java |   6 ++
 .../cassandra/repair/messages/RepairMessage.java   |  32 +-
 .../org/apache/cassandra/net/MatcherResponse.java  |  13 ++-
 .../repair/ConcurrentIrWithPreviewFuzzTest.java|  18 +++-
 .../cassandra/repair/FailingRepairFuzzTest.java|   1 +
 .../org/apache/cassandra/repair/FuzzTestBase.java  |  36 +--
 .../cassandra/repair/SlowMessageFuzzTest.java  |   1 +
 .../repair/consistent/CoordinatorSessionTest.java  |  64 ++--
 .../repair/consistent/CoordinatorSessionsTest.java |  24 +++--
 .../repair/consistent/LocalSessionTest.java|  42 +---
 .../cassandra/repair/consistent/MockMessaging.java |  88 
 24 files changed, 524 insertions(+), 136 deletions(-)

diff --cc CHANGES.txt
index 3ca783fb97,f288f3206e..c7bbed34a0
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,8 -1,5 +1,9 @@@
 -5.0-alpha2
 +5.1
 + * Add ELAPSED command to cqlsh (CASSANDRA-18861)
 + * Add the ability to disable bulk loading of SSTables (CASSANDRA-18781)
 + * Clean up obsolete functions and simplify cql_version handling in cqlsh 
(CASSANDRA-18787)
 +Merged from 5.0:
+  * Add retries to IR messages (CASSANDRA-18962)
   * Add metrics and logging to repair retries (CASSANDRA-18952)
   * Remove deprecated code in Cassandra 1.x and 2.x (CASSANDRA-18959)
   * ClientRequestSize metrics should not treat CONTAINS restrictions as being 
equality-based (CASSANDRA-18896)


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) branch trunk updated (7377d5501d -> bb686fc27d)

2023-11-01 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git


from 7377d5501d Merge branch 'cassandra-5.0' into trunk
 new dca76145c2 Add retries to IR messages
 new bb686fc27d Merge branch 'cassandra-5.0' into trunk

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGES.txt|   1 +
 src/java/org/apache/cassandra/net/Verb.java|  12 +--
 .../cassandra/repair/RepairMessageVerbHandler.java |  17 ++-
 .../org/apache/cassandra/repair/SharedContext.java | 115 +
 .../repair/consistent/ConsistentSession.java   |   2 +-
 .../repair/consistent/CoordinatorSession.java  |  57 ++
 .../repair/consistent/CoordinatorSessions.java |  24 -
 .../cassandra/repair/consistent/LocalSessions.java |  77 ++
 .../cassandra/repair/messages/FailSession.java |   6 ++
 .../cassandra/repair/messages/FinalizeCommit.java  |   6 ++
 .../cassandra/repair/messages/FinalizePromise.java |   6 ++
 .../cassandra/repair/messages/FinalizePropose.java |   6 ++
 .../repair/messages/PrepareConsistentRequest.java  |   6 ++
 .../repair/messages/PrepareConsistentResponse.java |   6 ++
 .../cassandra/repair/messages/RepairMessage.java   |  32 +-
 .../org/apache/cassandra/net/MatcherResponse.java  |  13 ++-
 .../repair/ConcurrentIrWithPreviewFuzzTest.java|  18 +++-
 .../cassandra/repair/FailingRepairFuzzTest.java|   1 +
 .../org/apache/cassandra/repair/FuzzTestBase.java  |  36 +--
 .../cassandra/repair/SlowMessageFuzzTest.java  |   1 +
 .../repair/consistent/CoordinatorSessionTest.java  |  64 ++--
 .../repair/consistent/CoordinatorSessionsTest.java |  24 +++--
 .../repair/consistent/LocalSessionTest.java|  42 +---
 .../cassandra/repair/consistent/MockMessaging.java |  88 
 24 files changed, 524 insertions(+), 136 deletions(-)
 create mode 100644 
test/unit/org/apache/cassandra/repair/consistent/MockMessaging.java


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) branch cassandra-5.0 updated: Add retries to IR messages

2023-11-01 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch cassandra-5.0
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/cassandra-5.0 by this push:
 new dca76145c2 Add retries to IR messages
dca76145c2 is described below

commit dca76145c2c1f846ed624c93b9c64484ce1946b7
Author: David Capwell 
AuthorDate: Tue Oct 31 13:56:29 2023 -0700

Add retries to IR messages

patch by David Capwell; reviewed by Blake Eggleston for CASSANDRA-18962
---
 CHANGES.txt|   1 +
 src/java/org/apache/cassandra/net/Verb.java|  12 +--
 .../cassandra/repair/RepairMessageVerbHandler.java |  17 ++-
 .../org/apache/cassandra/repair/SharedContext.java | 115 +
 .../repair/consistent/ConsistentSession.java   |   2 +-
 .../repair/consistent/CoordinatorSession.java  |  57 ++
 .../repair/consistent/CoordinatorSessions.java |  24 -
 .../cassandra/repair/consistent/LocalSessions.java |  77 ++
 .../cassandra/repair/messages/FailSession.java |   6 ++
 .../cassandra/repair/messages/FinalizeCommit.java  |   6 ++
 .../cassandra/repair/messages/FinalizePromise.java |   6 ++
 .../cassandra/repair/messages/FinalizePropose.java |   6 ++
 .../repair/messages/PrepareConsistentRequest.java  |   6 ++
 .../repair/messages/PrepareConsistentResponse.java |   6 ++
 .../cassandra/repair/messages/RepairMessage.java   |  32 +-
 .../org/apache/cassandra/net/MatcherResponse.java  |  13 ++-
 .../repair/ConcurrentIrWithPreviewFuzzTest.java|  18 +++-
 .../cassandra/repair/FailingRepairFuzzTest.java|   1 +
 .../org/apache/cassandra/repair/FuzzTestBase.java  |  36 +--
 .../cassandra/repair/SlowMessageFuzzTest.java  |   1 +
 .../repair/consistent/CoordinatorSessionTest.java  |  64 ++--
 .../repair/consistent/CoordinatorSessionsTest.java |  24 +++--
 .../repair/consistent/LocalSessionTest.java|  42 +---
 .../cassandra/repair/consistent/MockMessaging.java |  88 
 24 files changed, 524 insertions(+), 136 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index 8611719d56..f288f3206e 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 5.0-alpha2
+ * Add retries to IR messages (CASSANDRA-18962)
  * Add metrics and logging to repair retries (CASSANDRA-18952)
  * Remove deprecated code in Cassandra 1.x and 2.x (CASSANDRA-18959)
  * ClientRequestSize metrics should not treat CONTAINS restrictions as being 
equality-based (CASSANDRA-18896)
diff --git a/src/java/org/apache/cassandra/net/Verb.java 
b/src/java/org/apache/cassandra/net/Verb.java
index cf0f2e30a3..c85f0ddeca 100644
--- a/src/java/org/apache/cassandra/net/Verb.java
+++ b/src/java/org/apache/cassandra/net/Verb.java
@@ -169,12 +169,12 @@ public enum Verb
 PREPARE_MSG(105, P1, repairWithBackoffTimeout,  
ANTI_ENTROPY,  () -> PrepareMessage.serializer,() -> 
RepairMessageVerbHandler.instance(),   REPAIR_RSP  ),
 SNAPSHOT_MSG   (106, P1, repairWithBackoffTimeout,  
ANTI_ENTROPY,  () -> SnapshotMessage.serializer,   () -> 
RepairMessageVerbHandler.instance(),   REPAIR_RSP  ),
 CLEANUP_MSG(107, P1, repairWithBackoffTimeout,  
ANTI_ENTROPY,  () -> CleanupMessage.serializer,() -> 
RepairMessageVerbHandler.instance(),   REPAIR_RSP  ),
-PREPARE_CONSISTENT_RSP (109, P1, repairTimeout,   ANTI_ENTROPY,  () -> 
PrepareConsistentResponse.serializer, () -> 
RepairMessageVerbHandler.instance(),   REPAIR_RSP  ),
-PREPARE_CONSISTENT_REQ (108, P1, repairTimeout,   ANTI_ENTROPY,  () -> 
PrepareConsistentRequest.serializer,  () -> 
RepairMessageVerbHandler.instance(),   REPAIR_RSP  ),
-FINALIZE_PROPOSE_MSG   (110, P1, repairTimeout,   ANTI_ENTROPY,  () -> 
FinalizePropose.serializer,   () -> 
RepairMessageVerbHandler.instance(),   REPAIR_RSP  ),
-FINALIZE_PROMISE_MSG   (111, P1, repairTimeout,   ANTI_ENTROPY,  () -> 
FinalizePromise.serializer,   () -> 
RepairMessageVerbHandler.instance(),   REPAIR_RSP  ),
-FINALIZE_COMMIT_MSG(112, P1, repairTimeout,   ANTI_ENTROPY,  () -> 
FinalizeCommit.serializer,() -> 
RepairMessageVerbHandler.instance(),   REPAIR_RSP  ),
-FAILED_SESSION_MSG (113, P1, repairTimeout,   ANTI_ENTROPY,  () -> 
FailSession.serializer,   () -> 
RepairMessageVerbHandler.instance(),   REPAIR_RSP  ),
+PREPARE_CONSISTENT_RSP (109, P1, repairWithBackoffTimeout,  
ANTI_ENTROPY,  () -> PrepareConsistentResponse.serializer, () -> 
RepairMessageVerbHandler.instance(),   REPAIR_RSP  ),
+PREPARE_CONSISTENT_REQ (108, P1, repairWithBackoffTimeout,  
ANTI_ENTROPY,  () -> PrepareConsiste

(cassandra) 01/01: Merge branch 'cassandra-5.0' into trunk

2023-10-30 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit 2d982a0e52921dcdf8870a998f8346b7f8a140ae
Merge: b363568c0f 69f5df0b00
Author: David Capwell 
AuthorDate: Mon Oct 30 14:47:27 2023 -0700

Merge branch 'cassandra-5.0' into trunk

 CHANGES.txt|   1 +
 .../org/apache/cassandra/gms/GossipShutdown.java   |  15 +-
 .../apache/cassandra/metrics/RepairMetrics.java|  71 +++
 .../cassandra/repair/messages/RepairMessage.java   |  79 ++--
 .../org/apache/cassandra/utils/NoSpamLogger.java   |  13 +-
 .../apache/cassandra/gms/GossipShutdownTest.java   |  66 +++
 .../org/apache/cassandra/repair/FuzzTestBase.java  |  24 ++-
 .../repair/messages/RepairMessageTest.java | 211 +
 .../cassandra/test/asserts/ExtendedAssertions.java |  84 
 .../apache/cassandra/utils/NoSpamLoggerTest.java   |   2 +-
 10 files changed, 525 insertions(+), 41 deletions(-)

diff --cc CHANGES.txt
index cb3fe71211,672d277058..8c1cccac32
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,8 -1,5 +1,9 @@@
 -5.0-alpha2
 +5.1
 + * Add ELAPSED command to cqlsh (CASSANDRA-18861)
 + * Add the ability to disable bulk loading of SSTables (CASSANDRA-18781)
 + * Clean up obsolete functions and simplify cql_version handling in cqlsh 
(CASSANDRA-18787)
 +Merged from 5.0:
+  * Add metrics and logging to repair retries (CASSANDRA-18952)
   * Remove deprecated code in Cassandra 1.x and 2.x (CASSANDRA-18959)
   * ClientRequestSize metrics should not treat CONTAINS restrictions as being 
equality-based (CASSANDRA-18896)
   * Add support for vector search in SAI (CASSANDRA-18715)


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) branch trunk updated (b363568c0f -> 2d982a0e52)

2023-10-30 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git


from b363568c0f Merge branch 'cassandra-5.0' into trunk
 new 69f5df0b00 Add metrics and logging to repair retries
 new 2d982a0e52 Merge branch 'cassandra-5.0' into trunk

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGES.txt|   1 +
 .../org/apache/cassandra/gms/GossipShutdown.java   |  15 +-
 .../apache/cassandra/metrics/RepairMetrics.java|  71 +++
 .../cassandra/repair/messages/RepairMessage.java   |  79 ++--
 .../org/apache/cassandra/utils/NoSpamLogger.java   |  13 +-
 .../apache/cassandra/gms/GossipShutdownTest.java   |  66 +++
 .../org/apache/cassandra/repair/FuzzTestBase.java  |  24 ++-
 .../repair/messages/RepairMessageTest.java | 211 +
 .../cassandra/test/asserts/ExtendedAssertions.java |  84 
 .../apache/cassandra/utils/NoSpamLoggerTest.java   |   2 +-
 10 files changed, 525 insertions(+), 41 deletions(-)
 create mode 100644 test/unit/org/apache/cassandra/gms/GossipShutdownTest.java
 create mode 100644 
test/unit/org/apache/cassandra/repair/messages/RepairMessageTest.java
 create mode 100644 
test/unit/org/apache/cassandra/test/asserts/ExtendedAssertions.java


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



(cassandra) branch cassandra-5.0 updated: Add metrics and logging to repair retries

2023-10-30 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch cassandra-5.0
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/cassandra-5.0 by this push:
 new 69f5df0b00 Add metrics and logging to repair retries
69f5df0b00 is described below

commit 69f5df0b00cc822f41823901956aeff9fcdd9dbb
Author: David Capwell 
AuthorDate: Mon Oct 30 10:32:30 2023 -0700

Add metrics and logging to repair retries

patch by David Capwell; reviewed by Caleb Rackliffe, Maxim Muzafarov for 
CASSANDRA-18952
---
 CHANGES.txt|   1 +
 .../org/apache/cassandra/gms/GossipShutdown.java   |  15 +-
 .../apache/cassandra/metrics/RepairMetrics.java|  71 +++
 .../cassandra/repair/messages/RepairMessage.java   |  79 ++--
 .../org/apache/cassandra/utils/NoSpamLogger.java   |  13 +-
 .../apache/cassandra/gms/GossipShutdownTest.java   |  66 +++
 .../org/apache/cassandra/repair/FuzzTestBase.java  |  24 ++-
 .../repair/messages/RepairMessageTest.java | 211 +
 .../cassandra/test/asserts/ExtendedAssertions.java |  84 
 .../apache/cassandra/utils/NoSpamLoggerTest.java   |   2 +-
 10 files changed, 525 insertions(+), 41 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index 779d6f2d13..672d277058 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 5.0-alpha2
+ * Add metrics and logging to repair retries (CASSANDRA-18952)
  * Remove deprecated code in Cassandra 1.x and 2.x (CASSANDRA-18959)
  * ClientRequestSize metrics should not treat CONTAINS restrictions as being 
equality-based (CASSANDRA-18896)
  * Add support for vector search in SAI (CASSANDRA-18715)
diff --git a/src/java/org/apache/cassandra/gms/GossipShutdown.java 
b/src/java/org/apache/cassandra/gms/GossipShutdown.java
index 02f0f375c4..713b2c4fe3 100644
--- a/src/java/org/apache/cassandra/gms/GossipShutdown.java
+++ b/src/java/org/apache/cassandra/gms/GossipShutdown.java
@@ -19,7 +19,6 @@
 package org.apache.cassandra.gms;
 
 import java.io.IOException;
-
 import javax.annotation.Nullable;
 
 import org.apache.cassandra.io.IVersionedSerializer;
@@ -38,29 +37,31 @@ public class GossipShutdown
 this.state = state;
 }
 
-public static final class Serializer implements 
IVersionedSerializer
+public static final class Serializer implements 
IVersionedSerializer
 {
 
 @Override
-public void serialize(GossipShutdown t, DataOutputPlus out, int 
version) throws IOException
+public void serialize(Object t, DataOutputPlus out, int version) 
throws IOException
 {
 if (version < MessagingService.VERSION_50) return;
-EndpointState.serializer.serialize(t.state, out, version);
+GossipShutdown shutdown = (GossipShutdown) t;
+EndpointState.serializer.serialize(shutdown.state, out, version);
 }
 
 @Nullable
 @Override
-public GossipShutdown deserialize(DataInputPlus in, int version) 
throws IOException
+public Object deserialize(DataInputPlus in, int version) throws 
IOException
 {
 if (version < MessagingService.VERSION_50) return null;
 return new GossipShutdown(EndpointState.serializer.deserialize(in, 
version));
 }
 
 @Override
-public long serializedSize(GossipShutdown t, int version)
+public long serializedSize(Object t, int version)
 {
 if (version < MessagingService.VERSION_50) return 0;
-return EndpointState.serializer.serializedSize(t.state, version);
+GossipShutdown shutdown = (GossipShutdown) t;
+return EndpointState.serializer.serializedSize(shutdown.state, 
version);
 }
 }
 }
diff --git a/src/java/org/apache/cassandra/metrics/RepairMetrics.java 
b/src/java/org/apache/cassandra/metrics/RepairMetrics.java
index 5b4f67e230..27dbbd3118 100644
--- a/src/java/org/apache/cassandra/metrics/RepairMetrics.java
+++ b/src/java/org/apache/cassandra/metrics/RepairMetrics.java
@@ -18,7 +18,16 @@
 
 package org.apache.cassandra.metrics;
 
+import java.util.Collections;
+import java.util.EnumMap;
+import java.util.Map;
+
+import com.google.common.annotations.VisibleForTesting;
+
 import com.codahale.metrics.Counter;
+import com.codahale.metrics.Histogram;
+import org.apache.cassandra.net.Verb;
+import org.apache.cassandra.repair.messages.RepairMessage;
 
 import static org.apache.cassandra.metrics.CassandraMetricsRegistry.Metrics;
 
@@ -26,9 +35,71 @@ public class RepairMetrics
 {
 public static final String TYPE_NAME = "Repair";
 public static final Counter previewFailures = 
Metrics.counter(DefaultNameFactory.createMetricName(TYPE_NAME, 
"PreviewFailures", null));
+public static final Histogram retries = 
Metrics.histogram(DefaultNameFactory.createMetricName(TYPE_N

(cassandra) branch cep-15-accord updated (a7cd114435 -> 329a6a85d4)

2023-10-27 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch cep-15-accord
in repository https://gitbox.apache.org/repos/asf/cassandra.git


from a7cd114435 CEP-15: Add Accord configuration stub
 add 4079bc7fd9 CEP-15: (C*) Implement TopologySorter to prioritise hosts 
based on DynamicSnitch and/or topology layout
 add 329a6a85d4 Use pinned Harry version

No new revisions were added by this update.

Summary of changes:
 .build/build-resolver.xml  |   4 +
 .build/parent-pom-template.xml |   5 +-
 lib/harry-0.0.2-internal-20221121.14211-2.jar  | Bin 435204 -> 0 bytes
 lib/harry-core-0.0.2-CASSANDRA-18768.jar   | Bin 0 -> 458194 bytes
 modules/accord |   2 +-
 .../locator/AbstractNetworkTopologySnitch.java |  23 
 .../cassandra/locator/DynamicEndpointSnitch.java   |  47 ++--
 .../locator/{SeedProvider.java => Endpoint.java}   |   7 +-
 .../apache/cassandra/locator/IEndpointSnitch.java  |  13 ++
 src/java/org/apache/cassandra/locator/Replica.java |   3 +-
 .../cassandra/locator/ReplicaCollection.java   |   4 +-
 .../org/apache/cassandra/locator/SimpleSnitch.java |  23 
 .../cassandra/service/accord/AccordJournal.java|   2 +-
 .../cassandra/service/accord/AccordService.java|  17 ++-
 .../service/accord/AccordTopologyUtils.java|  10 +-
 .../service/accord/api/AccordTopologySorter.java   | 133 +
 .../accord/api/CompositeTopologySorter.java|  84 +
 .../utils/{MovingAverage.java => Sortable.java}|   8 +-
 .../simulator/paxos/AccordClusterSimulation.java   |   2 +-
 .../simulator/paxos/PaxosClusterSimulation.java|   1 +
 .../simulator/systems/SimulatedSnitch.java |  16 ++-
 .../unit/org/apache/cassandra/ServerTestUtils.java |  15 +++
 .../config/DatabaseDescriptorRefTest.java  |   1 +
 .../cassandra/locator/IEndpointSnitchTest.java |  83 +
 24 files changed, 473 insertions(+), 30 deletions(-)
 delete mode 100644 lib/harry-0.0.2-internal-20221121.14211-2.jar
 create mode 100644 lib/harry-core-0.0.2-CASSANDRA-18768.jar
 copy src/java/org/apache/cassandra/locator/{SeedProvider.java => 
Endpoint.java} (90%)
 create mode 100644 
src/java/org/apache/cassandra/service/accord/api/AccordTopologySorter.java
 create mode 100644 
src/java/org/apache/cassandra/service/accord/api/CompositeTopologySorter.java
 copy src/java/org/apache/cassandra/utils/{MovingAverage.java => Sortable.java} 
(83%)
 create mode 100644 
test/unit/org/apache/cassandra/locator/IEndpointSnitchTest.java


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] branch trunk updated: CEP-15: (C*) Implement TopologySorter to prioritise hosts based on DynamicSnitch and/or topology layout (#72)

2023-10-26 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new d99ad84c CEP-15: (C*) Implement TopologySorter to prioritise hosts 
based on DynamicSnitch and/or topology layout (#72)
d99ad84c is described below

commit d99ad84cc49a96299a9ae55183e38ee6f1aa3f47
Author: dcapwell 
AuthorDate: Thu Oct 26 15:44:43 2023 -0700

CEP-15: (C*) Implement TopologySorter to prioritise hosts based on 
DynamicSnitch and/or topology layout (#72)

patch by David Capwell; reviewed by Blake Eggleston for CASSANDRA-18929
---
 .../src/main/java/accord/topology/Topologies.java  | 72 ++
 .../main/java/accord/topology/TopologyManager.java | 13 ++--
 .../java/accord/messages/TxnRequestScopeTest.java  |  8 +--
 3 files changed, 56 insertions(+), 37 deletions(-)

diff --git a/accord-core/src/main/java/accord/topology/Topologies.java 
b/accord-core/src/main/java/accord/topology/Topologies.java
index 5832cce0..1d729d29 100644
--- a/accord-core/src/main/java/accord/topology/Topologies.java
+++ b/accord-core/src/main/java/accord/topology/Topologies.java
@@ -260,29 +260,25 @@ public interface Topologies extends TopologySorter
 private final List topologies;
 private final int maxShardsPerEpoch;
 
-public Multi(TopologySorter.Supplier sorter, int initialCapacity)
-{
-this.topologies = new ArrayList<>(initialCapacity);
-this.supplier = sorter;
-this.sorter = sorter.get(this);
-int maxShardsPerEpoch = 0;
-for (int i = 0 ; i < topologies.size() ; ++i)
-maxShardsPerEpoch = Math.max(maxShardsPerEpoch, 
topologies.get(i).size());
-this.maxShardsPerEpoch = maxShardsPerEpoch;
-}
-
 public Multi(TopologySorter.Supplier sorter, Topology... topologies)
 {
-this(sorter, topologies.length);
-for (Topology topology : topologies)
-add(topology);
+this(sorter, Arrays.asList(topologies));
 }
 
-public Multi(TopologySorter.Supplier sorter, List topologies)
+public Multi(TopologySorter.Supplier sorter, List input)
 {
-this(sorter, topologies.size());
-for (Topology topology : topologies)
-add(topology);
+this.topologies = new ArrayList<>(input.size());
+for (Topology topology : input)
+{
+Invariants.checkArgument(topologies.isEmpty() || 
topology.epoch == topologies.get(topologies.size() - 1).epoch - 1);
+topologies.add(topology);
+}
+int maxShardsPerEpoch = 0;
+for (int i = 0 ; i < topologies.size() ; ++i)
+maxShardsPerEpoch = Math.max(maxShardsPerEpoch, 
topologies.get(i).size());
+this.maxShardsPerEpoch = maxShardsPerEpoch;
+this.supplier = sorter;
+this.sorter = sorter.get(this);
 }
 
 @Override
@@ -392,12 +388,6 @@ public interface Topologies extends TopologySorter
 return maxShardsPerEpoch;
 }
 
-public void add(Topology topology)
-{
-Invariants.checkArgument(topologies.isEmpty() || topology.epoch == 
topologies.get(topologies.size() - 1).epoch - 1);
-topologies.add(topology);
-}
-
 @Override
 public boolean equals(Object obj)
 {
@@ -422,4 +412,38 @@ public interface Topologies extends TopologySorter
 return sorter.compare(node1, node2, shards);
 }
 }
+
+class Builder
+{
+private final List topologies;
+
+public Builder(int initialCapacity)
+{
+topologies = new ArrayList<>(initialCapacity);
+}
+
+public void add(Topology topology)
+{
+Invariants.checkArgument(topologies.isEmpty() || topology.epoch == 
topologies.get(topologies.size() - 1).epoch - 1);
+topologies.add(topology);
+}
+
+public boolean isEmpty()
+{
+return topologies.isEmpty();
+}
+
+public Topologies build(TopologySorter.Supplier sorter)
+{
+switch (topologies.size())
+{
+case 0:
+throw new IllegalStateException("Unable to build an empty 
Topologies");
+case 1:
+return new Single(sorter, topologies.get(0));
+default:
+return new Multi(sorter, topologies);
+}
+}
+}
 }
diff --git a/accord-core/src/main/java/accord/topology/TopologyManager.java 
b/accord-core/src/main/java/accord/topology/TopologyManager.java
index a940b109..dcb499c4 100644
--- a/accord-core/src/main/java/accord/t

[cassandra] 01/01: Merge branch 'cassandra-5.0' into trunk

2023-10-10 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit b8b17dc5db7b112ab2b7fe1308c2089cdc38eb1d
Merge: 31729b8f92 210ced3b7b
Author: David Capwell 
AuthorDate: Tue Oct 10 14:19:38 2023 -0700

Merge branch 'cassandra-5.0' into trunk

 CHANGES.txt|   1 +
 .../org/apache/cassandra/gms/EndpointState.java|   5 +
 .../org/apache/cassandra/gms/GossipShutdown.java   |  66 +
 .../cassandra/gms/GossipShutdownVerbHandler.java   |   7 +-
 src/java/org/apache/cassandra/gms/Gossiper.java|  31 +-
 src/java/org/apache/cassandra/net/Verb.java|   5 +-
 .../test/gossip/GossipShutdownTest.java| 106 +
 7 files changed, 214 insertions(+), 7 deletions(-)



-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra] branch trunk updated (31729b8f92 -> b8b17dc5db)

2023-10-10 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git


from 31729b8f92 Merge branch 'cassandra-5.0' into trunk
 new 2bab3f27ba Gossip NPE due to shutdown event corrupting empty statuses
 new 1920571861 Merge branch 'cassandra-4.0' into cassandra-4.1
 new 210ced3b7b Merge branch 'cassandra-4.1' into cassandra-5.0
 new b8b17dc5db Merge branch 'cassandra-5.0' into trunk

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGES.txt|   1 +
 .../org/apache/cassandra/gms/EndpointState.java|   5 +
 .../org/apache/cassandra/gms/GossipShutdown.java   |  66 +
 .../cassandra/gms/GossipShutdownVerbHandler.java   |   7 +-
 src/java/org/apache/cassandra/gms/Gossiper.java|  31 +-
 src/java/org/apache/cassandra/net/Verb.java|   5 +-
 .../test/gossip/GossipShutdownTest.java| 106 +
 7 files changed, 214 insertions(+), 7 deletions(-)
 create mode 100644 src/java/org/apache/cassandra/gms/GossipShutdown.java
 create mode 100644 
test/distributed/org/apache/cassandra/distributed/test/gossip/GossipShutdownTest.java


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra] branch cassandra-4.1 updated (e562d6a3a9 -> 1920571861)

2023-10-10 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch cassandra-4.1
in repository https://gitbox.apache.org/repos/asf/cassandra.git


from e562d6a3a9 Merge branch 'cassandra-4.0' into cassandra-4.1
 new 2bab3f27ba Gossip NPE due to shutdown event corrupting empty statuses
 new 1920571861 Merge branch 'cassandra-4.0' into cassandra-4.1

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGES.txt|   1 +
 .../org/apache/cassandra/gms/EndpointState.java|   5 +
 src/java/org/apache/cassandra/gms/Gossiper.java|   2 +-
 .../test/gossip/GossipShutdownTest.java| 106 +
 4 files changed, 113 insertions(+), 1 deletion(-)
 create mode 100644 
test/distributed/org/apache/cassandra/distributed/test/gossip/GossipShutdownTest.java


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra] 01/01: Merge branch 'cassandra-4.1' into cassandra-5.0

2023-10-10 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch cassandra-5.0
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit 210ced3b7b6718b515631b8b1579aa6f6fc2dea3
Merge: 3b9881bfa6 1920571861
Author: David Capwell 
AuthorDate: Tue Oct 10 14:15:08 2023 -0700

Merge branch 'cassandra-4.1' into cassandra-5.0

 CHANGES.txt|   1 +
 .../org/apache/cassandra/gms/EndpointState.java|   5 +
 .../org/apache/cassandra/gms/GossipShutdown.java   |  66 +
 .../cassandra/gms/GossipShutdownVerbHandler.java   |   7 +-
 src/java/org/apache/cassandra/gms/Gossiper.java|  31 +-
 src/java/org/apache/cassandra/net/Verb.java|   5 +-
 .../test/gossip/GossipShutdownTest.java| 106 +
 7 files changed, 214 insertions(+), 7 deletions(-)

diff --cc CHANGES.txt
index 1e0fe54855,c5f2a1b92c..f40b4020d7
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,24 -1,12 +1,25 @@@
 -4.1.4
 +5.0-alpha2
 + * Fix vector type to support DDM's mask_default function (CASSANDRA-18889)
 + * Remove unnecessary reporter-config3 dependency (CASSANDRA-18907)
 + * Remove support for empty values on the vector data type (CASSANDRA-18876)
 + * Upgrade Dropwizard Metrics to 4.2.19 (CASSANDRA-14667)
 + * Upgrade caffeine cache and fix CIDR permissions cache invalidation 
(CASSANDRA-18805)
 + * Remove deprecated properties in CompressionParams (CASSANDRA-18742)
 + * Add support for repair coordinator to retry messages that timeout 
(CASSANDRA-18816)
 + * Upgrade slf4j-api to 1.7.36 (CASSANDRA-18882)
 + * Make the output of ON/OFF commands in cqlsh consistent (CASSANDRA-18547)
 + * Do not create sstable files before registering in txn (CASSANDRA-18737)
 + * Do not log stacktrace on mismatched cache and schema version and checksum 
error in AutoSavingCache (CASSANDRA-18862)
 + * Remove wrong assertion in SSTableLoader (CASSANDRA-18840)
 + * Fix accessing java.nio.Bits.TOTAL_CAPACITY in Java17 (CASSANDRA-18848)
 + * Remove metrics-reporter-config dependency (CASSANDRA-18743)
 + * Fix SAI's SegmentMetadata min and max primary keys (CASSANDRA-18734)
 + * Remove commons-codec dependency (CASSANDRA-18772)
 +Merged from 4.1:
   * Internode legacy SSL storage port certificate is not hot reloaded on 
update (CASSANDRA-18681)
   * Nodetool paxos-only repair is no longer incremental (CASSANDRA-18466)
 - * Waiting indefinitely on ReceivedMessage response in 
StreamSession#receive() can cause deadlock (CASSANDRA-18733)
 - * Allow empty keystore_password in encryption_options (CASSANDRA-18778)
 - * Skip ColumnFamilyStore#topPartitions initialization when client or tool 
mode (CASSANDRA-18697)
  Merged from 4.0:
+  * Gossip NPE due to shutdown event corrupting empty statuses 
(CASSANDRA-18913)
 - * Fix closing iterator in SecondaryIndexBuilder (CASSANDRA-18361)
   * Update hdrhistogram to 2.1.12 (CASSANDRA-18893)
   * Improve performance of compactions when table does not have an index 
(CASSANDRA-18773)
   * JMH improvements - faster build and async profiler (CASSANDRA-18871)
diff --cc src/java/org/apache/cassandra/gms/GossipShutdown.java
index 00,00..02f0f375c4
new file mode 100644
--- /dev/null
+++ b/src/java/org/apache/cassandra/gms/GossipShutdown.java
@@@ -1,0 -1,0 +1,66 @@@
++/*
++ * 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.gms;
++
++import java.io.IOException;
++
++import javax.annotation.Nullable;
++
++import org.apache.cassandra.io.IVersionedSerializer;
++import org.apache.cassandra.io.util.DataInputPlus;
++import org.apache.cassandra.io.util.DataOutputPlus;
++import org.apache.cassandra.net.MessagingService;
++
++public class GossipShutdown
++{
++public static final Serializer serializer = new Serializer();
++
++public final EndpointState state;
++
++public GossipShutdown(EndpointState state)
++{
++this.state = state;
++}
++
++public static final class Serializer implements 
IVersionedSerializer
++{
++
++@Override
++public void serialize(GossipShutdown t, DataOutputPlus out, int 
version

[cassandra] 01/01: Merge branch 'cassandra-4.0' into cassandra-4.1

2023-10-10 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch cassandra-4.1
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit 1920571861ac2fe953229d171c2e8414788d6ab0
Merge: e562d6a3a9 2bab3f27ba
Author: David Capwell 
AuthorDate: Tue Oct 10 14:05:19 2023 -0700

Merge branch 'cassandra-4.0' into cassandra-4.1

 CHANGES.txt|   1 +
 .../org/apache/cassandra/gms/EndpointState.java|   5 +
 src/java/org/apache/cassandra/gms/Gossiper.java|   2 +-
 .../test/gossip/GossipShutdownTest.java| 106 +
 4 files changed, 113 insertions(+), 1 deletion(-)

diff --cc CHANGES.txt
index a8a5ddeaeb,f0d59c2abf..c5f2a1b92c
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,10 -1,6 +1,11 @@@
 -4.0.12
 +4.1.4
 + * Internode legacy SSL storage port certificate is not hot reloaded on 
update (CASSANDRA-18681)
 + * Nodetool paxos-only repair is no longer incremental (CASSANDRA-18466)
 + * Waiting indefinitely on ReceivedMessage response in 
StreamSession#receive() can cause deadlock (CASSANDRA-18733)
 + * Allow empty keystore_password in encryption_options (CASSANDRA-18778)
 + * Skip ColumnFamilyStore#topPartitions initialization when client or tool 
mode (CASSANDRA-18697)
 +Merged from 4.0:
+  * Gossip NPE due to shutdown event corrupting empty statuses 
(CASSANDRA-18913)
 - * Synchronize CQLSSTableWriter#build on the Schema.instance object 
(CASSANDRA-18317)
   * Fix closing iterator in SecondaryIndexBuilder (CASSANDRA-18361)
   * Update hdrhistogram to 2.1.12 (CASSANDRA-18893)
   * Improve performance of compactions when table does not have an index 
(CASSANDRA-18773)


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra] branch cassandra-5.0 updated (3b9881bfa6 -> 210ced3b7b)

2023-10-10 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch cassandra-5.0
in repository https://gitbox.apache.org/repos/asf/cassandra.git


from 3b9881bfa6 Fix vector type to support DDM's mask_default function
 new 2bab3f27ba Gossip NPE due to shutdown event corrupting empty statuses
 new 1920571861 Merge branch 'cassandra-4.0' into cassandra-4.1
 new 210ced3b7b Merge branch 'cassandra-4.1' into cassandra-5.0

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGES.txt|   1 +
 .../org/apache/cassandra/gms/EndpointState.java|   5 +
 .../org/apache/cassandra/gms/GossipShutdown.java   |  66 +
 .../cassandra/gms/GossipShutdownVerbHandler.java   |   7 +-
 src/java/org/apache/cassandra/gms/Gossiper.java|  31 +-
 src/java/org/apache/cassandra/net/Verb.java|   5 +-
 .../test/gossip/GossipShutdownTest.java| 106 +
 7 files changed, 214 insertions(+), 7 deletions(-)
 create mode 100644 src/java/org/apache/cassandra/gms/GossipShutdown.java
 create mode 100644 
test/distributed/org/apache/cassandra/distributed/test/gossip/GossipShutdownTest.java


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra] branch cassandra-4.0 updated: Gossip NPE due to shutdown event corrupting empty statuses

2023-10-10 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch cassandra-4.0
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/cassandra-4.0 by this push:
 new 2bab3f27ba Gossip NPE due to shutdown event corrupting empty statuses
2bab3f27ba is described below

commit 2bab3f27ba1535203d61497abe6810cdcb4640d0
Author: David Capwell 
AuthorDate: Tue Oct 10 09:22:05 2023 -0700

Gossip NPE due to shutdown event corrupting empty statuses

patch by David Capwell; reviewed by Brandon Williams for CASSANDRA-18913
---
 CHANGES.txt|   1 +
 .../org/apache/cassandra/gms/EndpointState.java|   5 +
 src/java/org/apache/cassandra/gms/Gossiper.java|   2 +-
 .../cassandra/distributed/shared/ClusterUtils.java |  16 
 .../test/gossip/GossipShutdownTest.java| 106 +
 5 files changed, 129 insertions(+), 1 deletion(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index 25691b1cd9..f0d59c2abf 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 4.0.12
+ * Gossip NPE due to shutdown event corrupting empty statuses (CASSANDRA-18913)
  * Synchronize CQLSSTableWriter#build on the Schema.instance object 
(CASSANDRA-18317)
  * Fix closing iterator in SecondaryIndexBuilder (CASSANDRA-18361)
  * Update hdrhistogram to 2.1.12 (CASSANDRA-18893)
diff --git a/src/java/org/apache/cassandra/gms/EndpointState.java 
b/src/java/org/apache/cassandra/gms/EndpointState.java
index b8d56263e7..782a72207c 100644
--- a/src/java/org/apache/cassandra/gms/EndpointState.java
+++ b/src/java/org/apache/cassandra/gms/EndpointState.java
@@ -191,6 +191,11 @@ public class EndpointState
 isAlive = false;
 }
 
+public boolean isStateEmpty()
+{
+return applicationState.get().isEmpty();
+}
+
 /**
  * @return true if {@link HeartBeatState#isEmpty()} is true and no STATUS 
application state exists
  */
diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java 
b/src/java/org/apache/cassandra/gms/Gossiper.java
index 2b3c48ed77..f88ee44edf 100644
--- a/src/java/org/apache/cassandra/gms/Gossiper.java
+++ b/src/java/org/apache/cassandra/gms/Gossiper.java
@@ -567,7 +567,7 @@ public class Gossiper implements 
IFailureDetectionEventListener, GossiperMBean
 {
 checkProperThreadForStateMutation();
 EndpointState epState = endpointStateMap.get(endpoint);
-if (epState == null)
+if (epState == null || epState.isStateEmpty())
 return;
 VersionedValue shutdown = 
StorageService.instance.valueFactory.shutdown(true);
 epState.addApplicationState(ApplicationState.STATUS_WITH_PORT, 
shutdown);
diff --git 
a/test/distributed/org/apache/cassandra/distributed/shared/ClusterUtils.java 
b/test/distributed/org/apache/cassandra/distributed/shared/ClusterUtils.java
index 94256cca1b..d2824ccd12 100644
--- a/test/distributed/org/apache/cassandra/distributed/shared/ClusterUtils.java
+++ b/test/distributed/org/apache/cassandra/distributed/shared/ClusterUtils.java
@@ -136,6 +136,22 @@ public class ClusterUtils
 cluster.stream().forEach(ClusterUtils::stopUnchecked);
 }
 
+/**
+ * Create a new instance and add it to the cluster, without starting it.
+ *
+ * @param cluster to add to
+ * @param other config to copy from
+ * @param fn function to add to the config before starting
+ * @param  instance type
+ * @return the instance added
+ */
+public static  I addInstance(AbstractCluster 
cluster,
+  IInstanceConfig other,
+  
Consumer fn)
+{
+return addInstance(cluster, other.localDatacenter(), 
other.localRack(), fn);
+}
+
 /**
  * Create a new instance and add it to the cluster, without starting it.
  *
diff --git 
a/test/distributed/org/apache/cassandra/distributed/test/gossip/GossipShutdownTest.java
 
b/test/distributed/org/apache/cassandra/distributed/test/gossip/GossipShutdownTest.java
new file mode 100644
index 00..59ac4feeeb
--- /dev/null
+++ 
b/test/distributed/org/apache/cassandra/distributed/test/gossip/GossipShutdownTest.java
@@ -0,0 +1,106 @@
+/*
+ * 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,
+ 

[cassandra] 01/01: Merge branch 'cassandra-5.0' into trunk

2023-10-03 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit 16b43e4d4bd4b49029c0fc360bae1e732a7d5aae
Merge: c60b2ca65f d828cd0228
Author: David Capwell 
AuthorDate: Tue Oct 3 09:48:14 2023 -0700

Merge branch 'cassandra-5.0' into trunk

 .../org/apache/cassandra/repair/ConcurrentIrWithPreviewFuzzTest.java   | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra] branch trunk updated (c60b2ca65f -> 16b43e4d4b)

2023-10-03 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git


from c60b2ca65f Merge branch 'cassandra-5.0' into trunk
 new d828cd0228 Test failure: 
org.apache.cassandra.repair.ConcurrentIrWithPreviewFuzzTest
 new 16b43e4d4b Merge branch 'cassandra-5.0' into trunk

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../org/apache/cassandra/repair/ConcurrentIrWithPreviewFuzzTest.java   | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra] branch cassandra-5.0 updated: Test failure: org.apache.cassandra.repair.ConcurrentIrWithPreviewFuzzTest

2023-10-03 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch cassandra-5.0
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/cassandra-5.0 by this push:
 new d828cd0228 Test failure: 
org.apache.cassandra.repair.ConcurrentIrWithPreviewFuzzTest
d828cd0228 is described below

commit d828cd0228143438590f3aaa4e2c7d3c03bd66d8
Author: David Capwell 
AuthorDate: Mon Oct 2 14:39:34 2023 -0700

Test failure: org.apache.cassandra.repair.ConcurrentIrWithPreviewFuzzTest

patch by David Capwell; reviewed by Caleb Rackliffe for CASSANDRA-18890
---
 .../org/apache/cassandra/repair/ConcurrentIrWithPreviewFuzzTest.java   | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git 
a/test/unit/org/apache/cassandra/repair/ConcurrentIrWithPreviewFuzzTest.java 
b/test/unit/org/apache/cassandra/repair/ConcurrentIrWithPreviewFuzzTest.java
index e2c3fb6893..eef13dc8b6 100644
--- a/test/unit/org/apache/cassandra/repair/ConcurrentIrWithPreviewFuzzTest.java
+++ b/test/unit/org/apache/cassandra/repair/ConcurrentIrWithPreviewFuzzTest.java
@@ -18,7 +18,6 @@
 
 package org.apache.cassandra.repair;
 
-import java.time.Duration;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
@@ -43,7 +42,7 @@ public class ConcurrentIrWithPreviewFuzzTest extends 
FuzzTestBase
 {
 // to avoid unlucky timing issues, retry until success; given enough 
retries we should eventually become success
 DatabaseDescriptor.getRepairRetrySpec().maxAttempts = new 
RetrySpec.MaxAttempt(Integer.MAX_VALUE);
-
qt().withPure(false).withExamples(2).withTimeout(Duration.ofMinutes(1)).check(rs
 -> {
+qt().withPure(false).withExamples(1).check(rs -> {
 Cluster cluster = new Cluster(rs);
 enableMessageFaults(cluster);
 


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] branch trunk updated: Add support for repair coordinator to retry messages that timeout (#68)

2023-09-29 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new b1befa3c Add support for repair coordinator to retry messages that 
timeout (#68)
b1befa3c is described below

commit b1befa3cc0a8496451bb48ec3bb1c0f56b8c7653
Author: dcapwell 
AuthorDate: Fri Sep 29 15:16:00 2023 -0700

Add support for repair coordinator to retry messages that timeout (#68)

patch by David Capwell; reviewed by Caleb Rackliffe for CASSANDRA-18816
---
 .../src/main/java/accord/utils/DefaultRandom.java  | 11 +--
 .../src/main/java/accord/utils/RandomSource.java   |  5 ++
 .../accord/burn/random/FrequentLargeRange.java | 21 -
 ...mRangeTest.java => FrequentLargeRangeTest.java} |  6 +-
 .../src/test/java/accord/impl/basic/NodeSink.java  |  4 +-
 .../src/test/java/accord/utils/GenTest.java|  2 +-
 accord-core/src/test/java/accord/utils/Gens.java   |  8 +-
 .../src/test/java/accord/utils/Property.java   | 98 +-
 8 files changed, 131 insertions(+), 24 deletions(-)

diff --git a/accord-core/src/main/java/accord/utils/DefaultRandom.java 
b/accord-core/src/main/java/accord/utils/DefaultRandom.java
index 8efff223..5d00da38 100644
--- a/accord-core/src/main/java/accord/utils/DefaultRandom.java
+++ b/accord-core/src/main/java/accord/utils/DefaultRandom.java
@@ -20,25 +20,20 @@ package accord.utils;
 
 import java.util.Random;
 
-public class DefaultRandom extends Random implements RandomSource
+public class DefaultRandom extends WrappedRandomSource
 {
 public DefaultRandom()
 {
+super(new Random());
 }
 
 public DefaultRandom(long seed)
 {
-super(seed);
+super(new Random(seed));
 }
 
 @Override
 public DefaultRandom fork() {
 return new DefaultRandom(nextLong());
 }
-
-@Override
-public Random asJdkRandom()
-{
-return this;
-}
 }
diff --git a/accord-core/src/main/java/accord/utils/RandomSource.java 
b/accord-core/src/main/java/accord/utils/RandomSource.java
index da5033a5..3d4861e5 100644
--- a/accord-core/src/main/java/accord/utils/RandomSource.java
+++ b/accord-core/src/main/java/accord/utils/RandomSource.java
@@ -248,6 +248,11 @@ public interface RandomSource
 }
 }
 
+default  T pick(T[] array)
+{
+return array[nextInt(array.length)];
+}
+
 default  T pick(List values)
 {
 return pick(values, 0, values.size());
diff --git 
a/accord-core/src/test/java/accord/burn/random/FrequentLargeRange.java 
b/accord-core/src/test/java/accord/burn/random/FrequentLargeRange.java
index 41cae465..7c77b972 100644
--- a/accord-core/src/test/java/accord/burn/random/FrequentLargeRange.java
+++ b/accord-core/src/test/java/accord/burn/random/FrequentLargeRange.java
@@ -31,11 +31,11 @@ public class FrequentLargeRange implements LongGen
 private final LongGen small, large;
 private final Gen runs;
 
-public FrequentLargeRange(LongGen small, LongGen large, double ratio)
+public FrequentLargeRange(LongGen small, LongGen large, double ratio, int 
maxRuns)
 {
 this.small = small;
 this.large = large;
-this.runs = Gens.bools().biasedRepeatingRuns(ratio);
+this.runs = Gens.bools().biasedRepeatingRuns(ratio, maxRuns);
 }
 
 @Override
@@ -54,6 +54,7 @@ public class FrequentLargeRange implements LongGen
 {
 private final RandomSource random;
 private Double ratio;
+private Integer maxRuns;
 private LongGen small, large;
 
 public Builder(RandomSource random)
@@ -73,6 +74,18 @@ public class FrequentLargeRange implements LongGen
 return this;
 }
 
+public Builder maxRuns(int maxRuns)
+{
+this.maxRuns = maxRuns;
+return this;
+}
+
+public Builder maxRuns(int min, int max)
+{
+this.maxRuns = random.nextInt(min, max);
+return this;
+}
+
 public Builder small(Duration min, Duration max)
 {
 small = create(min, max);
@@ -132,7 +145,9 @@ public class FrequentLargeRange implements LongGen
 throw new IllegalStateException("Large range undefined");
 if (ratio == null)
 ratio(1, 11);
-return new FrequentLargeRange(small, large, ratio);
+if (maxRuns == null)
+maxRuns(3, 15);
+return new FrequentLargeRange(small, large, ratio, maxRuns);
 }
 }
 }
diff --git 
a/accord-core/src/test/java/accord/burn/random/SegmentedRandomRangeTest.java 
b/accord-core/src/test/java/accord/burn/random/FrequentLargeRangeTest.java
similarity index 97%
rename from 
accord-core/src/test/java/accord/burn/random/SegmentedRandomRangeTest.java
rename to 
accord-core/

[cassandra] 01/01: Merge branch 'cassandra-5.0' into trunk

2023-09-27 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit c96185f18878abcb47ec49f3daa87796007f955f
Merge: a0eecdb996 164fa7949d
Author: David Capwell 
AuthorDate: Wed Sep 27 16:21:37 2023 -0700

Merge branch 'cassandra-5.0' into trunk

 CHANGES.txt|1 +
 conf/cassandra.yaml|   11 +
 .../org/apache/cassandra/concurrent/Stage.java |6 +
 src/java/org/apache/cassandra/config/Config.java   |2 +
 .../cassandra/config/DatabaseDescriptor.java   |   11 +
 .../org/apache/cassandra/config/RepairConfig.java  |   24 +
 .../apache/cassandra/config/RepairRetrySpec.java   |   43 +
 .../org/apache/cassandra/config/RetrySpec.java |  165 +++
 .../org/apache/cassandra/cql3/QueryProcessor.java  |2 +-
 .../org/apache/cassandra/db/ColumnFamilyStore.java |2 +-
 src/java/org/apache/cassandra/db/Keyspace.java |2 +-
 src/java/org/apache/cassandra/db/ReadCommand.java  |4 +-
 .../cassandra/db/compaction/CompactionManager.java |5 +-
 .../db/compaction/ICompactionManager.java  |   24 +
 .../db/compaction/PendingRepairManager.java|4 +-
 .../db/repair/CassandraTableRepairManager.java |   12 +-
 .../db/repair/CassandraValidationIterator.java |   13 +-
 .../cassandra/db/repair/PendingAntiCompaction.java |2 +-
 .../cassandra/db/virtual/LocalRepairTables.java|   19 +-
 .../cassandra/exceptions/RepairException.java  |   10 +-
 src/java/org/apache/cassandra/gms/Gossiper.java|   12 +-
 src/java/org/apache/cassandra/gms/IGossiper.java   |   39 +
 src/java/org/apache/cassandra/net/Message.java |   12 +-
 .../org/apache/cassandra/net/MessageDelivery.java  |   31 +
 .../org/apache/cassandra/net/MessagingService.java |   72 +-
 src/java/org/apache/cassandra/net/Verb.java|   43 +-
 .../cassandra/repair/AbstractRepairTask.java   |   44 +-
 .../cassandra/repair/AsymmetricRemoteSyncTask.java |7 +-
 .../cassandra/repair/IValidationManager.java   |   28 +
 .../cassandra/repair/IncrementalRepairTask.java|   17 +-
 .../org/apache/cassandra/repair/LocalSyncTask.java |   12 +-
 .../apache/cassandra/repair/NormalRepairTask.java  |7 +-
 .../apache/cassandra/repair/PreviewRepairTask.java |7 +-
 ...{RepairRunnable.java => RepairCoordinator.java} |  162 +--
 .../org/apache/cassandra/repair/RepairJob.java |   76 +-
 .../org/apache/cassandra/repair/RepairJobDesc.java |   11 +-
 .../cassandra/repair/RepairMessageVerbHandler.java |  250 +++-
 .../org/apache/cassandra/repair/RepairSession.java |  151 ++-
 .../org/apache/cassandra/repair/SharedContext.java |  165 +++
 .../org/apache/cassandra/repair/SnapshotTask.java  |   11 +-
 .../apache/cassandra/repair/StreamExecutor.java|   27 +
 .../cassandra/repair/StreamingRepairTask.java  |   24 +-
 .../cassandra/repair/SymmetricRemoteSyncTask.java  |7 +-
 src/java/org/apache/cassandra/repair/SyncTask.java |   18 +-
 .../apache/cassandra/repair/ValidationManager.java |   16 +-
 .../apache/cassandra/repair/ValidationTask.java|   61 +-
 .../org/apache/cassandra/repair/Validator.java |   25 +-
 .../repair/consistent/ConsistentSession.java   |9 +
 .../repair/consistent/CoordinatorSession.java  |   38 +-
 .../repair/consistent/CoordinatorSessions.java |   13 +-
 .../cassandra/repair/consistent/LocalSession.java  |   13 +-
 .../cassandra/repair/consistent/LocalSessions.java |   36 +-
 .../cassandra/repair/messages/CleanupMessage.java  |6 +
 .../cassandra/repair/messages/PrepareMessage.java  |6 +
 .../cassandra/repair/messages/RepairMessage.java   |  179 ++-
 .../repair/state/AbstractCompletable.java  |   28 +-
 .../cassandra/repair/state/AbstractState.java  |   69 +-
 .../apache/cassandra/repair/state/Completable.java |   33 +-
 .../cassandra/repair/state/CoordinatorState.java   |   41 +-
 .../apache/cassandra/repair/state/JobState.java|5 +-
 .../cassandra/repair/state/ParticipateState.java   |  160 ++-
 .../cassandra/repair/state/SessionState.java   |   21 +-
 .../apache/cassandra/repair/state/SyncState.java   |   85 ++
 .../cassandra/repair/state/ValidationState.java|   13 +-
 src/java/org/apache/cassandra/schema/Tables.java   |2 +-
 .../cassandra/service/ActiveRepairService.java |  270 ++--
 .../apache/cassandra/service/CassandraDaemon.java  |2 +-
 .../apache/cassandra/service/StorageService.java   |   24 +-
 .../cassandra/service/StorageServiceMBean.java |2 +-
 .../apache/cassandra/streaming/PreviewKind.java|2 +-
 .../org/apache/cassandra/streaming/StreamPlan.java |   16 +
 .../apache/cassandra/streaming/StreamSession.java  |6 +-
 .../apache/cassandra/tools/nodetool/Repair.java|   85 +-
 src/java/org/apache/cassandra/utils/Backoff.java   |   96 ++
 src/java/org/apache/cassandra/utils/Clock.j

[cassandra] branch trunk updated (a0eecdb996 -> c96185f188)

2023-09-27 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git


from a0eecdb996 Merge branch 'cassandra-5.0' into trunk
 new 164fa7949d Add support for repair coordinator to retry messages that 
timeout
 new c96185f188 Merge branch 'cassandra-5.0' into trunk

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGES.txt|1 +
 conf/cassandra.yaml|   11 +
 .../org/apache/cassandra/concurrent/Stage.java |6 +
 src/java/org/apache/cassandra/config/Config.java   |2 +
 .../cassandra/config/DatabaseDescriptor.java   |   11 +
 .../org/apache/cassandra/config/RepairConfig.java  |   24 +
 .../apache/cassandra/config/RepairRetrySpec.java   |   43 +
 .../org/apache/cassandra/config/RetrySpec.java |  165 +++
 .../org/apache/cassandra/cql3/QueryProcessor.java  |2 +-
 .../org/apache/cassandra/db/ColumnFamilyStore.java |2 +-
 src/java/org/apache/cassandra/db/Keyspace.java |2 +-
 src/java/org/apache/cassandra/db/ReadCommand.java  |4 +-
 .../cassandra/db/compaction/CompactionManager.java |5 +-
 .../db/compaction/ICompactionManager.java  |   24 +
 .../db/compaction/PendingRepairManager.java|4 +-
 .../db/repair/CassandraTableRepairManager.java |   12 +-
 .../db/repair/CassandraValidationIterator.java |   13 +-
 .../cassandra/db/repair/PendingAntiCompaction.java |2 +-
 .../cassandra/db/virtual/LocalRepairTables.java|   19 +-
 .../cassandra/exceptions/RepairException.java  |   10 +-
 src/java/org/apache/cassandra/gms/Gossiper.java|   12 +-
 src/java/org/apache/cassandra/gms/IGossiper.java   |   39 +
 src/java/org/apache/cassandra/net/Message.java |   12 +-
 .../org/apache/cassandra/net/MessageDelivery.java  |   31 +
 .../org/apache/cassandra/net/MessagingService.java |   72 +-
 src/java/org/apache/cassandra/net/Verb.java|   43 +-
 .../cassandra/repair/AbstractRepairTask.java   |   44 +-
 .../cassandra/repair/AsymmetricRemoteSyncTask.java |7 +-
 .../cassandra/repair/IValidationManager.java   |   28 +
 .../cassandra/repair/IncrementalRepairTask.java|   17 +-
 .../org/apache/cassandra/repair/LocalSyncTask.java |   12 +-
 .../apache/cassandra/repair/NormalRepairTask.java  |7 +-
 .../apache/cassandra/repair/PreviewRepairTask.java |7 +-
 ...{RepairRunnable.java => RepairCoordinator.java} |  162 +--
 .../org/apache/cassandra/repair/RepairJob.java |   76 +-
 .../org/apache/cassandra/repair/RepairJobDesc.java |   11 +-
 .../cassandra/repair/RepairMessageVerbHandler.java |  250 +++-
 .../org/apache/cassandra/repair/RepairSession.java |  151 ++-
 .../org/apache/cassandra/repair/SharedContext.java |  165 +++
 .../org/apache/cassandra/repair/SnapshotTask.java  |   11 +-
 .../apache/cassandra/repair/StreamExecutor.java|   27 +
 .../cassandra/repair/StreamingRepairTask.java  |   24 +-
 .../cassandra/repair/SymmetricRemoteSyncTask.java  |7 +-
 src/java/org/apache/cassandra/repair/SyncTask.java |   18 +-
 .../apache/cassandra/repair/ValidationManager.java |   16 +-
 .../apache/cassandra/repair/ValidationTask.java|   61 +-
 .../org/apache/cassandra/repair/Validator.java |   25 +-
 .../repair/consistent/ConsistentSession.java   |9 +
 .../repair/consistent/CoordinatorSession.java  |   38 +-
 .../repair/consistent/CoordinatorSessions.java |   13 +-
 .../cassandra/repair/consistent/LocalSession.java  |   13 +-
 .../cassandra/repair/consistent/LocalSessions.java |   36 +-
 .../cassandra/repair/messages/CleanupMessage.java  |6 +
 .../cassandra/repair/messages/PrepareMessage.java  |6 +
 .../cassandra/repair/messages/RepairMessage.java   |  179 ++-
 .../repair/state/AbstractCompletable.java  |   28 +-
 .../cassandra/repair/state/AbstractState.java  |   69 +-
 .../apache/cassandra/repair/state/Completable.java |   33 +-
 .../cassandra/repair/state/CoordinatorState.java   |   41 +-
 .../apache/cassandra/repair/state/JobState.java|5 +-
 .../cassandra/repair/state/ParticipateState.java   |  160 ++-
 .../cassandra/repair/state/SessionState.java   |   21 +-
 .../apache/cassandra/repair/state/SyncState.java   |   85 ++
 .../cassandra/repair/state/ValidationState.java|   13 +-
 src/java/org/apache/cassandra/schema/Tables.java   |2 +-
 .../cassandra/service/ActiveRepairService.java |  270 ++--
 .../apache/cassandra/service/CassandraDaemon.java  |2 +-
 .../apache/cassandra/service/StorageService.java   |   24 +-
 .../cassandra/service/StorageServiceMBean.java |2 +-
 .../apache/cassandra/streaming/PreviewKind.java|2 +-
 .

[cassandra-accord] branch trunk updated: CEP-15: (C*) Improve the chaos generation for Burn Tests: slow/flakey connections and dropped messages (#57)

2023-09-13 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new fc3e1af1 CEP-15: (C*) Improve the chaos generation for Burn Tests: 
slow/flakey connections and dropped messages (#57)
fc3e1af1 is described below

commit fc3e1af12554e3befe6e44f4664278d91b4c0415
Author: dcapwell 
AuthorDate: Wed Sep 13 15:52:34 2023 -0700

CEP-15: (C*) Improve the chaos generation for Burn Tests: slow/flakey 
connections and dropped messages (#57)


patch by David Capwell; reviewed by Benedict Elliott Smith for 
CASSANDRA-18451
---
 .../accord/impl/AbstractConfigurationService.java  |   7 +
 accord-core/src/main/java/accord/local/Node.java   |  14 +-
 .../src/main/java/accord/local/PreLoadContext.java |  25 +++
 .../src/main/java/accord/messages/Accept.java  |   2 +-
 .../main/java/accord/messages/SafeCallback.java|   5 +
 accord-core/src/test/java/accord/Utils.java|   2 +-
 .../src/test/java/accord/burn/BurnTest.java|  66 ---
 .../src/test/java/accord/burn/TopologyUpdates.java |   3 +
 .../accord/burn/random/FrequentLargeRange.java | 134 +
 .../src/test/java/accord/burn/random/IntRange.java |   5 +-
 .../test/java/accord/burn/random/RandomInt.java|  32 ---
 .../java/accord/burn/random/RandomRangeTest.java   |   6 +-
 .../java/accord/burn/random/RandomWalkRange.java   |  13 +-
 .../burn/random/SegmentedRandomRangeTest.java  |   8 +-
 .../coordinate/tracking/TrackerReconciler.java |   2 +-
 .../src/test/java/accord/impl/MessageListener.java | 219 +
 .../src/test/java/accord/impl/basic/Cluster.java   |  57 +++---
 .../accord/impl/basic/DelayedCommandStores.java|   2 +-
 .../src/test/java/accord/impl/basic/NodeSink.java  | 135 +++--
 .../test/java/accord/impl/basic/PendingQueue.java  |   1 +
 .../accord/impl/basic/PropagatingPendingQueue.java |  14 +-
 .../java/accord/impl/basic/RandomDelayQueue.java   |  27 ++-
 .../basic/SimulatedDelayedExecutorService.java |  29 +--
 .../basic/SimulatedFault.java} |  11 +-
 .../src/test/java/accord/impl/list/ListAgent.java  |   2 +-
 .../test/java/accord/impl/list/ListRequest.java| 141 +
 .../src/test/java/accord/impl/list/ListResult.java |  57 ++
 .../test/java/accord/impl/mock/MockCluster.java|   2 +-
 .../java/accord/local/ImmutableCommandTest.java|   2 +-
 accord-core/src/test/java/accord/utils/Gen.java|  68 ++-
 .../src/test/java/accord/utils/GenTest.java|  76 +++
 accord-core/src/test/java/accord/utils/Gens.java   |   2 +-
 .../src/main/java/accord/maelstrom/Cluster.java|   2 +-
 .../src/main/java/accord/maelstrom/Main.java   |   2 +-
 .../src/main/groovy/accord.java-conventions.gradle |   4 +
 35 files changed, 931 insertions(+), 246 deletions(-)

diff --git 
a/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java 
b/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java
index d8ebab8f..d33c1231 100644
--- a/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java
+++ b/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java
@@ -269,6 +269,13 @@ public abstract class 
AbstractConfigurationService 0)
+{
+epochs.acknowledgeFuture(epochs.minEpoch()).addCallback(() -> 
reportTopology(topology, startSync));
+return;
+}
 if (lastAcked > 0 && topology.epoch() > lastAcked + 1)
 {
 epochs.acknowledgeFuture(lastAcked + 1).addCallback(() -> 
reportTopology(topology, startSync));
diff --git a/accord-core/src/main/java/accord/local/Node.java 
b/accord-core/src/main/java/accord/local/Node.java
index 1916f0bb..276f631e 100644
--- a/accord-core/src/main/java/accord/local/Node.java
+++ b/accord-core/src/main/java/accord/local/Node.java
@@ -169,10 +169,18 @@ public class Node implements 
ConfigurationService.Listener, NodeTimeService
 configService.registerListener(this);
 }
 
-// TODO (cleanup, testing): remove, only used by Maelstrom
-public AsyncResult start()
+/**
+ * This starts the node for tests and makes sure that the provided 
topology is acknowledged correctly.  This method is not
+ * safe for production systems as it doesn't handle restarts and partially 
acknowledged histories
+ * @return {@link EpochReady#metadata}
+ */
+@VisibleForTesting
+public AsyncResult unsafeStart()
 {
-return onTopologyUpdateInternal(configService.currentTopology(), 
false).metadata;
+EpochReady ready = 
onTopologyUpdateInternal(configService.currentTopology(), false);
+ready.coordination.addCallback(() -> 
this.topology.onEpochSyncComplete(id, topology.epoch()));
+configService.acknowledgeEpoch(ready, 

[cassandra] branch Tim deleted (was f8d5a1aa16)

2023-09-07 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch Tim
in repository https://gitbox.apache.org/repos/asf/cassandra.git


 was f8d5a1aa16 Merge branch 'cassandra-5.0' into trunk

The revisions that were on this branch are still contained in
other references; therefore, this change does not discard any commits
from the repository.


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra] branch Tim created (now f8d5a1aa16)

2023-09-06 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch Tim
in repository https://gitbox.apache.org/repos/asf/cassandra.git


  at f8d5a1aa16 Merge branch 'cassandra-5.0' into trunk

No new revisions were added by this update.


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] branch trunk updated: CEP-15 (C*): when loading commands that have empty waiting_on, make sure not to loose the partial deps (#61)

2023-08-21 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new 8c7a3c9e CEP-15 (C*): when loading commands that have empty 
waiting_on, make sure not to loose the partial deps (#61)
8c7a3c9e is described below

commit 8c7a3c9ef4209d635b186189e17a2d9e728e9871
Author: dcapwell 
AuthorDate: Mon Aug 21 13:30:49 2023 -0700

CEP-15 (C*): when loading commands that have empty waiting_on, make sure 
not to loose the partial deps (#61)


patch by David Capwell; reviewed by Aleksey Yeschenko for CASSANDRA-18783
---
 accord-core/src/main/java/accord/local/Command.java | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/accord-core/src/main/java/accord/local/Command.java 
b/accord-core/src/main/java/accord/local/Command.java
index dfad5f68..47f9caba 100644
--- a/accord-core/src/main/java/accord/local/Command.java
+++ b/accord-core/src/main/java/accord/local/Command.java
@@ -978,6 +978,12 @@ public abstract class Command implements CommonAttributes
 this.appliedOrInvalidated = appliedOrInvalidated;
 }
 
+public static WaitingOn none(Deps deps)
+{
+ImmutableBitSet empty = new ImmutableBitSet(deps.txnIdCount());
+return new WaitingOn(deps, empty, empty, empty);
+}
+
 public boolean isWaitingOnCommit()
 {
 return !waitingOnCommit.isEmpty();


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] branch trunk updated: CEP-15 (C*) When a host replacement happens don't loose the peer mapping right away (#60)

2023-08-16 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new 2ad55e03 CEP-15 (C*) When a host replacement happens don't loose the 
peer mapping right away (#60)
2ad55e03 is described below

commit 2ad55e03c43ce074cdf5e36cfa14cb4278c2dc0f
Author: dcapwell 
AuthorDate: Wed Aug 16 11:47:52 2023 -0700

CEP-15 (C*) When a host replacement happens don't loose the peer mapping 
right away (#60)


patch by David Capwell; reviewed by Blake Eggleston for CASSANDRA-18764
---
 accord-core/src/main/java/accord/api/ConfigurationService.java  | 2 +-
 .../src/main/java/accord/impl/AbstractConfigurationService.java | 6 +++---
 accord-core/src/main/java/accord/local/Node.java| 2 +-
 accord-core/src/main/java/accord/utils/async/AsyncResults.java  | 6 ++
 .../src/test/java/accord/burn/BurnTestConfigurationService.java | 2 +-
 .../src/test/java/accord/impl/AbstractConfigurationServiceTest.java | 6 +++---
 .../src/test/java/accord/impl/mock/MockConfigurationService.java| 2 +-
 .../src/main/java/accord/maelstrom/SimpleConfigService.java | 2 +-
 8 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/accord-core/src/main/java/accord/api/ConfigurationService.java 
b/accord-core/src/main/java/accord/api/ConfigurationService.java
index 4e6943fc..6ad9f205 100644
--- a/accord-core/src/main/java/accord/api/ConfigurationService.java
+++ b/accord-core/src/main/java/accord/api/ConfigurationService.java
@@ -173,7 +173,7 @@ public interface ConfigurationService
  * On invocation the system is not necessarily ready to process the epoch, 
and the BootstrapReady parameter
  * provides indications of when the bootstrap has completed various phases 
of setup.
  */
-void acknowledgeEpoch(EpochReady ready);
+void acknowledgeEpoch(EpochReady ready, boolean startSync);
 
 void reportEpochClosed(Ranges ranges, long epoch);
 
diff --git 
a/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java 
b/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java
index 7132f8d1..d8ebab8f 100644
--- a/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java
+++ b/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java
@@ -233,10 +233,10 @@ public abstract class 
AbstractConfigurationService {
 synchronized (AbstractConfigurationService.this)
@@ -247,7 +247,7 @@ public abstract class 
AbstractConfigurationService  {
 synchronized (AbstractConfigurationService.this)
 {
-localSyncComplete(epochs.getOrCreate(ready.epoch).topology);
+localSyncComplete(epochs.getOrCreate(ready.epoch).topology, 
startSync);
 }
 });
 }
diff --git a/accord-core/src/main/java/accord/local/Node.java 
b/accord-core/src/main/java/accord/local/Node.java
index 48bf5f51..7cf84dfe 100644
--- a/accord-core/src/main/java/accord/local/Node.java
+++ b/accord-core/src/main/java/accord/local/Node.java
@@ -209,7 +209,7 @@ public class Node implements ConfigurationService.Listener, 
NodeTimeService
 return AsyncResults.success(null);
 EpochReady ready = onTopologyUpdateInternal(topology, startSync);
 ready.coordination.addCallback(() -> 
this.topology.onEpochSyncComplete(id, topology.epoch()));
-configService.acknowledgeEpoch(ready);
+configService.acknowledgeEpoch(ready, startSync);
 return ready.coordination;
 }
 
diff --git a/accord-core/src/main/java/accord/utils/async/AsyncResults.java 
b/accord-core/src/main/java/accord/utils/async/AsyncResults.java
index 98e5ccf0..dfa7fe08 100644
--- a/accord-core/src/main/java/accord/utils/async/AsyncResults.java
+++ b/accord-core/src/main/java/accord/utils/async/AsyncResults.java
@@ -201,6 +201,12 @@ public class AsyncResults
 throw new IllegalStateException("Result succeeded");
 return result.failure;
 }
+
+@Override
+public String toString()
+{
+return getClass().getSimpleName() + "{status=" + (isDone() ? 
isSuccess() ? "success" : "failure" : "pending") + "}";
+}
 }
 
 static class Chain extends AbstractResult
diff --git 
a/accord-core/src/test/java/accord/burn/BurnTestConfigurationService.java 
b/accord-core/src/test/java/accord/burn/BurnTestConfigurationService.java
index b872a176..4c9ce6c0 100644
--- a/accord-core/src/test/java/accord/burn/BurnTestConfigurationService.java
+++ b/accord-core/src/test/java/accord/burn/BurnTestConfigurationService.java
@@ -158,7 +158,7 @@ public class BurnTestConfigurationService extends 
AbstractConfigurationService.M
 }
 
 @Override
-protected void localSyncCo

[cassandra-accord] branch CASSANDRA-18764 deleted (was d48a8a36)

2023-08-15 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch CASSANDRA-18764
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


 was d48a8a36 useful toString for async results

The revisions that were on this branch are still contained in
other references; therefore, this change does not discard any commits
from the repository.


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] 02/02: useful toString for async results

2023-08-15 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18764
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit d48a8a36f97447d75205f941f0f7b240b1a8db5d
Author: David Capwell 
AuthorDate: Tue Aug 15 16:37:41 2023 -0700

useful toString for async results
---
 accord-core/src/main/java/accord/utils/async/AsyncResults.java | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/accord-core/src/main/java/accord/utils/async/AsyncResults.java 
b/accord-core/src/main/java/accord/utils/async/AsyncResults.java
index 98e5ccf0..dfa7fe08 100644
--- a/accord-core/src/main/java/accord/utils/async/AsyncResults.java
+++ b/accord-core/src/main/java/accord/utils/async/AsyncResults.java
@@ -201,6 +201,12 @@ public class AsyncResults
 throw new IllegalStateException("Result succeeded");
 return result.failure;
 }
+
+@Override
+public String toString()
+{
+return getClass().getSimpleName() + "{status=" + (isDone() ? 
isSuccess() ? "success" : "failure" : "pending") + "}";
+}
 }
 
 static class Chain extends AbstractResult


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] 01/02: When a host replacement happens don't loose the peer mapping right away

2023-08-15 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18764
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit d58f4dde37ba76ab6704cb6c6993db692a763665
Author: David Capwell 
AuthorDate: Tue Aug 15 16:36:53 2023 -0700

When a host replacement happens don't loose the peer mapping right away
---
 accord-core/src/main/java/accord/api/ConfigurationService.java  | 2 +-
 .../src/main/java/accord/impl/AbstractConfigurationService.java | 6 +++---
 accord-core/src/main/java/accord/local/Node.java| 2 +-
 .../src/test/java/accord/burn/BurnTestConfigurationService.java | 2 +-
 .../src/test/java/accord/impl/AbstractConfigurationServiceTest.java | 6 +++---
 .../src/test/java/accord/impl/mock/MockConfigurationService.java| 2 +-
 .../src/main/java/accord/maelstrom/SimpleConfigService.java | 2 +-
 7 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/accord-core/src/main/java/accord/api/ConfigurationService.java 
b/accord-core/src/main/java/accord/api/ConfigurationService.java
index 4e6943fc..6ad9f205 100644
--- a/accord-core/src/main/java/accord/api/ConfigurationService.java
+++ b/accord-core/src/main/java/accord/api/ConfigurationService.java
@@ -173,7 +173,7 @@ public interface ConfigurationService
  * On invocation the system is not necessarily ready to process the epoch, 
and the BootstrapReady parameter
  * provides indications of when the bootstrap has completed various phases 
of setup.
  */
-void acknowledgeEpoch(EpochReady ready);
+void acknowledgeEpoch(EpochReady ready, boolean startSync);
 
 void reportEpochClosed(Ranges ranges, long epoch);
 
diff --git 
a/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java 
b/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java
index 7132f8d1..d8ebab8f 100644
--- a/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java
+++ b/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java
@@ -233,10 +233,10 @@ public abstract class 
AbstractConfigurationService {
 synchronized (AbstractConfigurationService.this)
@@ -247,7 +247,7 @@ public abstract class 
AbstractConfigurationService  {
 synchronized (AbstractConfigurationService.this)
 {
-localSyncComplete(epochs.getOrCreate(ready.epoch).topology);
+localSyncComplete(epochs.getOrCreate(ready.epoch).topology, 
startSync);
 }
 });
 }
diff --git a/accord-core/src/main/java/accord/local/Node.java 
b/accord-core/src/main/java/accord/local/Node.java
index 48bf5f51..7cf84dfe 100644
--- a/accord-core/src/main/java/accord/local/Node.java
+++ b/accord-core/src/main/java/accord/local/Node.java
@@ -209,7 +209,7 @@ public class Node implements ConfigurationService.Listener, 
NodeTimeService
 return AsyncResults.success(null);
 EpochReady ready = onTopologyUpdateInternal(topology, startSync);
 ready.coordination.addCallback(() -> 
this.topology.onEpochSyncComplete(id, topology.epoch()));
-configService.acknowledgeEpoch(ready);
+configService.acknowledgeEpoch(ready, startSync);
 return ready.coordination;
 }
 
diff --git 
a/accord-core/src/test/java/accord/burn/BurnTestConfigurationService.java 
b/accord-core/src/test/java/accord/burn/BurnTestConfigurationService.java
index b872a176..4c9ce6c0 100644
--- a/accord-core/src/test/java/accord/burn/BurnTestConfigurationService.java
+++ b/accord-core/src/test/java/accord/burn/BurnTestConfigurationService.java
@@ -158,7 +158,7 @@ public class BurnTestConfigurationService extends 
AbstractConfigurationService.M
 }
 
 @Override
-protected void localSyncComplete(Topology topology)
+protected void localSyncComplete(Topology topology, boolean startSync)
 {
 topologyUpdates.syncComplete(lookup.apply(localId), topology.nodes(), 
topology.epoch());
 }
diff --git 
a/accord-core/src/test/java/accord/impl/AbstractConfigurationServiceTest.java 
b/accord-core/src/test/java/accord/impl/AbstractConfigurationServiceTest.java
index b17fa3bf..f4829f0e 100644
--- 
a/accord-core/src/test/java/accord/impl/AbstractConfigurationServiceTest.java
+++ 
b/accord-core/src/test/java/accord/impl/AbstractConfigurationServiceTest.java
@@ -66,7 +66,7 @@ public class AbstractConfigurationServiceTest
 if (topologies.put(topology.epoch(), topology) != null)
 Assertions.fail("Received topology twice for epoch " + 
topology.epoch());
 if (ackTopologies)
-parent.acknowledgeEpoch(EpochReady.done(topology.epoch()));
+parent.acknowledgeEpoch(EpochReady.done(topology.epoch()), 
true);
 return AsyncResults.success(null);
 }
 
@@ -149,7 +149,7 @@ public class AbstractConfigurationServiceTest
 }
 
 @Override
-p

[cassandra-accord] branch CASSANDRA-18764 created (now d48a8a36)

2023-08-15 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch CASSANDRA-18764
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


  at d48a8a36 useful toString for async results

This branch includes the following new commits:

 new d58f4dde When a host replacement happens don't loose the peer mapping 
right away
 new d48a8a36 useful toString for async results

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra] branch cep-15-accord updated: CEP-15: (C*) Add notion of CommandsForRanges and make this durable in C*

2023-05-25 Thread dcapwell
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 4827516764 CEP-15: (C*) Add notion of CommandsForRanges and make this 
durable in C*
4827516764 is described below

commit 4827516764152441677032e6ef0b025b7912e111
Author: David Capwell 
AuthorDate: Thu May 25 13:20:39 2023 -0700

CEP-15: (C*) Add notion of CommandsForRanges and make this durable in C*

patch by David Capwell; reviewed by Ariel Weisberg for CASSANDRA-18519
---
 modules/accord |   2 +-
 src/java/org/apache/cassandra/dht/Token.java   |  11 +
 .../service/accord/AccordCommandStore.java | 134 +-
 .../service/accord/AccordCommandStores.java|  22 +
 .../service/accord/AccordConfigurationService.java |  13 +-
 ...AccordVerbHandler.java => AccordDataStore.java} |  35 +-
 .../cassandra/service/accord/AccordKeyspace.java   | 337 +-
 .../service/accord/AccordObjectSizes.java  |   3 +
 .../service/accord/AccordSafeCommandStore.java | 152 --
 .../cassandra/service/accord/AccordService.java|   8 +-
 .../cassandra/service/accord/AccordStateCache.java |   8 +
 .../service/accord/AccordVerbHandler.java  |  15 +-
 .../service/accord/CommandsForRanges.java  | 508 +
 .../service/accord/api/AccordRoutingKey.java   |  17 +-
 .../service/accord/async/AsyncLoader.java  | 113 -
 .../service/accord/async/AsyncOperation.java   |  20 +-
 .../serializers/CommandsForKeySerializer.java  |   2 +-
 .../accord/serializers/ListenerSerializers.java|  35 +-
 .../org/apache/cassandra/utils/IntervalTree.java   |  89 +++-
 .../distributed/impl/AbstractCluster.java  |   7 +-
 .../distributed/test/accord/AccordCQLTest.java |  18 +-
 .../distributed/test/accord/AccordTestBase.java|  39 +-
 .../distributed/test/accord/NewSchemaTest.java |  85 
 .../service/accord/async/AsyncLoaderTest.java  |  12 +-
 .../serializers/CommandsForKeySerializerTest.java  |   4 +-
 25 files changed, 1542 insertions(+), 147 deletions(-)

diff --git a/modules/accord b/modules/accord
index b99c4671fa..3d0ff07cd5 16
--- a/modules/accord
+++ b/modules/accord
@@ -1 +1 @@
-Subproject commit b99c4671fa0b22bed7f5a37fc5acaa2d2579e5b2
+Subproject commit 3d0ff07cd5c7db43390b85afa593e6f76471d886
diff --git a/src/java/org/apache/cassandra/dht/Token.java 
b/src/java/org/apache/cassandra/dht/Token.java
index bd327f96b9..00bbe66406 100644
--- a/src/java/org/apache/cassandra/dht/Token.java
+++ b/src/java/org/apache/cassandra/dht/Token.java
@@ -28,6 +28,7 @@ import org.apache.cassandra.io.util.DataInputPlus;
 import org.apache.cassandra.io.util.DataOutputPlus;
 import org.apache.cassandra.utils.bytecomparable.ByteComparable;
 import org.apache.cassandra.utils.bytecomparable.ByteSource;
+import org.apache.cassandra.utils.bytecomparable.ByteSourceInverse;
 
 public abstract class Token implements RingPosition, Serializable
 {
@@ -41,6 +42,16 @@ public abstract class Token implements RingPosition, 
Serializable
 public abstract ByteBuffer toByteArray(Token token);
 public abstract Token fromByteArray(ByteBuffer bytes);
 
+public byte[] toOrderedByteArray(Token token, ByteComparable.Version 
version)
+{
+return ByteSourceInverse.readBytes(asComparableBytes(token, 
version));
+}
+
+public Token fromOrderedByteArray(byte[] bytes, ByteComparable.Version 
version)
+{
+return 
fromComparableBytes(ByteSource.peekable(ByteSource.fixedLength(bytes)), 
version);
+}
+
 /**
  * Produce a byte-comparable representation of the token.
  * See {@link Token#asComparableBytes}
diff --git 
a/src/java/org/apache/cassandra/service/accord/AccordCommandStore.java 
b/src/java/org/apache/cassandra/service/accord/AccordCommandStore.java
index b3db3f3822..d2f627fb9b 100644
--- a/src/java/org/apache/cassandra/service/accord/AccordCommandStore.java
+++ b/src/java/org/apache/cassandra/service/accord/AccordCommandStore.java
@@ -18,19 +18,29 @@
 
 package org.apache.cassandra.service.accord;
 
+import java.util.Collections;
+import java.util.List;
 import java.util.Map;
+import java.util.NavigableMap;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.TimeUnit;
+import java.util.function.BiFunction;
 import java.util.function.Consumer;
 import java.util.function.Function;
 
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.ImmutableSet;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import accord.api.Agent;
 import accord.api.DataStore;
+import accord.api.Key;
 imp

[cassandra-accord] branch trunk updated: CEP-15: (C*) Add notion of CommandsForRanges and make this durable in C*

2023-05-25 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/trunk by this push:
 new 3d0ff07c CEP-15: (C*) Add notion of CommandsForRanges and make this 
durable in C*
3d0ff07c is described below

commit 3d0ff07cd5c7db43390b85afa593e6f76471d886
Author: David Capwell 
AuthorDate: Thu May 25 13:18:56 2023 -0700

CEP-15: (C*) Add notion of CommandsForRanges and make this durable in C*

patch by David Capwell; reviewed by Ariel Weisberg for CASSANDRA-18519
---
 .../java/accord/coordinate/RangeUnavailable.java   |  38 
 .../java/accord/coordinate/ReadCoordinator.java|   6 +-
 .../src/main/java/accord/coordinate/Recover.java   |   2 +-
 .../java/accord/impl/AbstractSafeCommandStore.java |   2 +-
 .../main/java/accord/impl/CommandTimeseries.java   | 229 +
 .../java/accord/impl/CommandTimeseriesHolder.java  |  29 +++
 .../src/main/java/accord/impl/CommandsForKey.java  | 185 +
 .../java/accord/impl/InMemoryCommandStore.java |  91 
 .../main/java/accord/impl/SafeCommandsForKey.java  |   3 +-
 .../src/main/java/accord/local/Bootstrap.java  |   4 +-
 .../src/main/java/accord/local/CommandStore.java   |  13 +-
 .../src/main/java/accord/local/CommandStores.java  |  27 ++-
 .../main/java/accord/local/SafeCommandStore.java   |   2 +
 .../src/main/java/accord/local/SaveStatus.java |  12 ++
 .../src/main/java/accord/primitives/Ranges.java|  20 ++
 .../src/main/java/accord/primitives/Timestamp.java |  10 +
 .../src/main/java/accord/topology/Topologies.java  |   5 +
 .../src/main/java/accord/topology/Topology.java|  53 +++--
 .../main/java/accord/topology/TopologyManager.java |  40 ++--
 .../main/java/accord/utils/async/AsyncChains.java  |   2 +-
 .../main/java/accord/utils/async/Observable.java   | 159 ++
 .../src/test/java/accord/impl/mock/EpochSync.java  |   2 +-
 .../test/java/accord/messages/PreAcceptTest.java   |   4 +-
 .../java/accord/topology/TopologyManagerTest.java  |   4 +-
 .../test/java/accord/topology/TopologyTest.java|   2 +-
 .../src/test/java/accord/maelstrom/Runner.java |   9 +-
 .../java/accord/maelstrom/SimpleRandomTest.java|   1 +
 27 files changed, 683 insertions(+), 271 deletions(-)

diff --git a/accord-core/src/main/java/accord/coordinate/RangeUnavailable.java 
b/accord-core/src/main/java/accord/coordinate/RangeUnavailable.java
new file mode 100644
index ..b94e506c
--- /dev/null
+++ b/accord-core/src/main/java/accord/coordinate/RangeUnavailable.java
@@ -0,0 +1,38 @@
+/*
+ * 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 accord.coordinate;
+
+import accord.primitives.Ranges;
+import accord.primitives.TxnId;
+
+public class RangeUnavailable extends Exhausted
+{
+public final Ranges unavailable;
+
+public RangeUnavailable(Ranges unavailable, TxnId txnId)
+{
+super(txnId, null, buildMessage(unavailable));
+this.unavailable = unavailable;
+}
+
+private static String buildMessage(Ranges unavailable)
+{
+return "The following ranges are unavailable to read: " + unavailable;
+}
+}
diff --git a/accord-core/src/main/java/accord/coordinate/ReadCoordinator.java 
b/accord-core/src/main/java/accord/coordinate/ReadCoordinator.java
index 66fa96c2..da744f7d 100644
--- a/accord-core/src/main/java/accord/coordinate/ReadCoordinator.java
+++ b/accord-core/src/main/java/accord/coordinate/ReadCoordinator.java
@@ -131,7 +131,11 @@ public abstract class ReadCoordinator exten
 break;
 
 case ApprovePartial:
-handle(recordPartialReadSuccess(from, unavailable(reply)));
+Ranges unavailable = unavailable(reply);
+RequestStatus result = recordPartialReadSuccess(from, 
unavailable);
+if (result == RequestStatus.Failed && failure == null)
+failure = new RangeUnavailable(unavailable, txnId);
+handle(result);
 break;
 }
 }
diff --git a/accor

[cassandra] 01/01: Merge branch 'cassandra-4.1' into trunk

2023-05-18 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit 8aaaf21127207818fba154d2034f352635b3f381
Merge: fe0e04c231 446a9d1d01
Author: David Capwell 
AuthorDate: Thu May 18 10:38:07 2023 -0700

Merge branch 'cassandra-4.1' into trunk

 CHANGES.txt|   2 +
 src/java/org/apache/cassandra/db/Directories.java  |   4 +-
 .../db/compaction/CompactionController.java|   2 +-
 .../cassandra/db/compaction/CompactionTask.java|  26 ++-
 .../test/CompactionOverlappingSSTableTest.java | 117 +++
 .../org/apache/cassandra/db/DirectoriesTest.java   |   2 +-
 .../db/compaction/PartialCompactionsTest.java  | 233 +
 7 files changed, 374 insertions(+), 12 deletions(-)

diff --cc CHANGES.txt
index 5fdc11b760,6167e04416..f648f5fafc
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,144 -1,4 +1,146 @@@
 +5.0
 + * Fix sstable formats configuration (CASSANDRA-18441)
 + * Add guardrail to bound timestamps (CASSANDRA-18352)
 + * Add keyspace_name column to system_views.clients (CASSANDRA-18525)
 + * Moved system properties and envs to CassandraRelevantProperties and 
CassandraRelevantEnv respectively (CASSANDRA-17797)
 + * Add sstablepartitions offline tool to find large partitions in sstables 
(CASSANDRA-8720)
 + * Replace usages of json-simple dependency by Jackson (CASSANDRA-16855)
 + * When decommissioning should set Severity to limit traffic (CASSANDRA-18430)
 + * For Java11 and Java17 remove -XX:-UseBiasedLocking as it is the default 
already (CASSANDRA-17869)
 + * Upgrade commons-io to 2.11.0 (CASSANDRA-17364)
 + * Node Draining Should Abort All Current SSTables Imports (CASSANDRA-18373)
 + * Use snake case for the names of CQL native functions (CASSANDRA-18037)
 + * Use jdk-dependent checkstyle version to check the source code 
(CASSANDRA-18262)
 + * Provide summary of failed SessionInfo's in StreamResultFuture 
(CASSANDRA-17199)
 + * CEP-20: Dynamic Data Masking (CASSANDRA-17940)
 + * Add system_views.snapshots virtual table (CASSANDRA-18102)
 + * Update OpenHFT dependencies (chronicle-queue, chronicle-core, 
chronicle-bytes, chronicle-wire, chronicle-threads) (CASSANDRA-18049)
 + * Remove org.apache.cassandra.hadoop code (CASSANDRA-18323)
 + * Remove deprecated CQL functions dateOf and unixTimestampOf 
(CASSANDRA-18328)
 + * Remove DateTieredCompactionStrategy (CASSANDRA-18043)
 + * Add system_views.max_sstable_size and system_views.max_sstable_duration 
tables (CASSANDRA-18333)
 + * Extend implicit allow-filtering for virtual tables to clustering columns 
(CASSANDRA-18331)
 + * Upgrade maven-shade-plugin to 3.4.1 to fix shaded dtest JAR build 
(CASSANDRA-18136)
 + * Upgrade to Opcodes.ASM9 (CASSANDRA-17971)
 + * Add MaxSSTableSize and MaxSSTableDuration metrics and propagate them 
together with local read/write ratio to tablestats (CASSANDRA-18283)
 + * Add more logging around CompactionManager operations (CASSANDRA-18268)
 + * Reduce memory allocations of calls to ByteBufer.duplicate() made in 
org.apache.cassandra.transport.CBUtil#writeValue (CASSANDRA-18212)
 + * CEP-17: SSTable API (CASSANDRA-17056)
 + * Gossip stateMapOrdering does not have correct ordering when both 
EndpointState are in the bootstrapping set (CASSANDRA-18292)
 + * Snapshot only sstables containing mismatching ranges on preview repair 
mismatch (CASSANDRA-17561)
 + * More accurate skipping of sstables in read path (CASSANDRA-18134)
 + * Prepare for JDK17 experimental support (CASSANDRA-18179, CASSANDRA-18258)
 + * Remove Scripted UDFs internals; hooks to be added later in CASSANDRA-17281 
(CASSANDRA-18252)
 + * Update JNA to 5.13.0 (CASSANDRA-18050)
 + * Make virtual tables decide if they implicitly enable ALLOW FILTERING 
(CASSANDRA-18238)
 + * Add row, tombstone, and sstable count to nodetool profileload 
(CASSANDRA-18022)
 + * Coordinator level metrics for read response and mutation row and column 
counts (CASSANDRA-18155)
 + * Add CQL functions for dynamic data masking (CASSANDRA-17941)
 + * Print friendly error when nodetool attempts to connect to uninitialized 
server (CASSANDRA-11537)
 + * Use G1GC by default, and update default G1GC settings (CASSANDRA-18027)
 + * SimpleSeedProvider can resolve multiple IP addresses per DNS record 
(CASSANDRA-14361)
 + * Remove mocking in InternalNodeProbe spying on StorageServiceMBean 
(CASSANDRA-18152)
 + * Add compaction_properties column to system.compaction_history table and 
nodetool compactionhistory command (CASSANDRA-18061)
 + * Remove ProtocolVersion entirely from the CollectionSerializer ecosystem 
(CASSANDRA-18114)
 + * Fix serialization error in new getsstables --show-levels option 
(CASSANDRA-18140)
 + * Use checked casts when reading vints as ints (CASSANDRA-18099)
 + * Add Mutation Serialization Caching (CASSANDRA-17998)
 + * Only reload compaction strategies if disk boundaries change

[cassandra] 01/01: Merge branch 'cassandra-4.0' into cassandra-4.1

2023-05-18 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch cassandra-4.1
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit 446a9d1d011be89e33970def2eb25366d6a24122
Merge: 402e2f2f73 1053e3b475
Author: David Capwell 
AuthorDate: Thu May 18 10:34:49 2023 -0700

Merge branch 'cassandra-4.0' into cassandra-4.1

 CHANGES.txt|   1 +
 .../db/compaction/CompactionController.java|   2 +-
 .../cassandra/db/compaction/CompactionTask.java|  25 ++-
 .../test/CompactionOverlappingSSTableTest.java | 115 
 .../db/compaction/PartialCompactionsTest.java  | 207 +
 5 files changed, 341 insertions(+), 9 deletions(-)

diff --cc CHANGES.txt
index baf11ee6c0,6db0e3b084..6167e04416
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,11 -1,5 +1,12 @@@
 -4.0.10
 +4.1.2
 + * Allow keystore and trustrore passwords to be nullable (CASSANDRA-18124)
 + * Return snapshots with dots in their name in nodetool listsnapshots 
(CASSANDRA-18371)
 + * Fix NPE when loading snapshots and data directory is one directory from 
root (CASSANDRA-18359)
 + * Do not submit hints when hinted_handoff_enabled=false (CASSANDRA-18304)
 + * Fix COPY ... TO STDOUT behavior in cqlsh (CASSANDRA-18353)
 + * Remove six and Py2SaferScanner merge cruft (CASSANDRA-18354)
 +Merged from 4.0:
+  * Partial compaction can resurrect deleted data (CASSANDRA-18507)
   * Allow internal address to change with reconnecting snitches 
(CASSANDRA-16718)
   * Fix quoting in toCqlString methods of UDTs and aggregates (CASSANDRA-17918)
   * NPE when deserializing malformed collections from client (CASSANDRA-18505)
diff --cc src/java/org/apache/cassandra/db/compaction/CompactionTask.java
index dc08f5ae01,90abac3fb2..5fc8031966
--- a/src/java/org/apache/cassandra/db/compaction/CompactionTask.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionTask.java
@@@ -88,13 -83,14 +88,14 @@@ public class CompactionTask extends Abs
  if (partialCompactionsAcceptable() && transaction.originals().size() 
> 1)
  {
  // Try again w/o the largest one.
- logger.warn("insufficient space to compact all requested files. 
{}MiB required, {} for compaction {}",
+ SSTableReader removedSSTable = 
cfs.getMaxSizeFile(nonExpiredSSTables);
 -logger.warn("insufficient space to compact all requested files. 
{}MB required, {} for compaction {} - removing largest SSTable: {}",
++logger.warn("insufficient space to compact all requested files. 
{}MiB required, {} for compaction {} - removing largest SSTable: {}",
  (float) expectedSize / 1024 / 1024,
  StringUtils.join(transaction.originals(), ", "),
- transaction.opId());
+ transaction.opId(),
+ removedSSTable);
  // Note that we have removed files that are still marked as 
compacting.
  // This suboptimal but ok since the caller will unmark all the 
sstables at the end.
- SSTableReader removedSSTable = 
cfs.getMaxSizeFile(nonExpiredSSTables);
  transaction.cancel(removedSSTable);
  return true;
  }
diff --cc 
test/distributed/org/apache/cassandra/distributed/test/CompactionOverlappingSSTableTest.java
index 00,54f8ad7a7a..6a65c91437
mode 00,100644..100644
--- 
a/test/distributed/org/apache/cassandra/distributed/test/CompactionOverlappingSSTableTest.java
+++ 
b/test/distributed/org/apache/cassandra/distributed/test/CompactionOverlappingSSTableTest.java
@@@ -1,0 -1,114 +1,115 @@@
+ /*
+  * 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.test;
+ 
+ import java.io.IOException;
+ import java.util.Arrays;
+ import java.util.Set;
+ import java.util.concurrent.TimeUnit;
++import java.util.concurrent.TimeoutException;
+ import java.util.concurrent.atomic.AtomicBoolean;
+ import java.util.stream.Collectors;
+ 
+ import com.google.comm

[cassandra] branch cassandra-4.0 updated: Partial compaction can resurrect deleted data

2023-05-18 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch cassandra-4.0
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/cassandra-4.0 by this push:
 new 1053e3b475 Partial compaction can resurrect deleted data
1053e3b475 is described below

commit 1053e3b475829c7f2d0dc4ab59322d5819d1496a
Author: Tobias Lindaaker 
AuthorDate: Wed May 17 10:42:59 2023 -0700

Partial compaction can resurrect deleted data

patch by Tobias Lindaaker, Marcus Eriksson; reviewed by David Capwell, 
Marcus Eriksson for CASSANDRA-18507
---
 CHANGES.txt|   1 +
 .../db/compaction/CompactionController.java|   2 +-
 .../cassandra/db/compaction/CompactionTask.java|  25 ++-
 .../test/CompactionOverlappingSSTableTest.java | 114 
 .../db/compaction/PartialCompactionsTest.java  | 207 +
 5 files changed, 340 insertions(+), 9 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index 097950afb2..6db0e3b084 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 4.0.10
+ * Partial compaction can resurrect deleted data (CASSANDRA-18507)
  * Allow internal address to change with reconnecting snitches 
(CASSANDRA-16718)
  * Fix quoting in toCqlString methods of UDTs and aggregates (CASSANDRA-17918)
  * NPE when deserializing malformed collections from client (CASSANDRA-18505)
diff --git 
a/src/java/org/apache/cassandra/db/compaction/CompactionController.java 
b/src/java/org/apache/cassandra/db/compaction/CompactionController.java
index bb2094f931..cee2b58f75 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionController.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionController.java
@@ -116,7 +116,7 @@ public class CompactionController extends 
AbstractCompactionController
 }
 }
 
-private void refreshOverlaps()
+void refreshOverlaps()
 {
 if (NEVER_PURGE_TOMBSTONES || cfs.getNeverPurgeTombstones())
 return;
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionTask.java 
b/src/java/org/apache/cassandra/db/compaction/CompactionTask.java
index 3b0e1729d4..90abac3fb2 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionTask.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionTask.java
@@ -83,13 +83,14 @@ public class CompactionTask extends AbstractCompactionTask
 if (partialCompactionsAcceptable() && transaction.originals().size() > 
1)
 {
 // Try again w/o the largest one.
-logger.warn("insufficient space to compact all requested files. 
{}MB required, {} for compaction {}",
+SSTableReader removedSSTable = 
cfs.getMaxSizeFile(nonExpiredSSTables);
+logger.warn("insufficient space to compact all requested files. 
{}MB required, {} for compaction {} - removing largest SSTable: {}",
 (float) expectedSize / 1024 / 1024,
 StringUtils.join(transaction.originals(), ", "),
-transaction.opId());
+transaction.opId(),
+removedSSTable);
 // Note that we have removed files that are still marked as 
compacting.
 // This suboptimal but ok since the caller will unmark all the 
sstables at the end.
-SSTableReader removedSSTable = 
cfs.getMaxSizeFile(nonExpiredSSTables);
 transaction.cancel(removedSSTable);
 return true;
 }
@@ -123,7 +124,12 @@ public class CompactionTask extends AbstractCompactionTask
 final Set fullyExpiredSSTables = 
controller.getFullyExpiredSSTables();
 
 // select SSTables to compact based on available disk space.
-
buildCompactionCandidatesForAvailableDiskSpace(fullyExpiredSSTables);
+if 
(!buildCompactionCandidatesForAvailableDiskSpace(fullyExpiredSSTables))
+{
+// The set of sstables has changed (one or more were excluded 
due to limited available disk space).
+// We need to recompute the overlaps between sstables.
+controller.refreshOverlaps();
+}
 
 // sanity check: all sstables must belong to the same cfs
 assert !Iterables.any(transaction.originals(), new 
Predicate()
@@ -345,13 +351,15 @@ public class CompactionTask extends AbstractCompactionTask
  * Checks if we have enough disk space to execute the compaction.  Drops 
the largest sstable out of the Task until
  * there's enough space (in theory) to handle the compaction.  Does not 
take into account space that will be taken by
  * other compactions.
+ *
+ * @return true if there is enough disk space to execute the complete 
compaction, false if some sstables a

[cassandra] branch cassandra-4.1 updated (402e2f2f73 -> 446a9d1d01)

2023-05-18 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch cassandra-4.1
in repository https://gitbox.apache.org/repos/asf/cassandra.git


from 402e2f2f73 Merge branch 'cassandra-4.0' into cassandra-4.1
 new 1053e3b475 Partial compaction can resurrect deleted data
 new 446a9d1d01 Merge branch 'cassandra-4.0' into cassandra-4.1

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGES.txt|   1 +
 .../db/compaction/CompactionController.java|   2 +-
 .../cassandra/db/compaction/CompactionTask.java|  25 ++-
 .../test/CompactionOverlappingSSTableTest.java | 115 
 .../db/compaction/PartialCompactionsTest.java  | 207 +
 5 files changed, 341 insertions(+), 9 deletions(-)
 create mode 100644 
test/distributed/org/apache/cassandra/distributed/test/CompactionOverlappingSSTableTest.java
 create mode 100644 
test/unit/org/apache/cassandra/db/compaction/PartialCompactionsTest.java


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra] branch trunk updated (fe0e04c231 -> 8aaaf21127)

2023-05-18 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git


from fe0e04c231 Fix sstable formats configuration
 new 1053e3b475 Partial compaction can resurrect deleted data
 new 446a9d1d01 Merge branch 'cassandra-4.0' into cassandra-4.1
 new 8aaaf21127 Merge branch 'cassandra-4.1' into trunk

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGES.txt|   2 +
 src/java/org/apache/cassandra/db/Directories.java  |   4 +-
 .../db/compaction/CompactionController.java|   2 +-
 .../cassandra/db/compaction/CompactionTask.java|  26 ++-
 .../test/CompactionOverlappingSSTableTest.java | 117 +++
 .../org/apache/cassandra/db/DirectoriesTest.java   |   2 +-
 .../db/compaction/PartialCompactionsTest.java  | 233 +
 7 files changed, 374 insertions(+), 12 deletions(-)
 create mode 100644 
test/distributed/org/apache/cassandra/distributed/test/CompactionOverlappingSSTableTest.java
 create mode 100644 
test/unit/org/apache/cassandra/db/compaction/PartialCompactionsTest.java


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] branch CASSANDRA-18519 deleted (was 37b2e2b8)

2023-05-17 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a change to branch CASSANDRA-18519
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


 was 37b2e2b8 trigger ci

This change permanently discards the following revisions:

 discard 37b2e2b8 trigger ci
 discard 16be4e95 improve error msg
 discard 745c2815 added a distinct filter
 discard e1835dac fix imports
 discard 9429814f fixed import order
 discard 223beebe fix import after rebase
 discard 4d029dcd revert import ordering
 discard cfabfdac Observable.asChain now takes a collector so we can work with 
list/set
 discard c054e1dc onError and onComplete now required, and added new asChain 
method
 discard c7b03c47 refactors
 discard 722ce531 refactor to pull CommandTimeseries out and make it work with 
Seekable.  This is to make way for range txn support
 discard 856127f6 onNext now is allowed to throw checked exception
 discard bed28e17 created new forCallback to help bridge the gap between 
AsyncChain and Observable
 discard aa3611bd docs
 discard 2a34e823 checkpoint
 discard 8c99d1c0 Lazy deserialize fields from CommandsForKey to avoid when not 
needed


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] branch CASSANDRA-18519 updated: trigger ci

2023-05-17 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18519
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git


The following commit(s) were added to refs/heads/CASSANDRA-18519 by this push:
 new 37b2e2b8 trigger ci
37b2e2b8 is described below

commit 37b2e2b80dfd7c820260b0003c24da9ac6ae36c7
Author: David Capwell 
AuthorDate: Wed May 17 15:19:34 2023 -0700

trigger ci


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] 14/15: added a distinct filter

2023-05-16 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18519
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit 745c2815806e1dd173016c763b51d05300c262b9
Author: David Capwell 
AuthorDate: Tue May 16 14:09:23 2023 -0700

added a distinct filter
---
 .../main/java/accord/utils/async/Observable.java   | 33 ++
 1 file changed, 33 insertions(+)

diff --git a/accord-core/src/main/java/accord/utils/async/Observable.java 
b/accord-core/src/main/java/accord/utils/async/Observable.java
index ad184c9a..29f863e5 100644
--- a/accord-core/src/main/java/accord/utils/async/Observable.java
+++ b/accord-core/src/main/java/accord/utils/async/Observable.java
@@ -19,7 +19,9 @@
 package accord.utils.async;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
 import java.util.function.Function;
@@ -65,6 +67,37 @@ public interface Observable
 };
 }
 
+static  Observable distinct(Observable callback)
+{
+return new Observable()
+{
+Set keys = new HashSet<>();
+
+@Override
+public void onNext(T value) throws Exception
+{
+if (keys.add(value))
+callback.onNext(value);
+}
+
+@Override
+public void onError(Throwable t)
+{
+keys.clear();
+keys = null;
+callback.onError(t);
+}
+
+@Override
+public void onCompleted()
+{
+keys.clear();
+keys = null;
+callback.onCompleted();
+}
+};
+}
+
 static  Observable forCallback(BiConsumer, 
Throwable> callback)
 {
 return new Observable()


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] 12/15: fixed import order

2023-05-16 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18519
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit 9429814f8dd3583ebfcbb931127fa5d44e0b81f4
Author: David Capwell 
AuthorDate: Tue May 16 13:43:15 2023 -0700

fixed import order
---
 .../src/main/java/accord/impl/InMemoryCommandStore.java | 17 -
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/accord-core/src/main/java/accord/impl/InMemoryCommandStore.java 
b/accord-core/src/main/java/accord/impl/InMemoryCommandStore.java
index ed8270ff..6ca87093 100644
--- a/accord-core/src/main/java/accord/impl/InMemoryCommandStore.java
+++ b/accord-core/src/main/java/accord/impl/InMemoryCommandStore.java
@@ -35,15 +35,6 @@ import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
-import accord.impl.CommandTimeseries.CommandLoader;
-import accord.local.CommandStores.RangesForEpochHolder;
-import accord.local.CommandStores.RangesForEpoch;
-import accord.primitives.Timestamp;
-import accord.primitives.TxnId;
-import accord.utils.Invariants;
-import accord.utils.async.AsyncChain;
-import accord.utils.async.AsyncChains;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -57,8 +48,11 @@ import accord.api.Agent;
 import accord.api.DataStore;
 import accord.api.Key;
 import accord.api.ProgressLog;
+import accord.impl.CommandTimeseries.CommandLoader;
 import accord.local.Command;
 import accord.local.CommandStore;
+import accord.local.CommandStores.RangesForEpoch;
+import accord.local.CommandStores.RangesForEpochHolder;
 import accord.local.CommonAttributes;
 import accord.local.Listeners;
 import accord.local.NodeTimeService;
@@ -77,6 +71,11 @@ import accord.primitives.RoutableKey;
 import accord.primitives.Routables;
 import accord.primitives.Seekable;
 import accord.primitives.Seekables;
+import accord.primitives.Timestamp;
+import accord.primitives.TxnId;
+import accord.utils.Invariants;
+import accord.utils.async.AsyncChain;
+import accord.utils.async.AsyncChains;
 
 import static accord.local.SafeCommandStore.TestDep.ANY_DEPS;
 import static accord.local.SafeCommandStore.TestDep.WITH;


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] 02/15: checkpoint

2023-05-16 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18519
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit 2a34e823cd2b8d53b15d9fa7a5aef9eb3ebc248b
Author: David Capwell 
AuthorDate: Wed May 10 16:24:20 2023 -0700

checkpoint
---
 .../src/main/java/accord/local/CommandStores.java  | 12 +
 .../src/main/java/accord/primitives/Timestamp.java | 10 
 .../src/main/java/accord/primitives/TxnId.java |  7 +++
 .../main/java/accord/utils/async/Observable.java   | 63 ++
 4 files changed, 92 insertions(+)

diff --git a/accord-core/src/main/java/accord/local/CommandStores.java 
b/accord-core/src/main/java/accord/local/CommandStores.java
index b8203a1f..1a37c910 100644
--- a/accord-core/src/main/java/accord/local/CommandStores.java
+++ b/accord-core/src/main/java/accord/local/CommandStores.java
@@ -554,6 +554,18 @@ public abstract class CommandStores
 return snapshot.byId.get(id);
 }
 
+public int[] ids()
+{
+Snapshot snapshot = current;
+Int2ObjectHashMap.KeySet set = snapshot.byId.keySet();
+int[] ids = new int[set.size()];
+int idx = 0;
+for (int a : set)
+ids[idx++] = a;
+Arrays.sort(ids);
+return ids;
+}
+
 public int count()
 {
 return current.shards.length;
diff --git a/accord-core/src/main/java/accord/primitives/Timestamp.java 
b/accord-core/src/main/java/accord/primitives/Timestamp.java
index 13bc2a55..1a5a44e4 100644
--- a/accord-core/src/main/java/accord/primitives/Timestamp.java
+++ b/accord-core/src/main/java/accord/primitives/Timestamp.java
@@ -345,4 +345,14 @@ public class Timestamp implements Comparable
 {
 return "[" + epoch() + ',' + hlc() + ',' + flags() + ',' + node + ']';
 }
+
+public static Timestamp fromString(String string)
+{
+String[] split = string.replaceFirst("\\[", "").replaceFirst("\\]", 
"").split(",");
+assert split.length == 4;
+return Timestamp.fromValues(Long.parseLong(split[0]),
+Long.parseLong(split[1]),
+Integer.parseInt(split[2]),
+new Id(Integer.parseInt(split[3])));
+}
 }
diff --git a/accord-core/src/main/java/accord/primitives/TxnId.java 
b/accord-core/src/main/java/accord/primitives/TxnId.java
index b46602db..d2783f16 100644
--- a/accord-core/src/main/java/accord/primitives/TxnId.java
+++ b/accord-core/src/main/java/accord/primitives/TxnId.java
@@ -35,6 +35,13 @@ public class TxnId extends Timestamp
 return new TxnId(msb, lsb, node);
 }
 
+public static TxnId fromTimestamp(Timestamp t)
+{
+if (t instanceof TxnId)
+return (TxnId) t;
+return new TxnId(t.epoch(), t.hlc(), t.flags(), t.node);
+}
+
 public static TxnId fromValues(long epoch, long hlc, Id node)
 {
 return new TxnId(epoch, hlc, 0, node);
diff --git a/accord-core/src/main/java/accord/utils/async/Observable.java 
b/accord-core/src/main/java/accord/utils/async/Observable.java
new file mode 100644
index ..ac005e24
--- /dev/null
+++ b/accord-core/src/main/java/accord/utils/async/Observable.java
@@ -0,0 +1,63 @@
+/*
+ * 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 accord.utils.async;
+
+import java.util.function.Function;
+
+public interface Observable
+{
+void onNext(T value);
+default void onError(Throwable t) {}
+default void onCompleted() {}
+
+default  Observable map(Function mapper)
+{
+return new Map<>(this, mapper);
+}
+
+class Map implements Observable
+{
+private final Observable next;
+private final Function mapper;
+
+public Map(Observable next, Function mapper)
+{
+this.next = next;
+this.mapper = mapper;
+}
+
+@Override
+public void onNext(A value)
+{
+next.onNext(mapper.apply(value));
+}
+
+@Override
+public void onError

[cassandra-accord] 13/15: fix imports

2023-05-16 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18519
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit e1835dac4efcff74b8a0287a35b957c0bc02c517
Author: David Capwell 
AuthorDate: Tue May 16 13:44:34 2023 -0700

fix imports
---
 accord-core/src/main/java/accord/impl/InMemoryCommandStore.java | 9 -
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/accord-core/src/main/java/accord/impl/InMemoryCommandStore.java 
b/accord-core/src/main/java/accord/impl/InMemoryCommandStore.java
index 6ca87093..343d0dce 100644
--- a/accord-core/src/main/java/accord/impl/InMemoryCommandStore.java
+++ b/accord-core/src/main/java/accord/impl/InMemoryCommandStore.java
@@ -34,11 +34,6 @@ import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.annotation.Nullable;
 import java.util.function.BiConsumer;
 import java.util.function.BiFunction;
 import java.util.function.Consumer;
@@ -76,6 +71,10 @@ import accord.primitives.TxnId;
 import accord.utils.Invariants;
 import accord.utils.async.AsyncChain;
 import accord.utils.async.AsyncChains;
+import javax.annotation.Nullable;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static accord.local.SafeCommandStore.TestDep.ANY_DEPS;
 import static accord.local.SafeCommandStore.TestDep.WITH;


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] 08/15: onError and onComplete now required, and added new asChain method

2023-05-16 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18519
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit c054e1dcc0ac001c74d7a93a744197b4af9acf1e
Author: David Capwell 
AuthorDate: Mon May 15 12:36:53 2023 -0700

onError and onComplete now required, and added new asChain method
---
 .../main/java/accord/utils/async/Observable.java   | 49 +-
 1 file changed, 47 insertions(+), 2 deletions(-)

diff --git a/accord-core/src/main/java/accord/utils/async/Observable.java 
b/accord-core/src/main/java/accord/utils/async/Observable.java
index 00986e6b..4d4a5dc7 100644
--- a/accord-core/src/main/java/accord/utils/async/Observable.java
+++ b/accord-core/src/main/java/accord/utils/async/Observable.java
@@ -21,6 +21,7 @@ package accord.utils.async;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.function.BiConsumer;
+import java.util.function.Consumer;
 import java.util.function.Function;
 
 /**
@@ -30,8 +31,10 @@ import java.util.function.Function;
 public interface Observable
 {
 void onNext(T value) throws Exception;
-default void onError(Throwable t) {}
-default void onCompleted() {}
+
+void onError(Throwable t);
+
+void onCompleted();
 
 default  Observable map(Function mapper)
 {
@@ -89,4 +92,46 @@ public interface Observable
 }
 };
 }
+
+static  AsyncChain> asChain(Consumer> work)
+{
+return asChain(work, Function.identity());
+}
+
+static  AsyncChain> asChain(Consumer> work, 
Function mapper)
+{
+return new AsyncChains.Head>()
+{
+@Override
+protected void start(BiConsumer, Throwable> 
callback)
+{
+work.accept(new Observable()
+{
+List values = new ArrayList<>();
+
+@Override
+public void onNext(A value)
+{
+values.add(mapper.apply(value));
+}
+
+@Override
+public void onError(Throwable t)
+{
+values.clear();
+values = null;
+callback.accept(null, t);
+}
+
+@Override
+public void onCompleted()
+{
+List values = this.values;
+this.values = null;
+callback.accept(values, null);
+}
+});
+}
+};
+}
 }


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] 11/15: fix import after rebase

2023-05-16 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18519
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit 223beebeb0fe9d8143d388e0c5ba07728c4be1d7
Author: David Capwell 
AuthorDate: Tue May 16 13:41:24 2023 -0700

fix import after rebase
---
 accord-core/src/main/java/accord/impl/AbstractSafeCommandStore.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git 
a/accord-core/src/main/java/accord/impl/AbstractSafeCommandStore.java 
b/accord-core/src/main/java/accord/impl/AbstractSafeCommandStore.java
index cc7de494..36bc696b 100644
--- a/accord-core/src/main/java/accord/impl/AbstractSafeCommandStore.java
+++ b/accord-core/src/main/java/accord/impl/AbstractSafeCommandStore.java
@@ -26,7 +26,7 @@ import java.util.function.Consumer;
 import java.util.function.Function;
 
 import accord.api.VisibleForImplementation;
-import accord.impl.CommandsForKey.CommandLoader;
+import accord.impl.CommandTimeseries.CommandLoader;
 import accord.local.Command;
 import accord.local.CommonAttributes;
 import accord.local.PreLoadContext;


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] 10/15: revert import ordering

2023-05-16 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18519
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit 4d029dcdb7d3bd4751121420586a3863d3e7dc9d
Author: David Capwell 
AuthorDate: Tue May 16 13:38:01 2023 -0700

revert import ordering
---
 accord-core/src/main/java/accord/impl/AbstractSafeCommandStore.java | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git 
a/accord-core/src/main/java/accord/impl/AbstractSafeCommandStore.java 
b/accord-core/src/main/java/accord/impl/AbstractSafeCommandStore.java
index d3717ce7..cc7de494 100644
--- a/accord-core/src/main/java/accord/impl/AbstractSafeCommandStore.java
+++ b/accord-core/src/main/java/accord/impl/AbstractSafeCommandStore.java
@@ -22,12 +22,11 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import accord.api.VisibleForImplementation;
-import accord.impl.CommandTimeseries.CommandLoader;
-
 import java.util.function.Consumer;
 import java.util.function.Function;
 
+import accord.api.VisibleForImplementation;
+import accord.impl.CommandsForKey.CommandLoader;
 import accord.local.Command;
 import accord.local.CommonAttributes;
 import accord.local.PreLoadContext;


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] 09/15: Observable.asChain now takes a collector so we can work with list/set

2023-05-16 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18519
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit cfabfdac6f5ed927c1acb7568d3eb13aad6d4573
Author: David Capwell 
AuthorDate: Tue May 16 13:31:02 2023 -0700

Observable.asChain now takes a collector so we can work with list/set
---
 .../main/java/accord/utils/async/Observable.java   | 27 ++
 1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/accord-core/src/main/java/accord/utils/async/Observable.java 
b/accord-core/src/main/java/accord/utils/async/Observable.java
index 4d4a5dc7..ad184c9a 100644
--- a/accord-core/src/main/java/accord/utils/async/Observable.java
+++ b/accord-core/src/main/java/accord/utils/async/Observable.java
@@ -23,6 +23,8 @@ import java.util.List;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
 import java.util.function.Function;
+import java.util.stream.Collector;
+import java.util.stream.Collectors;
 
 /**
  * Stream like interface that is "pushed" results (to the {@link 
#onNext(Object)} method).  This interface is similar,
@@ -95,30 +97,37 @@ public interface Observable
 
 static  AsyncChain> asChain(Consumer> work)
 {
-return asChain(work, Function.identity());
+return asChain(work, Function.identity(), Collectors.toList());
 }
 
-static  AsyncChain> asChain(Consumer> work, 
Function mapper)
+static  AsyncChain 
asChain(Consumer> work,
+   Collector collector)
 {
-return new AsyncChains.Head>()
+return asChain(work, Function.identity(), collector);
+}
+
+static  AsyncChain 
asChain(Consumer> work,
+  Function mapper,
+  Collector collector)
+{
+return new AsyncChains.Head()
 {
 @Override
-protected void start(BiConsumer, Throwable> 
callback)
+protected void start(BiConsumer 
callback)
 {
 work.accept(new Observable()
 {
-List values = new ArrayList<>();
+Accumulator values = collector.supplier().get();
 
 @Override
 public void onNext(A value)
 {
-values.add(mapper.apply(value));
+collector.accumulator().accept(values, 
mapper.apply(value));
 }
 
 @Override
 public void onError(Throwable t)
 {
-values.clear();
 values = null;
 callback.accept(null, t);
 }
@@ -126,9 +135,9 @@ public interface Observable
 @Override
 public void onCompleted()
 {
-List values = this.values;
+Result result = 
collector.finisher().apply(this.values);
 this.values = null;
-callback.accept(values, null);
+callback.accept(result, null);
 }
 });
 }


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] 15/15: improve error msg

2023-05-16 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18519
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit 16be4e95bac3868569e04ede195e9e649947ae1b
Author: David Capwell 
AuthorDate: Tue May 16 14:30:12 2023 -0700

improve error msg
---
 accord-core/src/main/java/accord/utils/async/AsyncChains.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/accord-core/src/main/java/accord/utils/async/AsyncChains.java 
b/accord-core/src/main/java/accord/utils/async/AsyncChains.java
index 809ca1c7..4c3e7eb4 100644
--- a/accord-core/src/main/java/accord/utils/async/AsyncChains.java
+++ b/accord-core/src/main/java/accord/utils/async/AsyncChains.java
@@ -462,7 +462,7 @@ public abstract class AsyncChains implements 
AsyncChain
 
 public static  AsyncChain reduce(List> chains, BiFunction reducer)
 {
-Invariants.checkArgument(!chains.isEmpty());
+Invariants.checkArgument(!chains.isEmpty(), "List of chains is empty");
 if (chains.size() == 1)
 return (AsyncChain) chains.get(0);
 if (Reduce.canAppendTo(chains.get(0), reducer))


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] 03/15: docs

2023-05-16 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18519
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit aa3611bd71f0e5aa359d055cf2d2818715be0dc1
Author: David Capwell 
AuthorDate: Thu May 11 09:14:15 2023 -0700

docs
---
 accord-core/src/main/java/accord/utils/async/Observable.java | 4 
 1 file changed, 4 insertions(+)

diff --git a/accord-core/src/main/java/accord/utils/async/Observable.java 
b/accord-core/src/main/java/accord/utils/async/Observable.java
index ac005e24..3f4f5cfb 100644
--- a/accord-core/src/main/java/accord/utils/async/Observable.java
+++ b/accord-core/src/main/java/accord/utils/async/Observable.java
@@ -20,6 +20,10 @@ package accord.utils.async;
 
 import java.util.function.Function;
 
+/**
+ * Stream like interface that is "pushed" results (to the {@link 
#onNext(Object)} method).  This interface is similar,
+ * yet different from {@link AsyncChain} as that type works with a single 
element, whereas this type works with 0-n.
+ */
 public interface Observable
 {
 void onNext(T value);


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] 05/15: onNext now is allowed to throw checked exception

2023-05-16 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18519
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit 856127f6a3012fa4529c1053f1cae7bf0ee24ac9
Author: David Capwell 
AuthorDate: Thu May 11 13:40:41 2023 -0700

onNext now is allowed to throw checked exception
---
 accord-core/src/main/java/accord/utils/async/Observable.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/accord-core/src/main/java/accord/utils/async/Observable.java 
b/accord-core/src/main/java/accord/utils/async/Observable.java
index bcf9695a..00986e6b 100644
--- a/accord-core/src/main/java/accord/utils/async/Observable.java
+++ b/accord-core/src/main/java/accord/utils/async/Observable.java
@@ -29,7 +29,7 @@ import java.util.function.Function;
  */
 public interface Observable
 {
-void onNext(T value);
+void onNext(T value) throws Exception;
 default void onError(Throwable t) {}
 default void onCompleted() {}
 
@@ -41,7 +41,7 @@ public interface Observable
 return new Observable()
 {
 @Override
-public void onNext(R value)
+public void onNext(R value) throws Exception
 {
 self.onNext(mapper.apply(value));
 }


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[cassandra-accord] 06/15: refactor to pull CommandTimeseries out and make it work with Seekable. This is to make way for range txn support

2023-05-16 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18519
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit 722ce5313d42f021d4e322dca6c45a039377d2d2
Author: David Capwell 
AuthorDate: Thu May 11 15:08:05 2023 -0700

refactor to pull CommandTimeseries out and make it work with Seekable.  
This is to make way for range txn support
---
 .../java/accord/impl/AbstractSafeCommandStore.java |   5 +-
 .../main/java/accord/impl/CommandTimeseries.java   | 217 +
 .../src/main/java/accord/impl/CommandsForKey.java  | 180 +
 .../java/accord/impl/InMemoryCommandStore.java |  38 ++--
 .../main/java/accord/impl/SafeCommandsForKey.java  |   3 +-
 .../test/java/accord/messages/PreAcceptTest.java   |   4 +-
 6 files changed, 245 insertions(+), 202 deletions(-)

diff --git 
a/accord-core/src/main/java/accord/impl/AbstractSafeCommandStore.java 
b/accord-core/src/main/java/accord/impl/AbstractSafeCommandStore.java
index cc7de494..d3717ce7 100644
--- a/accord-core/src/main/java/accord/impl/AbstractSafeCommandStore.java
+++ b/accord-core/src/main/java/accord/impl/AbstractSafeCommandStore.java
@@ -22,11 +22,12 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import accord.api.VisibleForImplementation;
+import accord.impl.CommandTimeseries.CommandLoader;
+
 import java.util.function.Consumer;
 import java.util.function.Function;
 
-import accord.api.VisibleForImplementation;
-import accord.impl.CommandsForKey.CommandLoader;
 import accord.local.Command;
 import accord.local.CommonAttributes;
 import accord.local.PreLoadContext;
diff --git a/accord-core/src/main/java/accord/impl/CommandTimeseries.java 
b/accord-core/src/main/java/accord/impl/CommandTimeseries.java
new file mode 100644
index ..f2bd8be3
--- /dev/null
+++ b/accord-core/src/main/java/accord/impl/CommandTimeseries.java
@@ -0,0 +1,217 @@
+/*
+ * 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 accord.impl;
+
+import java.util.List;
+import java.util.NavigableMap;
+import java.util.Objects;
+import java.util.TreeMap;
+import java.util.function.Predicate;
+import java.util.stream.Stream;
+import javax.annotation.Nullable;
+
+import com.google.common.collect.ImmutableSortedMap;
+
+import accord.api.Key;
+import accord.local.Command;
+import accord.local.SafeCommandStore;
+import accord.local.SaveStatus;
+import accord.local.Status;
+import accord.primitives.Seekable;
+import accord.primitives.Timestamp;
+import accord.primitives.TxnId;
+
+import static accord.local.SafeCommandStore.TestDep.ANY_DEPS;
+import static accord.local.SafeCommandStore.TestDep.WITH;
+import static accord.utils.Utils.ensureSortedImmutable;
+import static accord.utils.Utils.ensureSortedMutable;
+
+public class CommandTimeseries
+{
+public enum TestTimestamp
+{BEFORE, AFTER}
+
+private final Seekable keyOrRange;
+protected final CommandLoader loader;
+public final ImmutableSortedMap commands;
+
+public CommandTimeseries(Update builder)
+{
+this.keyOrRange = builder.keyOrRange;
+this.loader = builder.loader;
+this.commands = ensureSortedImmutable(builder.commands);
+}
+
+CommandTimeseries(Seekable keyOrRange, CommandLoader loader, 
ImmutableSortedMap commands)
+{
+this.keyOrRange = keyOrRange;
+this.loader = loader;
+this.commands = commands;
+}
+
+public CommandTimeseries(Key keyOrRange, CommandLoader loader)
+{
+this(keyOrRange, loader, ImmutableSortedMap.of());
+}
+
+@Override
+public boolean equals(Object o)
+{
+if (this == o) return true;
+if (o == null || getClass() != o.getClass()) return false;
+CommandTimeseries that = (CommandTimeseries) o;
+return keyOrRange.equals(that.keyOrRange) && 
loader.equals(that.loader) && commands.equals(that.commands);
+}
+
+@Override
+public int hashCode()
+{
+int hash = 1;
+hash = 31 * hash + Objects.hashCode(keyOrRange);
+hash = 31 * hash + Objects.hashCode(loader);
+   

[cassandra-accord] 04/15: created new forCallback to help bridge the gap between AsyncChain and Observable

2023-05-16 Thread dcapwell
This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-18519
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit bed28e17072555b11ecd0b781115e5a24ad20137
Author: David Capwell 
AuthorDate: Thu May 11 09:48:43 2023 -0700

created new forCallback to help bridge the gap between AsyncChain and 
Observable
---
 .../main/java/accord/utils/async/Observable.java   | 73 +++---
 1 file changed, 49 insertions(+), 24 deletions(-)

diff --git a/accord-core/src/main/java/accord/utils/async/Observable.java 
b/accord-core/src/main/java/accord/utils/async/Observable.java
index 3f4f5cfb..bcf9695a 100644
--- a/accord-core/src/main/java/accord/utils/async/Observable.java
+++ b/accord-core/src/main/java/accord/utils/async/Observable.java
@@ -18,6 +18,9 @@
 
 package accord.utils.async;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.BiConsumer;
 import java.util.function.Function;
 
 /**
@@ -32,36 +35,58 @@ public interface Observable
 
 default  Observable map(Function mapper)
 {
-return new Map<>(this, mapper);
+Observable self = this;
+// since this project still targets jdk8, can't create private 
classes, so to avoid adding types to the public api,
+// use ananomus classes.
+return new Observable()
+{
+@Override
+public void onNext(R value)
+{
+self.onNext(mapper.apply(value));
+}
+
+@Override
+public void onError(Throwable t)
+{
+self.onError(t);
+}
+
+@Override
+public void onCompleted()
+{
+self.onCompleted();
+}
+};
 }
 
-class Map implements Observable
+static  Observable forCallback(BiConsumer, 
Throwable> callback)
 {
-private final Observable next;
-private final Function mapper;
-
-public Map(Observable next, Function mapper)
+return new Observable()
 {
-this.next = next;
-this.mapper = mapper;
-}
+private List elements = new ArrayList<>();
 
-@Override
-public void onNext(A value)
-{
-next.onNext(mapper.apply(value));
-}
+@Override
+public void onNext(T value)
+{
+elements.add(value);
+}
 
-@Override
-public void onError(Throwable t)
-{
-next.onError(t);
-}
+@Override
+public void onError(Throwable t)
+{
+this.elements.clear();
+this.elements = null;
+callback.accept(null, t);
+}
 
-@Override
-public void onCompleted()
-{
-next.onCompleted();
-}
+@Override
+public void onCompleted()
+{
+List elements = this.elements;
+this.elements = null;
+callback.accept(elements, null);
+}
+};
 }
 }


-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



  1   2   3   4   5   >