This is an automated email from the ASF dual-hosted git repository.
benedict 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 9368684e5c Transaction Expiration
9368684e5c is described below
commit 9368684e5cda8c5040dcd45e7a2ee4925f366ef3
Author: Benedict Elliott Smith <[email protected]>
AuthorDate: Tue Nov 8 10:21:19 2022 +0000
Transaction Expiration
Ensure old or abandoned transactions are invalidated wherever possible.
patch by Benedict; reviewed by Ariel Weisberg for CASSANDRA-18041
---
.../cassandra/service/accord/AccordCommandStore.java | 16 ++++++++++------
.../apache/cassandra/service/accord/api/AccordAgent.java | 8 ++++++++
.../apache/cassandra/service/accord/AccordTestUtils.java | 2 ++
3 files changed, 20 insertions(+), 6 deletions(-)
diff --git
a/src/java/org/apache/cassandra/service/accord/AccordCommandStore.java
b/src/java/org/apache/cassandra/service/accord/AccordCommandStore.java
index 227efdf738..12b84a40c4 100644
--- a/src/java/org/apache/cassandra/service/accord/AccordCommandStore.java
+++ b/src/java/org/apache/cassandra/service/accord/AccordCommandStore.java
@@ -266,12 +266,6 @@ public class AccordCommandStore extends CommandStore
implements SafeCommandStore
return dataStore;
}
- @Override
- public Timestamp uniqueNow(Timestamp atLeast)
- {
- return time.uniqueNow(atLeast);
- }
-
public void processBlocking(Runnable runnable)
{
try
@@ -321,6 +315,16 @@ public class AccordCommandStore extends CommandStore
implements SafeCommandStore
}
@Override
+ public Timestamp preaccept(TxnId txnId, Keys keys)
+ {
+ Timestamp max = maxConflict(keys);
+ long epoch = latestEpoch();
+ if (txnId.compareTo(max) > 0 && txnId.epoch >= epoch &&
!agent.isExpired(txnId, time.now()))
+ return txnId;
+
+ return time.uniqueNow(max);
+ }
+
public Timestamp maxConflict(Keys keys)
{
// TODO: efficiency
diff --git a/src/java/org/apache/cassandra/service/accord/api/AccordAgent.java
b/src/java/org/apache/cassandra/service/accord/api/AccordAgent.java
index 8ed2c5ea24..6375bdc7b9 100644
--- a/src/java/org/apache/cassandra/service/accord/api/AccordAgent.java
+++ b/src/java/org/apache/cassandra/service/accord/api/AccordAgent.java
@@ -23,6 +23,7 @@ import accord.api.Result;
import accord.local.Command;
import accord.local.Node;
import accord.primitives.Timestamp;
+import accord.primitives.TxnId;
public class AccordAgent implements Agent
{
@@ -49,4 +50,11 @@ public class AccordAgent implements Agent
{
// TODO: this
}
+
+ @Override
+ public boolean isExpired(TxnId initiated, long now)
+ {
+ // TODO: this
+ return false;
+ }
}
diff --git a/test/unit/org/apache/cassandra/service/accord/AccordTestUtils.java
b/test/unit/org/apache/cassandra/service/accord/AccordTestUtils.java
index 2219a89b09..ad74eaa467 100644
--- a/test/unit/org/apache/cassandra/service/accord/AccordTestUtils.java
+++ b/test/unit/org/apache/cassandra/service/accord/AccordTestUtils.java
@@ -241,6 +241,7 @@ public class AccordTestUtils
{
@Override public Id id() { return node;}
@Override public long epoch() {return 1; }
+ @Override public long now() {return now.getAsLong(); }
@Override public Timestamp uniqueNow(Timestamp atLeast) { return
new Timestamp(1, now.getAsLong(), 0, node); }
};
return new InMemoryCommandStore.Synchronized(0, 0, 1, 8,
@@ -262,6 +263,7 @@ public class AccordTestUtils
{
@Override public Id id() { return node;}
@Override public long epoch() {return 1; }
+ @Override public long now() {return now.getAsLong(); }
@Override public Timestamp uniqueNow(Timestamp atLeast) { return
new Timestamp(1, now.getAsLong(), 0, node); }
};
return new AccordCommandStore(0, 0, 0, 1,
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]