(cassandra) branch cep-15-accord updated: IndexOutOfBoundsException while serializing CommandsForKey
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)
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
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)
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)
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)
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
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
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
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
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)
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
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
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
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
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
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
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
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
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
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
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)
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
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
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)
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
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
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)
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)
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)
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)
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)
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
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
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)
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
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
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
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
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
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
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
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)
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
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
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
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
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)
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
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)
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
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
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)
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
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)
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)
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
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)
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)
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
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
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)
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
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
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)
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
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)
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
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)
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)
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)
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)
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)
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)
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)
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
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
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)
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*
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*
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
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
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
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)
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)
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)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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