You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by be...@apache.org on 2024/10/10 10:55:04 UTC

(cassandra-accord) branch trunk updated (8bce46be -> bfc71420)

This is an automated email from the ASF dual-hosted git repository.

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


 discard 8bce46be PersistentField must setSuccess on Promise
 discard 11b102ec Avoid calculating rejectsFastPath in more cases; delay retry of fetchMajorityDeps
 discard c319df65 Fix reportSlow race, and CoordinateShardDurable NPE
     new 65c96dde Fix reportSlow race, and CoordinateShardDurable NPE
     new ffbc3ccd Avoid calculating rejectsFastPath in more cases; delay retry of fetchMajorityDeps
     new bfc71420 PersistentField must setSuccess on Promise

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (8bce46be)
            \
             N -- N -- N   refs/heads/trunk (bfc71420)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

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:
 accord-core/src/main/java/accord/messages/ReadData.java | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)


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


(cassandra-accord) 01/03: Fix reportSlow race, and CoordinateShardDurable NPE

Posted by be...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 65c96dde52545097d9ad853d5812601b55d7192c
Author: Benedict Elliott Smith <be...@apache.org>
AuthorDate: Wed Oct 9 19:39:06 2024 +0100

    Fix reportSlow race, and CoordinateShardDurable NPE
---
 .../src/main/java/accord/coordinate/CoordinateShardDurable.java    | 5 +++++
 accord-core/src/main/java/accord/impl/RequestCallbacks.java        | 5 ++++-
 accord-core/src/main/java/accord/messages/ReadData.java            | 7 ++++---
 3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/accord-core/src/main/java/accord/coordinate/CoordinateShardDurable.java b/accord-core/src/main/java/accord/coordinate/CoordinateShardDurable.java
