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

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

commit b3c07040b845576b9ee9cefad1226d2acac5987d
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]

Reply via email to