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]
