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
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 @@
{
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<Void> 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 @@
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 @@
* or any route will do
*/
@Override
+ @Nullable
public abstract Route<?> route();
/**
@@ -629,7 +631,7 @@
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 @@
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;