index f5193a56..63a0c3eb 100644
--- a/accord-core/src/main/java/accord/coordinate/CoordinateShardDurable.java
+++ b/accord-core/src/main/java/accord/coordinate/CoordinateShardDurable.java
@@ -56,6 +56,11 @@ public class CoordinateShardDurable extends ExecuteExclusiveSyncPoint implements
     protected void start()
     {
         SortedArrayList<Node.Id> contact = tracker.filterAndRecordFaulty();
+        if (contact == null)
+        {
+            tryFailure(new Exhausted(syncPoint.syncId, syncPoint.route.homeKey(), null));
+            return;
+        }
         SortedArrayList<Node.Id> allStaleNodes = tracker.topologies().staleNodes();
         SortedArrayList<Node.Id> allCurrentNodes = tracker.topologies().current().nodes();
         SortedArrayList<Node.Id> staleNodes = contact.without(id -> !allStaleNodes.contains(id))
diff --git a/accord-core/src/main/java/accord/impl/RequestCallbacks.java b/accord-core/src/main/java/accord/impl/RequestCallbacks.java
index f3644061..fa44ab96 100644
--- a/accord-core/src/main/java/accord/impl/RequestCallbacks.java
+++ b/accord-core/src/main/java/accord/impl/RequestCallbacks.java
@@ -53,6 +53,7 @@ public class RequestCallbacks extends AbstractRequestTimeouts<RequestCallbacks.C
             final long registeredAt;
             final long reportSlowAt;
             final long reportFailAt;
+            boolean cancelInFlight;
 
             public RegisteredCallback(AgentExecutor executor, long callbackId, Callback<T> callback, Node.Id to, long registeredAt, long reportSlowAt, long reportFailAt)
             {
@@ -75,6 +76,7 @@ public class RequestCallbacks extends AbstractRequestTimeouts<RequestCallbacks.C
             {
                 if (isInHeap())
                     timeouts.remove(this);
+                cancelInFlight = true;
             }
 
             @Override
@@ -122,7 +124,8 @@ public class RequestCallbacks extends AbstractRequestTimeouts<RequestCallbacks.C
 
             private void unsafeOnSlow(Object ignore)
             {
-                callback.onSlowResponse(to);
+                if (!cancelInFlight)
+                    callback.onSlowResponse(to);
             }
 
             <P> void safeInvoke(BiConsumer<RegisteredCallback<T>, P> invoker, P param)
diff --git a/accord-core/src/main/java/accord/messages/ReadData.java b/accord-core/src/main/java/accord/messages/ReadData.java
index d403f48e..0d4423de 100644
--- a/accord-core/src/main/java/accord/messages/ReadData.java
+++ b/accord-core/src/main/java/accord/messages/ReadData.java
@@ -325,7 +325,7 @@ public abstract class ReadData extends AbstractEpochRequest<ReadData.CommitOrRea
         Runnable clear;
         synchronized(this)
         {
-            if (state == State.OBSOLETE)
+            if (state != State.PENDING)
                 return;
 
             logger.trace("{}: read completed on {}", txnId, commandStore);
@@ -401,8 +401,8 @@ public abstract class ReadData extends AbstractEpochRequest<ReadData.CommitOrRea
             if (state != State.PENDING)
                 return false;
 
-            clear = clearUnsafe();
             state = State.OBSOLETE;
+            clear = clearUnsafe();
         }
         cleanup(clear);
         return true;
@@ -426,6 +426,7 @@ public abstract class ReadData extends AbstractEpochRequest<ReadData.CommitOrRea
 
     @Nullable Runnable clearUnsafe()
     {
+        Invariants.checkState(state != State.PENDING);
         RegisteredTimeout cancelTimeout = timeout;
         Int2ObjectHashMap<LocalListeners.Registered> cancelRegistrations = registrations;
         timeout = null;
@@ -449,7 +450,7 @@ public abstract class ReadData extends AbstractEpochRequest<ReadData.CommitOrRea
     public void timeout()
     {
         timeout = null;
-        cleanup();
+        cancel();
     }
 
     public int stripe()


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


(cassandra-accord) 02/03: Avoid calculating rejectsFastPath in more cases; delay retry of fetchMajorityDeps

Posted by be...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ffbc3ccd8ea1934e78895bb6c53bfcca0efcb217
Author: Benedict Elliott Smith <be...@apache.org>
AuthorDate: Thu Oct 10 10:00:48 2024 +0100

    Avoid calculating rejectsFastPath in more cases; delay retry of fetchMajorityDeps
---
 accord-core/src/main/java/accord/local/CommandStore.java     | 5 ++++-
 accord-core/src/main/java/accord/messages/BeginRecovery.java | 4 ++--
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/accord-core/src/main/java/accord/local/CommandStore.java b/accord-core/src/main/java/accord/local/CommandStore.java
index 5a4d17f9..6b4a0aea 100644
--- a/accord-core/src/main/java/accord/local/CommandStore.java
+++ b/accord-core/src/main/java/accord/local/CommandStore.java
@@ -43,6 +43,7 @@ import java.util.NavigableMap;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.concurrent.Callable;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Consumer;
 import java.util.function.Function;
@@ -476,6 +477,7 @@ public abstract class CommandStore implements AgentExecutor
         };
     }
 
+    // TODO (required): replace with a simple wait on suitable exclusive sync point(s)
     private void fetchMajorityDeps(AsyncResults.SettableResult<Void> coordination, Node node, long epoch, Ranges ranges)
     {
         TxnId id = TxnId.fromValues(epoch - 1, 0, node.id());
@@ -485,7 +487,8 @@ public abstract class CommandStore implements AgentExecutor
         CollectCalculatedDeps.withCalculatedDeps(node, id, route, route, before, (deps, fail) -> {
             if (fail != null)
             {
-                fetchMajorityDeps(coordination, node, epoch, ranges);
+                node.agent().onUncaughtException(fail);
+                node.scheduler().once(() -> fetchMajorityDeps(coordination, node, epoch, ranges), 1L, TimeUnit.MINUTES);
             }
             else
             {
diff --git a/accord-core/src/main/java/accord/messages/BeginRecovery.java b/accord-core/src/main/java/accord/messages/BeginRecovery.java
index ad8bb5a0..b434a183 100644
--- a/accord-core/src/main/java/accord/messages/BeginRecovery.java
+++ b/accord-core/src/main/java/accord/messages/BeginRecovery.java
@@ -47,9 +47,9 @@ import static accord.local.SafeCommandStore.TestStatus.IS_STABLE;
 import static accord.local.SafeCommandStore.TestStatus.IS_PROPOSED;
 import static accord.local.SafeCommandStore.TestStartedAt.STARTED_AFTER;
 import static accord.local.SafeCommandStore.TestStartedAt.STARTED_BEFORE;
+import static accord.primitives.Status.Accepted;
 import static accord.primitives.Status.Phase;
 import static accord.primitives.Status.PreAccepted;
-import static accord.primitives.Status.PreCommitted;
 import static accord.messages.PreAccept.calculateDeps;
 import static accord.primitives.EpochSupplier.constant;
 import static accord.utils.Invariants.illegalState;
@@ -130,7 +130,7 @@ public class BeginRecovery extends TxnRequest.WithUnsynced<BeginRecovery.Recover
         boolean rejectsFastPath;
         Deps earlierCommittedWitness, earlierAcceptedNoWitness;
 
-        if (command.hasBeen(PreCommitted))
+        if (command.hasBeen(Accepted))
         {
             rejectsFastPath = false;
             earlierCommittedWitness = earlierAcceptedNoWitness = Deps.NONE;


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


(cassandra-accord) 03/03: PersistentField must setSuccess on Promise

Posted by be...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit bfc71420c9f887288f74ab888056096f4da417ed
Author: Benedict Elliott Smith <be...@apache.org>
AuthorDate: Thu Oct 10 10:57:51 2024 +0100

    PersistentField must setSuccess on Promise
---
 accord-core/src/main/java/accord/utils/PersistentField.java | 1 +
 1 file changed, 1 insertion(+)

diff --git a/accord-core/src/main/java/accord/utils/PersistentField.java b/accord-core/src/main/java/accord/utils/PersistentField.java
index da66ffdc..a219ce2b 100644
--- a/accord-core/src/main/java/accord/utils/PersistentField.java
+++ b/accord-core/src/main/java/accord/utils/PersistentField.java
@@ -118,6 +118,7 @@ public class PersistentField<Input, Saved>
                     upd = true;
                 }
                 if (upd) set.accept(latest);
+                result.setSuccess(null);
             }
         });
 


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