This is an automated email from the ASF dual-hosted git repository.
belliottsmith 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 a081e19e Result natively supports persistable/non-persistable
distinction
a081e19e is described below
commit a081e19e33ddeb91040f2ff8f0bef119f57d11fb
Author: Benedict Elliott Smith <[email protected]>
AuthorDate: Fri May 15 13:42:25 2026 +0100
Result natively supports persistable/non-persistable distinction
patch by Benedict; reviewed by Alex Petrov and Ariel Weisberg for
CASSANDRA-21375
---
accord-core/src/main/java/accord/api/Result.java | 11 +++++++
.../accord/coordinate/AbstractCoordination.java | 1 -
.../accord/coordinate/CoordinateSyncPoint.java | 4 +--
.../accord/coordinate/CoordinationAdapter.java | 4 +--
.../java/accord/coordinate/ExecuteSyncPoint.java | 4 +--
.../src/main/java/accord/coordinate/Persist.java | 8 ++---
.../java/accord/coordinate/PersistSyncPoint.java | 4 +--
.../main/java/accord/coordinate/PersistTxn.java | 4 +--
.../src/main/java/accord/impl/CommandChange.java | 7 +++--
.../src/main/java/accord/impl/LocalDelivery.java | 1 -
.../src/main/java/accord/local/Command.java | 35 +++++++++++-----------
.../src/main/java/accord/local/CommandBuilder.java | 8 ++---
.../src/main/java/accord/local/Commands.java | 31 ++++++++++++-------
.../src/main/java/accord/local/SafeCommand.java | 10 +++----
.../src/main/java/accord/messages/Apply.java | 21 ++++++-------
.../accord/messages/ApplyThenWaitUntilApplied.java | 13 ++++----
.../src/main/java/accord/messages/CheckStatus.java | 10 +++----
.../src/main/java/accord/messages/Propagate.java | 6 ++--
.../java/accord/impl/basic/InMemoryJournal.java | 4 +--
.../src/test/java/accord/impl/list/ListResult.java | 4 +--
.../src/test/java/accord/impl/mock/MockStore.java | 4 +--
.../test/java/accord/local/CheckedCommands.java | 6 ++--
.../java/accord/local/cfk/CommandsForKeyTest.java | 3 +-
.../test/java/accord/messages/ReadDataTest.java | 4 +--
.../java/accord/maelstrom/MaelstromResult.java | 3 +-
25 files changed, 117 insertions(+), 93 deletions(-)
diff --git a/accord-core/src/main/java/accord/api/Result.java
b/accord-core/src/main/java/accord/api/Result.java
index 15fbe217..783bef6c 100644
--- a/accord-core/src/main/java/accord/api/Result.java
+++ b/accord-core/src/main/java/accord/api/Result.java
@@ -28,4 +28,15 @@ public interface Result extends Outcome
{
@Override
default ProgressToken asProgressToken() { return ProgressToken.APPLIED; }
+
+ PersistableResult toPersistable();
+
+ interface PersistableResult extends Result
+ {
+ @Override
+ default PersistableResult toPersistable()
+ {
+ return this;
+ }
+ }
}
diff --git
a/accord-core/src/main/java/accord/coordinate/AbstractCoordination.java
b/accord-core/src/main/java/accord/coordinate/AbstractCoordination.java
index 55f327bb..59cbf720 100644
--- a/accord-core/src/main/java/accord/coordinate/AbstractCoordination.java
+++ b/accord-core/src/main/java/accord/coordinate/AbstractCoordination.java
@@ -30,7 +30,6 @@ import javax.annotation.Nullable;
import accord.api.Timeouts;
import accord.coordinate.tracking.AbstractTracker;
import accord.coordinate.tracking.RequestStatus;
-import accord.impl.LocalDelivery;
import accord.local.MapReduceConsumeCommandStores;
import accord.local.Node;
import accord.local.SequentialAsyncExecutor;
diff --git
a/accord-core/src/main/java/accord/coordinate/CoordinateSyncPoint.java
b/accord-core/src/main/java/accord/coordinate/CoordinateSyncPoint.java
index 74a0fc02..fb6eec6a 100644
--- a/accord-core/src/main/java/accord/coordinate/CoordinateSyncPoint.java
+++ b/accord-core/src/main/java/accord/coordinate/CoordinateSyncPoint.java
@@ -26,7 +26,7 @@ import javax.annotation.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.api.Tracing;
import accord.coordinate.CoordinationAdapter.Adapters;
import accord.coordinate.CoordinationAdapter.Adapters.SyncPointAdapter;
@@ -214,7 +214,7 @@ public class CoordinateSyncPoint<R> extends
CoordinatePreAccept<R>
Txn txn = node.agent().emptySystemTxn(txnId.kind(), txnId.domain());
Deps deps = syncPoint.waitFor;
Route<?> route = syncPoint.route;
- Result result = txn.result(txnId, executeAt, null);
+ PersistableResult result = txn.result(txnId, executeAt,
null).toPersistable();
Apply apply = Apply.FACTORY.create(Maximal, to, participates, txnId,
ballot, route, txn, executeAt, deps, null, result, syncPoint.fullRoute,
ExecuteFlags.none());
node.send(to, apply, tracing);
}
diff --git
a/accord-core/src/main/java/accord/coordinate/CoordinationAdapter.java
b/accord-core/src/main/java/accord/coordinate/CoordinationAdapter.java
index 0db36879..5244a7c4 100644
--- a/accord-core/src/main/java/accord/coordinate/CoordinationAdapter.java
+++ b/accord-core/src/main/java/accord/coordinate/CoordinationAdapter.java
@@ -293,7 +293,7 @@ public interface CoordinationAdapter<R>
try
{
Topologies all = execution(node, any, sendTo, route,
txnId, executeAt);
- new PersistTxn(node, executor, all, txnId, ballot,
require, txn, executeAt, deps, writes, result, route, flags,
informDurableOnDone, Apply.FACTORY, applyKind)
+ new PersistTxn(node, executor, all, txnId, ballot,
require, txn, executeAt, deps, writes, result.toPersistable(), route, flags,
informDurableOnDone, Apply.FACTORY, applyKind)
.start();
}
catch (TopologyException e)
@@ -408,7 +408,7 @@ public interface CoordinationAdapter<R>
try
{
Topologies all = forExecution(node, sendTo, txnId,
executeAt, deps);
- new PersistSyncPoint(node, executor, all, txnId, ballot,
sendTo, txn, executeAt, deps, writes, result, informDurableOnDone, route,
Maximal)
+ new PersistSyncPoint(node, executor, all, txnId, ballot,
sendTo, txn, executeAt, deps, writes, result.toPersistable(),
informDurableOnDone, route, Maximal)
.start();
}
catch (Throwable t)
diff --git a/accord-core/src/main/java/accord/coordinate/ExecuteSyncPoint.java
b/accord-core/src/main/java/accord/coordinate/ExecuteSyncPoint.java
index 50095783..1db7c7df 100644
--- a/accord-core/src/main/java/accord/coordinate/ExecuteSyncPoint.java
+++ b/accord-core/src/main/java/accord/coordinate/ExecuteSyncPoint.java
@@ -23,7 +23,7 @@ import java.util.function.BiConsumer;
import javax.annotation.Nonnull;
-import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.coordinate.tracking.AbstractTracker;
import accord.coordinate.tracking.DurabilityTracker;
import accord.coordinate.tracking.RequestStatus;
@@ -123,7 +123,7 @@ public class ExecuteSyncPoint extends
AbstractCoordination<Route<Range>, Durabil
node.agent().coordinatorEvents().onExecuting(syncPoint.syncId, null,
syncPoint.waitFor, null);
// TODO (desired): special Apply message that doesn't resend deps if
path=MEDIUM
Txn txn = node.agent().emptySystemTxn(syncPoint.syncId.kind(),
syncPoint.syncId.domain());
- Result result = txn.result(syncPoint.syncId, syncPoint.executeAt,
null);
+ PersistableResult result = txn.result(syncPoint.syncId,
syncPoint.executeAt, null).toPersistable();
super.start();
contact(to -> new ApplyThenWaitUntilApplied(to, tracker.topologies(),
syncPoint.executeAt, tracker.topologies().currentEpoch(), syncPoint.fullRoute,
syncPoint.syncId, txn, syncPoint.waitFor, scope, null, result));
}
diff --git a/accord-core/src/main/java/accord/coordinate/Persist.java
b/accord-core/src/main/java/accord/coordinate/Persist.java
index 21f72020..304b6af3 100644
--- a/accord-core/src/main/java/accord/coordinate/Persist.java
+++ b/accord-core/src/main/java/accord/coordinate/Persist.java
@@ -24,7 +24,7 @@ import java.util.function.Predicate;
import javax.annotation.Nullable;
-import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.coordinate.ExecuteFlag.CoordinationFlags;
import accord.coordinate.tracking.AbstractTracker;
import accord.coordinate.tracking.QuorumTracker;
@@ -61,7 +61,7 @@ public abstract class Persist extends
AbstractCoordination<FullRoute<?>, Void, A
protected final Timestamp executeAt;
protected final Deps stableDeps;
protected final Writes writes;
- protected final Result result;
+ protected final PersistableResult result;
protected final CoordinationFlags flags;
// TODO (expected): track separate ALL and Quorum, so we can report
Universal durability to permit faster GC
protected final SimpleTracker<?> tracker;
@@ -69,12 +69,12 @@ public abstract class Persist extends
AbstractCoordination<FullRoute<?>, Void, A
protected final Apply.Kind applyKind;
protected final boolean informDurableOnDone;
- protected Persist(Node node, SequentialAsyncExecutor executor, Topologies
all, TxnId txnId, Ballot ballot, Route<?> sendTo, Txn txn, Timestamp executeAt,
Deps stableDeps, Writes writes, Result result, FullRoute<?> route,
CoordinationFlags flags, boolean informDurableOnDone, Apply.Factory factory,
Apply.Kind applyKind)
+ protected Persist(Node node, SequentialAsyncExecutor executor, Topologies
all, TxnId txnId, Ballot ballot, Route<?> sendTo, Txn txn, Timestamp executeAt,
Deps stableDeps, Writes writes, PersistableResult result, FullRoute<?> route,
CoordinationFlags flags, boolean informDurableOnDone, Apply.Factory factory,
Apply.Kind applyKind)
{
this(node, executor, all, txnId, ballot, sendTo, txn, executeAt,
stableDeps, writes, result, route, flags, informDurableOnDone, factory,
applyKind, QuorumTracker::new, node.agent());
}
- protected Persist(Node node, SequentialAsyncExecutor executor, Topologies
all, TxnId txnId, Ballot ballot, Route<?> sendTo, Txn txn, Timestamp executeAt,
Deps stableDeps, Writes writes, Result result, FullRoute<?> route,
CoordinationFlags flags, boolean informDurableOnDone, Apply.Factory factory,
Apply.Kind applyKind, Function<Topologies, SimpleTracker<?>> trackerFactory,
BiConsumer<? super Void, Throwable> callback)
+ protected Persist(Node node, SequentialAsyncExecutor executor, Topologies
all, TxnId txnId, Ballot ballot, Route<?> sendTo, Txn txn, Timestamp executeAt,
Deps stableDeps, Writes writes, PersistableResult result, FullRoute<?> route,
CoordinationFlags flags, boolean informDurableOnDone, Apply.Factory factory,
Apply.Kind applyKind, Function<Topologies, SimpleTracker<?>> trackerFactory,
BiConsumer<? super Void, Throwable> callback)
{
super(node, executor, txnId, route, all.nodes(), callback);
this.ballot = ballot;
diff --git a/accord-core/src/main/java/accord/coordinate/PersistSyncPoint.java
b/accord-core/src/main/java/accord/coordinate/PersistSyncPoint.java
index 68c84a0d..4d786b8f 100644
--- a/accord-core/src/main/java/accord/coordinate/PersistSyncPoint.java
+++ b/accord-core/src/main/java/accord/coordinate/PersistSyncPoint.java
@@ -18,7 +18,7 @@
package accord.coordinate;
-import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.coordinate.ExecuteFlag.CoordinationFlags;
import accord.local.Node;
import accord.local.SequentialAsyncExecutor;
@@ -35,7 +35,7 @@ import accord.topology.Topologies;
public class PersistSyncPoint extends Persist
{
- public PersistSyncPoint(Node node, SequentialAsyncExecutor executor,
Topologies topologies, TxnId txnId, Ballot ballot, Route<?> sendTo, Txn txn,
Timestamp executeAt, Deps deps, Writes writes, Result result, boolean
informDurableOnDone, FullRoute<?> route, Apply.Kind applyKind)
+ public PersistSyncPoint(Node node, SequentialAsyncExecutor executor,
Topologies topologies, TxnId txnId, Ballot ballot, Route<?> sendTo, Txn txn,
Timestamp executeAt, Deps deps, Writes writes, PersistableResult result,
boolean informDurableOnDone, FullRoute<?> route, Apply.Kind applyKind)
{
super(node, executor, topologies, txnId, ballot, sendTo, txn,
executeAt, deps, writes, result, route, CoordinationFlags.none(),
informDurableOnDone, Apply.FACTORY, applyKind);
}
diff --git a/accord-core/src/main/java/accord/coordinate/PersistTxn.java
b/accord-core/src/main/java/accord/coordinate/PersistTxn.java
index db510668..dd765ba7 100644
--- a/accord-core/src/main/java/accord/coordinate/PersistTxn.java
+++ b/accord-core/src/main/java/accord/coordinate/PersistTxn.java
@@ -18,7 +18,7 @@
package accord.coordinate;
-import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.coordinate.ExecuteFlag.CoordinationFlags;
import accord.local.Node;
import accord.local.SequentialAsyncExecutor;
@@ -36,7 +36,7 @@ import accord.topology.Topologies;
public class PersistTxn extends Persist
{
// TODO (desired): standardise parameter order with CoordinationAdapter
(and others)
- public PersistTxn(Node node, SequentialAsyncExecutor executor, Topologies
topologies, TxnId txnId, Ballot ballot, Route<?> sendTo, Txn txn, Timestamp
executeAt, Deps deps, Writes writes, Result result, FullRoute<?> route,
CoordinationFlags flags, boolean informDurableOnDone, Apply.Factory factory,
Apply.Kind applyKind)
+ public PersistTxn(Node node, SequentialAsyncExecutor executor, Topologies
topologies, TxnId txnId, Ballot ballot, Route<?> sendTo, Txn txn, Timestamp
executeAt, Deps deps, Writes writes, PersistableResult result, FullRoute<?>
route, CoordinationFlags flags, boolean informDurableOnDone, Apply.Factory
factory, Apply.Kind applyKind)
{
super(node, executor, topologies, txnId, ballot, sendTo, txn,
executeAt, deps, writes, result, route, flags, informDurableOnDone, factory,
applyKind);
}
diff --git a/accord-core/src/main/java/accord/impl/CommandChange.java
b/accord-core/src/main/java/accord/impl/CommandChange.java
index 3cd32797..a3a05960 100644
--- a/accord-core/src/main/java/accord/impl/CommandChange.java
+++ b/accord-core/src/main/java/accord/impl/CommandChange.java
@@ -28,6 +28,7 @@ import javax.annotation.Nullable;
import com.google.common.annotations.VisibleForTesting;
import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.local.Cleanup;
import accord.local.Cleanup.Input;
import accord.local.Command;
@@ -203,7 +204,7 @@ public class CommandChange
protected Timestamp executesAtLeast;
protected Writes writes;
- protected Result result;
+ protected PersistableResult result;
protected Cleanup cleanup;
@@ -588,7 +589,7 @@ public class CommandChange
return new MinimalCommand.MinimalWithConcreteDeps(txnId,
saveStatus, durability, participants, executeAt, partialDeps());
}
- public void forceResult(Result newValue)
+ public void forceResult(PersistableResult newValue)
{
this.result = newValue;
}
@@ -667,7 +668,7 @@ public class CommandChange
}
}
- private static Command.Truncated truncated(TxnId txnId, SaveStatus
status, Durability durability, StoreParticipants participants, Timestamp
executeAt, PartialDeps partialDeps, Timestamp executesAtLeast, Writes writes,
Result result)
+ private static Command.Truncated truncated(TxnId txnId, SaveStatus
status, Durability durability, StoreParticipants participants, Timestamp
executeAt, PartialDeps partialDeps, Timestamp executesAtLeast, Writes writes,
PersistableResult result)
{
switch (status)
{
diff --git a/accord-core/src/main/java/accord/impl/LocalDelivery.java
b/accord-core/src/main/java/accord/impl/LocalDelivery.java
index 4369529c..61b51fd9 100644
--- a/accord-core/src/main/java/accord/impl/LocalDelivery.java
+++ b/accord-core/src/main/java/accord/impl/LocalDelivery.java
@@ -21,7 +21,6 @@ package accord.impl;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
-import accord.api.AsyncExecutor;
import accord.api.MessageSink;
import accord.api.Timeouts;
import accord.api.Timeouts.RegisteredTimeout;
diff --git a/accord-core/src/main/java/accord/local/Command.java
b/accord-core/src/main/java/accord/local/Command.java
index b9afe19e..e8d22a2c 100644
--- a/accord-core/src/main/java/accord/local/Command.java
+++ b/accord-core/src/main/java/accord/local/Command.java
@@ -26,6 +26,7 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.api.RoutingKey;
import accord.local.MinimalCommand.MinimalWithConcreteDeps;
import accord.primitives.AbstractRanges;
@@ -151,7 +152,7 @@ public abstract class Command extends
MinimalWithConcreteDeps
public final @Nullable PartialTxn partialTxn() { return partialTxn; }
public @Nullable Writes writes() { return null; }
- public @Nullable Result result() { return null; }
+ public @Nullable PersistableResult result() { return null; }
public @Nullable WaitingOn waitingOn() { return null; }
/**
@@ -317,7 +318,7 @@ public abstract class Command extends
MinimalWithConcreteDeps
return truncated(command, participants, newSaveStatus);
}
- public static Truncated truncated(TxnId txnId, SaveStatus saveStatus,
Durability durability, StoreParticipants participants, @Nullable Timestamp
executeAt, @Nullable PartialDeps partialDeps, @Nullable Writes writes, Result
result)
+ public static Truncated truncated(TxnId txnId, SaveStatus saveStatus,
Durability durability, StoreParticipants participants, @Nullable Timestamp
executeAt, @Nullable PartialDeps partialDeps, @Nullable Writes writes,
PersistableResult result)
{
Invariants.requireArgument(!txnId.awaitsOnlyDeps());
return validate(new Truncated(txnId, saveStatus, durability,
participants, executeAt, partialDeps, writes, result));
@@ -328,7 +329,7 @@ public abstract class Command extends
MinimalWithConcreteDeps
Timestamp executesAtLeast = command.executesAtLeast();
PartialDeps partialDeps = newSaveStatus.known.is(DepsKnown) ?
command.partialDeps : null;
Writes writes = null;
- Result result = null;
+ PersistableResult result = null;
if (newSaveStatus.known.is(Outcome.Apply))
{
writes = command.writes();
@@ -337,12 +338,12 @@ public abstract class Command extends
MinimalWithConcreteDeps
return truncated(command.txnId(), newSaveStatus,
command.durability(), participants, command.executeAt, partialDeps, writes,
result, executesAtLeast);
}
- public static Truncated truncated(Command common, SaveStatus
saveStatus, @Nullable Timestamp executeAt, @Nullable PartialDeps partialDeps,
@Nullable Writes writes, @Nullable Result result, @Nullable Timestamp
executesAtLeast)
+ public static Truncated truncated(Command common, SaveStatus
saveStatus, @Nullable Timestamp executeAt, @Nullable PartialDeps partialDeps,
@Nullable Writes writes, @Nullable PersistableResult result, @Nullable
Timestamp executesAtLeast)
{
return truncated(common.txnId(), saveStatus, common.durability(),
common.participants(), executeAt, partialDeps, writes, result, executesAtLeast);
}
- public static Truncated truncated(TxnId txnId, SaveStatus saveStatus,
Durability durability, StoreParticipants participants, Timestamp executeAt,
PartialDeps partialDeps, Writes writes, Result result, @Nullable Timestamp
executesAtLeast)
+ public static Truncated truncated(TxnId txnId, SaveStatus saveStatus,
Durability durability, StoreParticipants participants, Timestamp executeAt,
PartialDeps partialDeps, Writes writes, PersistableResult result, @Nullable
Timestamp executesAtLeast)
{
if (!txnId.awaitsOnlyDeps())
{
@@ -371,7 +372,7 @@ public abstract class Command extends
MinimalWithConcreteDeps
}
@Nullable final Writes writes;
- @Nullable final Result result;
+ @Nullable final PersistableResult result;
public Truncated(Command copy, SaveStatus saveStatus)
{
@@ -380,7 +381,7 @@ public abstract class Command extends
MinimalWithConcreteDeps
this.result = copy.result();
}
- public Truncated(TxnId txnId, SaveStatus saveStatus, Durability
durability, @Nonnull StoreParticipants participants, @Nullable Timestamp
executeAt, @Nullable PartialDeps partialDeps, @Nullable Writes writes,
@Nullable Result result)
+ public Truncated(TxnId txnId, SaveStatus saveStatus, Durability
durability, @Nonnull StoreParticipants participants, @Nullable Timestamp
executeAt, @Nullable PartialDeps partialDeps, @Nullable Writes writes,
@Nullable PersistableResult result)
{
super(txnId, saveStatus, durability, participants, Ballot.MAX,
executeAt, null, partialDeps, Ballot.MAX);
this.writes = writes;
@@ -405,7 +406,7 @@ public abstract class Command extends
MinimalWithConcreteDeps
}
@Override
- public @Nullable Result result()
+ public @Nullable PersistableResult result()
{
return result;
}
@@ -431,7 +432,7 @@ public abstract class Command extends
MinimalWithConcreteDeps
this.executesAtLeast = executesAtLeast;
}
- public TruncatedAwaitsOnlyDeps(TxnId txnId, SaveStatus saveStatus,
Durability durability, StoreParticipants participants, @Nullable Timestamp
executeAt, @Nullable PartialDeps partialDeps, @Nullable Writes writes,
@Nullable Result result, @Nullable Timestamp executesAtLeast)
+ public TruncatedAwaitsOnlyDeps(TxnId txnId, SaveStatus saveStatus,
Durability durability, StoreParticipants participants, @Nullable Timestamp
executeAt, @Nullable PartialDeps partialDeps, @Nullable Writes writes,
@Nullable PersistableResult result, @Nullable Timestamp executesAtLeast)
{
super(txnId, saveStatus, durability, participants, executeAt,
partialDeps, writes, result);
this.executesAtLeast = executesAtLeast;
@@ -634,7 +635,7 @@ public abstract class Command extends
MinimalWithConcreteDeps
public static class Executed extends Committed
{
- public static Executed executed(TxnId txnId, SaveStatus status,
Durability durability, @Nonnull StoreParticipants participants, Ballot
promised, Timestamp executeAt, PartialTxn partialTxn, PartialDeps partialDeps,
Ballot acceptedOrCommitted, WaitingOn waitingOn, Writes writes, Result result)
+ public static Executed executed(TxnId txnId, SaveStatus status,
Durability durability, @Nonnull StoreParticipants participants, Ballot
promised, Timestamp executeAt, PartialTxn partialTxn, PartialDeps partialDeps,
Ballot acceptedOrCommitted, WaitingOn waitingOn, Writes writes,
PersistableResult result)
{
return validate(new Executed(txnId, status, durability,
participants, promised, executeAt, partialTxn, partialDeps,
acceptedOrCommitted, waitingOn, writes, result));
}
@@ -650,7 +651,7 @@ public abstract class Command extends
MinimalWithConcreteDeps
}
private final Writes writes;
- private final Result result;
+ private final PersistableResult result;
private Executed(Command copy, SaveStatus status)
{
@@ -665,7 +666,7 @@ public abstract class Command extends
MinimalWithConcreteDeps
validateWrites(txnId(), writes);
}
- private Executed(TxnId txnId, SaveStatus status, Durability
durability, @Nonnull StoreParticipants participants, Ballot promised, Timestamp
executeAt, PartialTxn partialTxn, PartialDeps partialDeps, Ballot
acceptedOrCommitted, WaitingOn waitingOn, Writes writes, Result result)
+ private Executed(TxnId txnId, SaveStatus status, Durability
durability, @Nonnull StoreParticipants participants, Ballot promised, Timestamp
executeAt, PartialTxn partialTxn, PartialDeps partialDeps, Ballot
acceptedOrCommitted, WaitingOn waitingOn, Writes writes, PersistableResult
result)
{
super(txnId, status, durability, participants, promised,
executeAt, partialTxn, partialDeps, acceptedOrCommitted, waitingOn);
validateWrites(txnId, writes);
@@ -701,7 +702,7 @@ public abstract class Command extends
MinimalWithConcreteDeps
return writes;
}
- public Result result()
+ public PersistableResult result()
{
return result;
}
@@ -1361,17 +1362,17 @@ public abstract class Command extends
MinimalWithConcreteDeps
return committed(command, SaveStatus.ReadyToExecute);
}
- static Command.Executed preapplied(Command command, Timestamp applyAt,
Writes writes, Result result)
+ static Command.Executed preapplied(Command command, Timestamp applyAt,
Writes writes, PersistableResult result)
{
return executed(command.txnId(), SaveStatus.get(Status.PreApplied,
command.known()), command.durability(), command.participants(),
command.promised(), applyAt, command.partialTxn(), command.partialDeps(),
command.acceptedOrCommitted(), command.waitingOn(), writes, result);
}
- static Command.Executed preapplied(Command command, @Nonnull
StoreParticipants participants, Ballot promised, Timestamp executeAt,
PartialTxn partialTxn, PartialDeps partialDeps, Command.WaitingOn waitingOn,
Writes writes, Result result)
+ static Command.Executed preapplied(Command command, @Nonnull
StoreParticipants participants, Ballot promised, Timestamp executeAt,
PartialTxn partialTxn, PartialDeps partialDeps, Command.WaitingOn waitingOn,
Writes writes, PersistableResult result)
{
return executed(command.txnId(), SaveStatus.get(Status.PreApplied,
command.known()), command.durability(), participants, promised, executeAt,
partialTxn, partialDeps, command.acceptedOrCommitted(), waitingOn, writes,
result);
}
- static Command.Executed applying(Command command, @Nonnull
StoreParticipants participants, Timestamp executeAt, PartialTxn partialTxn,
PartialDeps partialDeps, Command.WaitingOn waitingOn, Writes writes, Result
result)
+ static Command.Executed applying(Command command, @Nonnull
StoreParticipants participants, Timestamp executeAt, PartialTxn partialTxn,
PartialDeps partialDeps, Command.WaitingOn waitingOn, Writes writes,
PersistableResult result)
{
return executed(command.txnId(), SaveStatus.Applying,
command.durability(), participants, command.promised(), executeAt, partialTxn,
partialDeps, command.acceptedOrCommitted(), waitingOn, writes, result);
}
@@ -1381,7 +1382,7 @@ public abstract class Command extends
MinimalWithConcreteDeps
return executed(command, SaveStatus.Applying);
}
- static Command.Executed applied(Command command, @Nonnull
StoreParticipants participants, Timestamp executeAt, PartialTxn partialTxn,
PartialDeps partialDeps, Command.WaitingOn waitingOn, Writes writes, Result
result)
+ static Command.Executed applied(Command command, @Nonnull
StoreParticipants participants, Timestamp executeAt, PartialTxn partialTxn,
PartialDeps partialDeps, Command.WaitingOn waitingOn, Writes writes,
PersistableResult result)
{
return executed(command.txnId(), SaveStatus.Applied,
command.durability(), participants, command.promised(), executeAt, partialTxn,
partialDeps, command.acceptedOrCommitted(), waitingOn, writes, result);
}
diff --git a/accord-core/src/main/java/accord/local/CommandBuilder.java
b/accord-core/src/main/java/accord/local/CommandBuilder.java
index 52a64594..ecfc8cdd 100644
--- a/accord-core/src/main/java/accord/local/CommandBuilder.java
+++ b/accord-core/src/main/java/accord/local/CommandBuilder.java
@@ -18,7 +18,7 @@
package accord.local;
-import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.primitives.Ballot;
import accord.primitives.PartialDeps;
import accord.primitives.PartialTxn;
@@ -44,7 +44,7 @@ public class CommandBuilder
private Ballot acceptedOrCommitted = Ballot.ZERO;
private Command.WaitingOn waitingOn;
private Writes writes;
- private Result result;
+ private PersistableResult result;
public CommandBuilder(TxnId txnId)
{
@@ -166,12 +166,12 @@ public class CommandBuilder
return this;
}
- public Result result()
+ public PersistableResult result()
{
return result;
}
- public CommandBuilder result(Result result)
+ public CommandBuilder result(PersistableResult result)
{
this.result = result;
return this;
diff --git a/accord-core/src/main/java/accord/local/Commands.java
b/accord-core/src/main/java/accord/local/Commands.java
index 86130e81..3bfc31a9 100644
--- a/accord-core/src/main/java/accord/local/Commands.java
+++ b/accord-core/src/main/java/accord/local/Commands.java
@@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory;
import accord.api.Data;
import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.api.RoutingKey;
import accord.api.ViolationHandler.ViolationHandlerHolder;
import accord.local.Command.WaitingOn;
@@ -531,12 +532,12 @@ public class Commands
RaceWithRecovery
}
- public static ApplyOutcome apply(SafeCommandStore safeStore, SafeCommand
safeCommand, StoreParticipants participants, Ballot ballot, TxnId txnId,
Route<?> route, Timestamp executeAt, @Nullable Deps deps, @Nullable Txn txn,
Writes writes, Result result)
+ public static ApplyOutcome apply(SafeCommandStore safeStore, SafeCommand
safeCommand, StoreParticipants participants, Ballot ballot, TxnId txnId,
Route<?> route, Timestamp executeAt, @Nullable Deps deps, @Nullable Txn txn,
Writes writes, PersistableResult result)
{
return apply(SaveStatus.PreApplied, safeStore, safeCommand,
participants, ballot, txnId, route, executeAt, deps, txn, writes, result);
}
- public static ApplyOutcome apply(SaveStatus newSaveStatus,
SafeCommandStore safeStore, SafeCommand safeCommand, StoreParticipants
participants, Ballot ballot, TxnId txnId, Route<?> route, Timestamp executeAt,
@Nullable Deps deps, @Nullable Txn txn, Writes writes, Result result)
+ public static ApplyOutcome apply(SaveStatus newSaveStatus,
SafeCommandStore safeStore, SafeCommand safeCommand, StoreParticipants
participants, Ballot ballot, TxnId txnId, Route<?> route, Timestamp executeAt,
@Nullable Deps deps, @Nullable Txn txn, Writes writes, PersistableResult result)
{
Invariants.require(newSaveStatus == SaveStatus.PreApplied ||
newSaveStatus == Applying || newSaveStatus == SaveStatus.Applied);
Command command = safeCommand.current();
@@ -721,10 +722,10 @@ public class Commands
final Participants<?> participants;
final Timestamp applyAt;
final Writes writes;
- final Result result;
+ final PersistableResult result;
final boolean force;
- protected PostFastApply(Head<?> head, CommandStore commandStore, TxnId
txnId, Participants<?> participants, Timestamp applyAt, Writes writes, Result
result, boolean force)
+ protected PostFastApply(Head<?> head, CommandStore commandStore, TxnId
txnId, Participants<?> participants, Timestamp applyAt, Writes writes,
PersistableResult result, boolean force)
{
super(head);
this.commandStore = commandStore;
@@ -936,17 +937,21 @@ public class Commands
Result result = txn.result(txnId, applyAt, null);
safeStore.commandStore().node.reportLocalExecution(txnId, route,
ballot, applyAt, writes, result);
- command = safeCommand.preapplied(safeStore, applyAt, writes, result);
+ command = safeCommand.preapplied(safeStore, applyAt, writes,
result.toPersistable());
return command;
}
private static void replicaExecuteFastApply(CommandStore unsafeStore,
Ballot ballot, TxnId txnId, Route<?> route, PartialTxn txn, Data data,
Timestamp applyAt, Participants<?> executes)
{
Writes writes = txn.execute(txnId, applyAt, data);
- Result result = txn.result(txnId, applyAt, data);
- unsafeStore.node.reportLocalExecution(txnId, route, ballot, applyAt,
writes, result);
+ PersistableResult persistResult;
+ {
+ Result result = txn.result(txnId, applyAt, data);
+ unsafeStore.node.reportLocalExecution(txnId, route, ballot,
applyAt, writes, result);
+ persistResult = result.toPersistable();
+ }
writes.applyDirect(unsafeStore, executes, txn)
- .then(head -> new PostFastApply<>(head, unsafeStore, txnId,
executes, applyAt, writes, result, false))
+ .then(head -> new PostFastApply<>(head, unsafeStore, txnId,
executes, applyAt, writes, persistResult, false))
.begin(unsafeStore.agent);
}
@@ -962,10 +967,14 @@ public class Commands
else
{
Writes writes = txn.execute(txnId, applyAt, data);
- Result result = txn.result(txnId, applyAt, data);
- unsafeStore.node.reportLocalExecution(txnId, route, ballot,
applyAt, writes, result);
+ PersistableResult persistResult;
+ {
+ Result result = txn.result(txnId, applyAt, data);
+ unsafeStore.node.reportLocalExecution(txnId, route,
ballot, applyAt, writes, result);
+ persistResult = result.toPersistable();
+ }
if (command.saveStatus.compareTo(SaveStatus.PreApplied) <= 0)
- apply(Applying, safeStore, safeCommand,
command.participants, command.acceptedOrCommitted(), txnId, command.route(),
applyAt, command.partialDeps(), command.partialTxn(), writes, result);
+ apply(Applying, safeStore, safeCommand,
command.participants, command.acceptedOrCommitted(), txnId, command.route(),
applyAt, command.partialDeps(), command.partialTxn(), writes, persistResult);
}
});
}
diff --git a/accord-core/src/main/java/accord/local/SafeCommand.java
b/accord-core/src/main/java/accord/local/SafeCommand.java
index 515f16a5..adee9b02 100644
--- a/accord-core/src/main/java/accord/local/SafeCommand.java
+++ b/accord-core/src/main/java/accord/local/SafeCommand.java
@@ -21,7 +21,7 @@ package accord.local;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
-import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.local.Command.Truncated;
import accord.primitives.Ballot;
import accord.primitives.PartialDeps;
@@ -158,12 +158,12 @@ public abstract class SafeCommand
return update(safeStore,
Command.readyToExecute(current().asCommitted()));
}
- public Command.Executed preapplied(SafeCommandStore safeStore, Timestamp
applyAt, Writes writes, Result result)
+ public Command.Executed preapplied(SafeCommandStore safeStore, Timestamp
applyAt, Writes writes, PersistableResult result)
{
return update(safeStore, Command.preapplied(current(), applyAt,
writes, result));
}
- public Command.Executed preapplied(SafeCommandStore safeStore, @Nonnull
StoreParticipants participants, Ballot promised, Timestamp executeAt,
PartialTxn partialTxn, PartialDeps partialDeps, Command.WaitingOn waitingOn,
Writes writes, Result result)
+ public Command.Executed preapplied(SafeCommandStore safeStore, @Nonnull
StoreParticipants participants, Ballot promised, Timestamp executeAt,
PartialTxn partialTxn, PartialDeps partialDeps, Command.WaitingOn waitingOn,
Writes writes, PersistableResult result)
{
return update(safeStore, Command.preapplied(current(), participants,
promised, executeAt, partialTxn, partialDeps, waitingOn, writes, result));
}
@@ -173,7 +173,7 @@ public abstract class SafeCommand
return update(safeStore, Command.applying(current().asExecuted()));
}
- public Command.Executed applying(SafeCommandStore safeStore, @Nonnull
StoreParticipants participants, Timestamp executeAt, PartialTxn partialTxn,
PartialDeps partialDeps, Command.WaitingOn waitingOn, Writes writes, Result
result)
+ public Command.Executed applying(SafeCommandStore safeStore, @Nonnull
StoreParticipants participants, Timestamp executeAt, PartialTxn partialTxn,
PartialDeps partialDeps, Command.WaitingOn waitingOn, Writes writes,
PersistableResult result)
{
return update(safeStore, Command.applying(current(), participants,
executeAt, partialTxn, partialDeps, waitingOn, writes, result));
}
@@ -188,7 +188,7 @@ public abstract class SafeCommand
return update(safeStore, Command.applied(current().asExecuted()),
forceUpdate);
}
- public Command.Executed applied(SafeCommandStore safeStore, @Nonnull
StoreParticipants participants, Timestamp executeAt, PartialTxn partialTxn,
PartialDeps partialDeps, Command.WaitingOn waitingOn, Writes writes, Result
result)
+ public Command.Executed applied(SafeCommandStore safeStore, @Nonnull
StoreParticipants participants, Timestamp executeAt, PartialTxn partialTxn,
PartialDeps partialDeps, Command.WaitingOn waitingOn, Writes writes,
PersistableResult result)
{
return update(safeStore, Command.applied(current(), participants,
executeAt, partialTxn, partialDeps, waitingOn, writes, result));
}
diff --git a/accord-core/src/main/java/accord/messages/Apply.java
b/accord-core/src/main/java/accord/messages/Apply.java
index f806a3ef..48845d8e 100644
--- a/accord-core/src/main/java/accord/messages/Apply.java
+++ b/accord-core/src/main/java/accord/messages/Apply.java
@@ -21,6 +21,7 @@ package accord.messages;
import javax.annotation.Nullable;
import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.coordinate.ExecuteFlag.ExecuteFlags;
import accord.local.CommandStore;
import accord.local.CommandStores;
@@ -65,7 +66,7 @@ public class Apply extends RouteRequest<ApplyReply>
public static final Factory FACTORY = Apply::new;
public static class SerializationSupport
{
- public static Apply create(TxnId txnId, Ballot ballot, Route<?> scope,
long minEpoch, long waitForEpoch, long maxEpoch, Kind kind, Timestamp
executeAt, PartialDeps deps, PartialTxn txn, @Nullable FullRoute<?> fullRoute,
Writes writes, Result result, ExecuteFlags flags)
+ public static Apply create(TxnId txnId, Ballot ballot, Route<?> scope,
long minEpoch, long waitForEpoch, long maxEpoch, Kind kind, Timestamp
executeAt, PartialDeps deps, PartialTxn txn, @Nullable FullRoute<?> fullRoute,
Writes writes, PersistableResult result, ExecuteFlags flags)
{
return new Apply(kind, txnId, ballot, scope, minEpoch,
waitForEpoch, maxEpoch, executeAt, deps, txn, fullRoute, writes, result, flags);
}
@@ -73,7 +74,7 @@ public class Apply extends RouteRequest<ApplyReply>
public interface Factory
{
- Apply create(Kind kind, Id to, Topologies participates, TxnId txnId,
Ballot ballot, Route<?> scope, Txn txn, Timestamp executeAt, Deps deps, Writes
writes, Result result, FullRoute<?> fullRoute, ExecuteFlags flags);
+ Apply create(Kind kind, Id to, Topologies participates, TxnId txnId,
Ballot ballot, Route<?> scope, Txn txn, Timestamp executeAt, Deps deps, Writes
writes, PersistableResult result, FullRoute<?> fullRoute, ExecuteFlags flags);
}
public enum Kind { Minimal, Maximal }
@@ -85,7 +86,7 @@ public class Apply extends RouteRequest<ApplyReply>
private @Nullable PartialTxn txn;
public final @Nullable FullRoute<?> fullRoute;
private @Nullable Writes writes;
- private Result result;
+ private PersistableResult result;
public final long minEpoch;
public final long maxEpoch;
public final ExecuteFlags flags;
@@ -95,7 +96,7 @@ public class Apply extends RouteRequest<ApplyReply>
public Writes writes() { return writes; }
public Result result() { return result; }
- protected Apply(Kind kind, Id to, Topologies participates, TxnId txnId,
Ballot ballot, Route<?> sendTo, Txn txn, Timestamp executeAt, Deps deps, Writes
writes, Result result, FullRoute<?> fullRoute, ExecuteFlags flags)
+ protected Apply(Kind kind, Id to, Topologies participates, TxnId txnId,
Ballot ballot, Route<?> sendTo, Txn txn, Timestamp executeAt, Deps deps, Writes
writes, PersistableResult result, FullRoute<?> fullRoute, ExecuteFlags flags)
{
super(to, participates, sendTo, txnId);
Invariants.require(txnId.kind() != Txn.Kind.Write || writes != null);
@@ -112,7 +113,7 @@ public class Apply extends RouteRequest<ApplyReply>
this.maxEpoch = participates.currentEpoch();
}
- protected Apply(Kind kind, TxnId txnId, Ballot ballot, Route<?> route,
long minEpoch, long waitForEpoch, long maxEpoch, Timestamp executeAt,
PartialDeps deps, @Nullable PartialTxn txn, @Nullable FullRoute<?> fullRoute,
Writes writes, Result result, ExecuteFlags flags)
+ protected Apply(Kind kind, TxnId txnId, Ballot ballot, Route<?> route,
long minEpoch, long waitForEpoch, long maxEpoch, Timestamp executeAt,
PartialDeps deps, @Nullable PartialTxn txn, @Nullable FullRoute<?> fullRoute,
Writes writes, PersistableResult result, ExecuteFlags flags)
{
super(txnId, route, waitForEpoch);
this.kind = kind;
@@ -208,30 +209,30 @@ public class Apply extends RouteRequest<ApplyReply>
PartialTxn txn = this.txn;
PartialDeps deps = this.deps;
Writes writes = this.writes;
- Result result = this.result;
+ PersistableResult result = this.result;
if (ifDoneExpectCancelled()) // check cancellation after reading
nullable fields
return null;
return apply(newSaveStatus, safeStore, participants, ballot, txn,
txnId, executeAt, deps, bestRoute(), writes, result);
}
- public static ApplyReply apply(SafeCommandStore safeStore,
StoreParticipants participants, Ballot ballot, PartialTxn txn, TxnId txnId,
Timestamp executeAt, PartialDeps deps, Route<?> route, Writes writes, Result
result)
+ public static ApplyReply apply(SafeCommandStore safeStore,
StoreParticipants participants, Ballot ballot, PartialTxn txn, TxnId txnId,
Timestamp executeAt, PartialDeps deps, Route<?> route, Writes writes,
PersistableResult result)
{
return apply(PreApplied, safeStore, participants, ballot, txn, txnId,
executeAt, deps, route, writes, result);
}
- public static ApplyReply apply(SaveStatus newSaveStatus, SafeCommandStore
safeStore, StoreParticipants participants, Ballot ballot, PartialTxn txn, TxnId
txnId, Timestamp executeAt, PartialDeps deps, Route<?> route, Writes writes,
Result result)
+ public static ApplyReply apply(SaveStatus newSaveStatus, SafeCommandStore
safeStore, StoreParticipants participants, Ballot ballot, PartialTxn txn, TxnId
txnId, Timestamp executeAt, PartialDeps deps, Route<?> route, Writes writes,
PersistableResult result)
{
SafeCommand safeCommand = safeStore.get(txnId, participants);
return apply(newSaveStatus, safeStore, safeCommand, participants,
ballot, txn, txnId, executeAt, deps, route, writes, result);
}
- public static ApplyReply apply(SafeCommandStore safeStore, SafeCommand
safeCommand, StoreParticipants participants, Ballot ballot, PartialTxn txn,
TxnId txnId, Timestamp executeAt, PartialDeps deps, Route<?> route, Writes
writes, Result result)
+ public static ApplyReply apply(SafeCommandStore safeStore, SafeCommand
safeCommand, StoreParticipants participants, Ballot ballot, PartialTxn txn,
TxnId txnId, Timestamp executeAt, PartialDeps deps, Route<?> route, Writes
writes, PersistableResult result)
{
return apply(PreApplied, safeStore, safeCommand, participants, ballot,
txn, txnId, executeAt, deps, route, writes, result);
}
- public static ApplyReply apply(SaveStatus newSaveStatus, SafeCommandStore
safeStore, SafeCommand safeCommand, StoreParticipants participants, Ballot
ballot, PartialTxn txn, TxnId txnId, Timestamp executeAt, PartialDeps deps,
Route<?> route, Writes writes, Result result)
+ public static ApplyReply apply(SaveStatus newSaveStatus, SafeCommandStore
safeStore, SafeCommand safeCommand, StoreParticipants participants, Ballot
ballot, PartialTxn txn, TxnId txnId, Timestamp executeAt, PartialDeps deps,
Route<?> route, Writes writes, PersistableResult result)
{
switch (Commands.apply(newSaveStatus, safeStore, safeCommand,
participants, ballot, txnId, route, executeAt, deps, txn, writes, result))
{
diff --git
a/accord-core/src/main/java/accord/messages/ApplyThenWaitUntilApplied.java
b/accord-core/src/main/java/accord/messages/ApplyThenWaitUntilApplied.java
index cb666926..bc9364bb 100644
--- a/accord-core/src/main/java/accord/messages/ApplyThenWaitUntilApplied.java
+++ b/accord-core/src/main/java/accord/messages/ApplyThenWaitUntilApplied.java
@@ -22,6 +22,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.local.Node;
import accord.local.SafeCommandStore;
import accord.local.StoreParticipants;
@@ -56,7 +57,7 @@ public class ApplyThenWaitUntilApplied extends
WaitUntilApplied
@SuppressWarnings("unused")
public static class SerializerSupport
{
- public static ApplyThenWaitUntilApplied create(TxnId txnId,
Participants<?> readScope, long minEpoch, Timestamp executeAt, FullRoute<?>
route, PartialTxn txn, PartialDeps deps, Writes writes, Result result)
+ public static ApplyThenWaitUntilApplied create(TxnId txnId,
Participants<?> readScope, long minEpoch, Timestamp executeAt, FullRoute<?>
route, PartialTxn txn, PartialDeps deps, Writes writes, PersistableResult
result)
{
return new ApplyThenWaitUntilApplied(txnId, readScope, minEpoch,
executeAt, route, txn, deps, writes, result);
}
@@ -66,19 +67,19 @@ public class ApplyThenWaitUntilApplied extends
WaitUntilApplied
private PartialTxn txn;
private PartialDeps deps;
private Writes writes;
- private Result result;
+ private PersistableResult result;
public PartialTxn txn() { return txn; }
public PartialDeps deps() { return deps; }
public Writes writes() { return writes; }
public Result result() { return result; }
- public ApplyThenWaitUntilApplied(Node.Id to, Topologies topologies,
Timestamp executeAt, FullRoute<?> route, TxnId txnId, Txn txn, Deps deps,
Participants<?> readScope, Writes writes, Result result)
+ public ApplyThenWaitUntilApplied(Node.Id to, Topologies topologies,
Timestamp executeAt, FullRoute<?> route, TxnId txnId, Txn txn, Deps deps,
Participants<?> readScope, Writes writes, PersistableResult result)
{
this(to, topologies, executeAt, executeAt.epoch(), route, txnId, txn,
deps, readScope, writes, result);
}
- public ApplyThenWaitUntilApplied(Node.Id to, Topologies topologies,
Timestamp executeAt, long executeAtEpoch, FullRoute<?> route, TxnId txnId, Txn
txn, Deps deps, Participants<?> readScope, Writes writes, Result result)
+ public ApplyThenWaitUntilApplied(Node.Id to, Topologies topologies,
Timestamp executeAt, long executeAtEpoch, FullRoute<?> route, TxnId txnId, Txn
txn, Deps deps, Participants<?> readScope, Writes writes, PersistableResult
result)
{
super(to, topologies, txnId, readScope, executeAt, executeAtEpoch);
Route<?> scope = computeScope(to, topologies, route);
@@ -89,7 +90,7 @@ public class ApplyThenWaitUntilApplied extends
WaitUntilApplied
this.result = result;
}
- protected ApplyThenWaitUntilApplied(TxnId txnId, Participants<?>
readScope, long minEpoch, Timestamp executeAt, FullRoute<?> route, PartialTxn
txn, PartialDeps deps, Writes writes, Result result)
+ protected ApplyThenWaitUntilApplied(TxnId txnId, Participants<?>
readScope, long minEpoch, Timestamp executeAt, FullRoute<?> route, PartialTxn
txn, PartialDeps deps, Writes writes, PersistableResult result)
{
super(txnId, readScope, minEpoch, executeAt, executeAt.epoch());
this.route = route;
@@ -111,7 +112,7 @@ public class ApplyThenWaitUntilApplied extends
WaitUntilApplied
PartialTxn txn = this.txn;
PartialDeps deps = this.deps;
Writes writes = this.writes;
- Result result = this.result;
+ PersistableResult result = this.result;
if (!isPending())
return null; // we can't throw an exception here else we override
any non-exceptional reply informing the reason
diff --git a/accord-core/src/main/java/accord/messages/CheckStatus.java
b/accord-core/src/main/java/accord/messages/CheckStatus.java
index 57fe170b..3c03569c 100644
--- a/accord-core/src/main/java/accord/messages/CheckStatus.java
+++ b/accord-core/src/main/java/accord/messages/CheckStatus.java
@@ -20,7 +20,7 @@ package accord.messages;
import javax.annotation.Nullable;
-import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.api.RoutingKey;
import accord.coordinate.Infer.InvalidIf;
import accord.local.Command;
@@ -101,7 +101,7 @@ public class CheckStatus extends
ParticipantsRequest<Participants<?>, CheckStatu
Ballot promised, Ballot
maxAcceptedOrCommitted, Ballot acceptedOrCommitted,
@Nullable Timestamp executeAt,
boolean isCoordinating, Durability durability,
@Nullable Route<?> route,
@Nullable RoutingKey homeKey, InvalidIf invalidIf,
- PartialTxn partialTxn,
PartialDeps committedDeps, Writes writes, Result result)
+ PartialTxn partialTxn,
PartialDeps committedDeps, Writes writes, PersistableResult result)
{
return new CheckStatusOkFull(map, maxKnowledgeStatus, maxStatus,
promised, maxAcceptedOrCommitted, acceptedOrCommitted,
executeAt, isCoordinating,
durability, route, homeKey, invalidIf, partialTxn, committedDeps, writes,
result);
@@ -538,7 +538,7 @@ public class CheckStatus extends
ParticipantsRequest<Participants<?>, CheckStatu
public final PartialTxn partialTxn;
public final PartialDeps stableDeps; // only set if status >=
Committed, so safe to merge
public final Writes writes;
- public final Result result;
+ public final PersistableResult result;
public CheckStatusOkFull(KnownMap map, boolean isCoordinating,
Durability durability, InvalidIf invalidIf, Command command)
{
@@ -551,7 +551,7 @@ public class CheckStatus extends
ParticipantsRequest<Participants<?>, CheckStatu
protected CheckStatusOkFull(KnownMap map, SaveStatus
maxNotTruncatedSaveStatus, SaveStatus maxSaveStatus, Ballot promised, Ballot
maxAcceptedOrCommitted, Ballot acceptedOrCommitted,
Timestamp executeAt, boolean
isCoordinating, Durability durability, Route<?> route,
- RoutingKey homeKey, InvalidIf invalidIf,
PartialTxn partialTxn, PartialDeps stableDeps, Writes writes, Result result)
+ RoutingKey homeKey, InvalidIf invalidIf,
PartialTxn partialTxn, PartialDeps stableDeps, Writes writes, PersistableResult
result)
{
super(map, maxNotTruncatedSaveStatus, maxSaveStatus, promised,
maxAcceptedOrCommitted, acceptedOrCommitted,
executeAt, isCoordinating, durability, route, homeKey,
invalidIf);
@@ -636,7 +636,7 @@ public class CheckStatus extends
ParticipantsRequest<Participants<?>, CheckStatu
else if (fullMin.stableDeps == null) committedDeps =
fullMax.stableDeps;
else committedDeps = fullMax.stableDeps.with(fullMin.stableDeps);
Writes writes = (fullMax.writes != null ? fullMax :
fullMin).writes;
- Result result = (fullMax.result != null ? fullMax :
fullMin).result;
+ PersistableResult result = (fullMax.result != null ? fullMax :
fullMin).result;
return new CheckStatusOkFull(max.map, max.maxKnowledgeSaveStatus,
max.maxSaveStatus,
max.maxPromised,
max.maxAcceptedOrCommitted, max.acceptedOrCommitted,
diff --git a/accord-core/src/main/java/accord/messages/Propagate.java
b/accord-core/src/main/java/accord/messages/Propagate.java
index 5a080dbd..675f998d 100644
--- a/accord-core/src/main/java/accord/messages/Propagate.java
+++ b/accord-core/src/main/java/accord/messages/Propagate.java
@@ -18,7 +18,7 @@
package accord.messages;
import accord.api.ProtocolModifiers;
-import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.api.RoutingKey;
import accord.api.Tracing;
import accord.coordinate.FetchData.FetchResult;
@@ -98,7 +98,7 @@ public class Propagate extends
MapReduceConsumeCommandStores<Route<?>, Void>
@Nullable final PartialDeps stableDeps;
@Nullable final Timestamp committedExecuteAt;
@Nullable final Writes writes;
- @Nullable final Result result;
+ @Nullable final PersistableResult result;
final BiConsumer<? super FetchResult, Throwable> callback;
final @Nullable Tracing tracing;
@@ -121,7 +121,7 @@ public class Propagate extends
MapReduceConsumeCommandStores<Route<?>, Void>
@Nullable PartialDeps stableDeps,
@Nullable Timestamp committedExecuteAt,
@Nullable Writes writes,
- @Nullable Result result,
+ @Nullable PersistableResult result,
BiConsumer<? super FetchResult, Throwable> callback,
@Nullable Tracing tracing)
{
diff --git a/accord-core/src/test/java/accord/impl/basic/InMemoryJournal.java
b/accord-core/src/test/java/accord/impl/basic/InMemoryJournal.java
index 6a153a25..8539fbe1 100644
--- a/accord-core/src/test/java/accord/impl/basic/InMemoryJournal.java
+++ b/accord-core/src/test/java/accord/impl/basic/InMemoryJournal.java
@@ -37,7 +37,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import accord.api.Journal;
-import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.impl.CommandChange;
import accord.impl.InMemoryCommandStore;
import accord.local.Cleanup;
@@ -985,7 +985,7 @@ public class InMemoryJournal implements Journal
writes = Invariants.nonNull((Writes)
diff.changes.get(WRITES));
break;
case RESULT:
- result = Invariants.nonNull((Result)
diff.changes.get(RESULT));
+ result = Invariants.nonNull((PersistableResult)
diff.changes.get(RESULT));
break;
case CLEANUP:
Cleanup nextCleanup = Invariants.nonNull((Cleanup)
diff.changes.get(CLEANUP));
diff --git a/accord-core/src/test/java/accord/impl/list/ListResult.java
b/accord-core/src/test/java/accord/impl/list/ListResult.java
index c752bd0b..94fcdd4b 100644
--- a/accord-core/src/test/java/accord/impl/list/ListResult.java
+++ b/accord-core/src/test/java/accord/impl/list/ListResult.java
@@ -23,15 +23,15 @@ import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
+import accord.api.Result.PersistableResult;
import accord.local.Node.Id;
-import accord.api.Result;
import accord.messages.MessageType;
import accord.primitives.Keys;
import accord.messages.Reply;
import accord.primitives.Seekables;
import accord.primitives.TxnId;
-public class ListResult implements Result, Reply
+public class ListResult implements PersistableResult, Reply
{
public enum Status
{ Applied, RecoveryApplied, HeartBeat, Invalidated, Lost, Other,
Truncated, Failure }
diff --git a/accord-core/src/test/java/accord/impl/mock/MockStore.java
b/accord-core/src/test/java/accord/impl/mock/MockStore.java
index 6b0df3f4..2546e232 100644
--- a/accord-core/src/test/java/accord/impl/mock/MockStore.java
+++ b/accord-core/src/test/java/accord/impl/mock/MockStore.java
@@ -22,7 +22,7 @@ import accord.api.Data;
import accord.api.DataStore;
import accord.api.Query;
import accord.api.Read;
-import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.api.Update;
import accord.api.Write;
import accord.local.CommandStore;
@@ -56,7 +56,7 @@ public class MockStore implements DataStore
}
};
- public static final Result RESULT = new Result() {};
+ public static final PersistableResult RESULT = new PersistableResult() {};
public static final Query QUERY = (txnId, executeAt, keys, data, read,
update) -> RESULT;
public static final Write WRITE = (commandStore, key, txnId, executeAt,
command) -> AsyncChains.success(null);
diff --git a/accord-core/src/test/java/accord/local/CheckedCommands.java
b/accord-core/src/test/java/accord/local/CheckedCommands.java
index 7d29241f..af0e9ff9 100644
--- a/accord-core/src/test/java/accord/local/CheckedCommands.java
+++ b/accord-core/src/test/java/accord/local/CheckedCommands.java
@@ -20,7 +20,7 @@ package accord.local;
import javax.annotation.Nullable;
-import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.messages.Accept;
import accord.primitives.Ballot;
import accord.primitives.FullRoute;
@@ -88,12 +88,12 @@ public class CheckedCommands
consumer.accept(before, after);
}
- public static void apply(SafeCommandStore safeStore, TxnId txnId, Route<?>
route, Timestamp executeAt, @Nullable PartialDeps partialDeps, @Nullable
PartialTxn partialTxn, Writes writes, Result result)
+ public static void apply(SafeCommandStore safeStore, TxnId txnId, Route<?>
route, Timestamp executeAt, @Nullable PartialDeps partialDeps, @Nullable
PartialTxn partialTxn, Writes writes, PersistableResult result)
{
apply(safeStore, txnId, route, executeAt, partialDeps, partialTxn,
writes, result, (l, r) -> {});
}
- public static void apply(SafeCommandStore safeStore, TxnId txnId, Route<?>
route, Timestamp executeAt, @Nullable PartialDeps partialDeps, @Nullable
PartialTxn partialTxn, Writes writes, Result result, BiConsumer<Command,
Command> consumer)
+ public static void apply(SafeCommandStore safeStore, TxnId txnId, Route<?>
route, Timestamp executeAt, @Nullable PartialDeps partialDeps, @Nullable
PartialTxn partialTxn, Writes writes, PersistableResult result,
BiConsumer<Command, Command> consumer)
{
StoreParticipants participants = StoreParticipants.execute(safeStore,
route, txnId.epoch(), txnId, executeAt.epoch());
SafeCommand safeCommand = safeStore.get(txnId, participants);
diff --git a/accord-core/src/test/java/accord/local/cfk/CommandsForKeyTest.java
b/accord-core/src/test/java/accord/local/cfk/CommandsForKeyTest.java
index 22b61149..b48128e5 100644
--- a/accord-core/src/test/java/accord/local/cfk/CommandsForKeyTest.java
+++ b/accord-core/src/test/java/accord/local/cfk/CommandsForKeyTest.java
@@ -47,6 +47,7 @@ import accord.api.ProgressLog.BlockedUntil;
import accord.api.Query;
import accord.api.Read;
import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.api.RoutingKey;
import accord.api.Update;
import accord.impl.AbstractReplayer;
@@ -562,7 +563,7 @@ public class CommandsForKeyTest
.partialDeps(slice(txnId, deps))
.executeAt(executeAt)
.waitingOn(waitingOn)
- .result(new Result(){});
+ .result(new PersistableResult(){});
if (txnId.is(Write))
builder.writes(new Writes(txnId, executeAt, KEYS, null));
diff --git a/accord-core/src/test/java/accord/messages/ReadDataTest.java
b/accord-core/src/test/java/accord/messages/ReadDataTest.java
index bcf23c1c..a508c0e4 100644
--- a/accord-core/src/test/java/accord/messages/ReadDataTest.java
+++ b/accord-core/src/test/java/accord/messages/ReadDataTest.java
@@ -35,7 +35,7 @@ import accord.api.Data;
import accord.api.MessageSink.ReplySink;
import accord.api.Query;
import accord.api.Read;
-import accord.api.Result;
+import accord.api.Result.PersistableResult;
import accord.api.RoutingKey;
import accord.api.Update;
import accord.api.Write;
@@ -302,7 +302,7 @@ class ReadDataTest
Writes writes = new Writes(txnId, executeAt, keys, write);
forEach(store ->
check(store.chain(PreLoadContext.contextFor(txnId, "Test"), safe -> {
- CheckedCommands.apply(safe, txnId, route, executeAt, deps,
partialTxn, writes, Mockito.mock(Result.class));
+ CheckedCommands.apply(safe, txnId, route, executeAt, deps,
partialTxn, writes, Mockito.mock(PersistableResult.class));
})));
return writeResult;
}
diff --git
a/accord-maelstrom/src/main/java/accord/maelstrom/MaelstromResult.java
b/accord-maelstrom/src/main/java/accord/maelstrom/MaelstromResult.java
index bb44cb59..6db3888e 100644
--- a/accord-maelstrom/src/main/java/accord/maelstrom/MaelstromResult.java
+++ b/accord-maelstrom/src/main/java/accord/maelstrom/MaelstromResult.java
@@ -22,6 +22,7 @@ import java.io.IOException;
import java.util.NavigableMap;
import java.util.TreeMap;
+import accord.api.Result.PersistableResult;
import accord.local.Node;
import accord.local.Node.Id;
import com.google.gson.TypeAdapter;
@@ -34,7 +35,7 @@ import accord.primitives.Keys;
import static accord.utils.Invariants.illegalState;
-public class MaelstromResult implements Result
+public class MaelstromResult implements PersistableResult
{
final Node.Id client;
final long requestId;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]