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

benedict 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 3789c5b  Fix SerializerSupport.reconstruct, and introduce RangeFactory
3789c5b is described below

commit 3789c5bfec50eb96157c0a55af77f78ee0cac804
Author: Benedict Elliott Smith <bened...@apache.org>
AuthorDate: Wed Jan 24 16:16:05 2024 +0000

    Fix SerializerSupport.reconstruct, and introduce RangeFactory
---
 accord-core/src/main/java/accord/api/RoutingKey.java          |  2 ++
 accord-core/src/main/java/accord/local/SerializerSupport.java |  1 +
 accord-core/src/main/java/accord/messages/CheckStatus.java    |  4 ++--
 accord-core/src/main/java/accord/primitives/LatestDeps.java   |  4 ++--
 accord-core/src/main/java/accord/primitives/Range.java        |  2 +-
 .../{api/RoutingKey.java => primitives/RangeFactory.java}     | 11 ++++-------
 accord-core/src/test/java/accord/impl/IntHashKey.java         |  7 +++++++
 accord-core/src/test/java/accord/impl/IntKey.java             |  7 +++++++
 accord-core/src/test/java/accord/impl/PrefixedIntHashKey.java |  7 +++++++
 .../src/main/java/accord/maelstrom/MaelstromKey.java          |  7 +++++++
 10 files changed, 40 insertions(+), 12 deletions(-)

diff --git a/accord-core/src/main/java/accord/api/RoutingKey.java 
b/accord-core/src/main/java/accord/api/RoutingKey.java
index 4ae6506..b219036 100644
--- a/accord-core/src/main/java/accord/api/RoutingKey.java
+++ b/accord-core/src/main/java/accord/api/RoutingKey.java
@@ -19,6 +19,7 @@
 package accord.api;
 
 import accord.primitives.Range;
+import accord.primitives.RangeFactory;
 import accord.primitives.RoutableKey;
 import accord.primitives.Unseekable;
 
@@ -26,4 +27,5 @@ public interface RoutingKey extends Unseekable, RoutableKey
 {
     @Override default RoutingKey toUnseekable() { return this; }
     Range asRange();
+    RangeFactory rangeFactory();
 }
diff --git a/accord-core/src/main/java/accord/local/SerializerSupport.java 
b/accord-core/src/main/java/accord/local/SerializerSupport.java
index fb8f121..cefe63c 100644
--- a/accord-core/src/main/java/accord/local/SerializerSupport.java
+++ b/accord-core/src/main/java/accord/local/SerializerSupport.java
@@ -73,6 +73,7 @@ public class SerializerSupport
             case PreCommitted:
                 return accepted(attrs, status, executeAt, promised, accepted, 
messageProvider);
             case Committed:
+            case Stable:
             case ReadyToExecute:
                 return committed(attrs, status, executeAt, promised, accepted, 
waitingOnProvider, messageProvider);
             case PreApplied:
diff --git a/accord-core/src/main/java/accord/messages/CheckStatus.java 
b/accord-core/src/main/java/accord/messages/CheckStatus.java
index a98e5ff..f888f48 100644
--- a/accord-core/src/main/java/accord/messages/CheckStatus.java
+++ b/accord-core/src/main/java/accord/messages/CheckStatus.java
@@ -437,7 +437,7 @@ public class CheckStatus extends 
AbstractEpochRequest<CheckStatus.CheckStatusRep
 
         public Ranges matchingRanges(Predicate<FoundKnown> match)
         {
-            return foldlWithBounds((known, ranges, start, end) -> 
match.test(known) ? ranges.with(Ranges.of(start.asRange().newRange(start, 
end))) : ranges, Ranges.EMPTY, i -> false);
+            return foldlWithBounds((known, ranges, start, end) -> 
match.test(known) ? ranges.with(Ranges.of(start.rangeFactory().newRange(start, 
end))) : ranges, Ranges.EMPTY, i -> false);
         }
 
         private static FoundKnown 
reduceInferredOrKnownForWithQuorum(FoundKnown foundKnown, @Nullable FoundKnown 
prev)
@@ -474,7 +474,7 @@ public class CheckStatus extends 
AbstractEpochRequest<CheckStatus.CheckStatusRep
                 if (!required.isSatisfiedBy(known))
                     return prev;
 
-                return prev.with(Ranges.of(start.asRange().newRange(start, 
end)));
+                return 
prev.with(Ranges.of(start.rangeFactory().newRange(start, end)));
             }, Ranges.EMPTY, i -> false);
         }
 
diff --git a/accord-core/src/main/java/accord/primitives/LatestDeps.java 
b/accord-core/src/main/java/accord/primitives/LatestDeps.java
index 98020ad..c2a03e3 100644
--- a/accord-core/src/main/java/accord/primitives/LatestDeps.java
+++ b/accord-core/src/main/java/accord/primitives/LatestDeps.java
@@ -134,7 +134,7 @@ public class LatestDeps extends 
ReducingRangeMap<LatestDeps.LatestEntry>
             if (!slice) slice = rangeDeps.indexOfStart(start) != -1 || 
rangeDeps.indexOfStart(end) != -1 - rangeDeps.rangeCount();
             if (!slice) return deps;
 
-            Ranges ranges = Ranges.of(start.asRange().newRange(start, end));
+            Ranges ranges = Ranges.of(start.rangeFactory().newRange(start, 
end));
             return new Deps(keyDeps.slice(ranges), rangeDeps.slice(ranges));
         }
 
@@ -327,7 +327,7 @@ public class LatestDeps extends 
ReducingRangeMap<LatestDeps.LatestEntry>
 
         private <V> Stream<V> stream(TriFunction<Ranges, MergeEntry, 
BiFunction<Deps, Ranges, V>, Stream<V>> selector, BiFunction<Deps, Ranges, V> 
getter)
         {
-            Range rangeFactory = starts[0].asRange();
+            RangeFactory rangeFactory = starts[0].rangeFactory();
             return IntStream.range(0, size())
                             .filter(i -> values[i] != null)
                             .mapToObj(i -> 
selector.apply(Ranges.of(rangeFactory.newRange(starts[i], starts[i+1])), 
values[i], getter))
diff --git a/accord-core/src/main/java/accord/primitives/Range.java 
b/accord-core/src/main/java/accord/primitives/Range.java
index a656c9b..f652186 100644
--- a/accord-core/src/main/java/accord/primitives/Range.java
+++ b/accord-core/src/main/java/accord/primitives/Range.java
@@ -35,7 +35,7 @@ import static accord.utils.SortedArrays.Search.FAST;
 /**
  * A range of keys
  */
-public abstract class Range implements Comparable<RoutableKey>, Unseekable, 
Seekable
+public abstract class Range implements Comparable<RoutableKey>, Unseekable, 
Seekable, RangeFactory
 {
     public static class EndInclusive extends Range
     {
diff --git a/accord-core/src/main/java/accord/api/RoutingKey.java 
b/accord-core/src/main/java/accord/primitives/RangeFactory.java
similarity index 74%
copy from accord-core/src/main/java/accord/api/RoutingKey.java
copy to accord-core/src/main/java/accord/primitives/RangeFactory.java
index 4ae6506..6eb4dbb 100644
--- a/accord-core/src/main/java/accord/api/RoutingKey.java
+++ b/accord-core/src/main/java/accord/primitives/RangeFactory.java
@@ -16,14 +16,11 @@
  * limitations under the License.
  */
 
-package accord.api;
+package accord.primitives;
 
-import accord.primitives.Range;
-import accord.primitives.RoutableKey;
-import accord.primitives.Unseekable;
+import accord.api.RoutingKey;
 
-public interface RoutingKey extends Unseekable, RoutableKey
+public interface RangeFactory
 {
-    @Override default RoutingKey toUnseekable() { return this; }
-    Range asRange();
+    Range newRange(RoutingKey start, RoutingKey end);
 }
diff --git a/accord-core/src/test/java/accord/impl/IntHashKey.java 
b/accord-core/src/test/java/accord/impl/IntHashKey.java
index df90d2b..1d0ffd3 100644
--- a/accord-core/src/test/java/accord/impl/IntHashKey.java
+++ b/accord-core/src/test/java/accord/impl/IntHashKey.java
@@ -25,6 +25,7 @@ import java.util.zip.CRC32;
 
 import accord.api.RoutingKey;
 import accord.local.ShardDistributor;
+import accord.primitives.RangeFactory;
 import accord.primitives.RoutableKey;
 import accord.primitives.Ranges;
 import accord.primitives.Keys;
@@ -128,6 +129,12 @@ public abstract class IntHashKey implements RoutableKey
         {
             return new Range(new Hash(hash - 1), new Hash(hash));
         }
+
+        @Override
+        public RangeFactory rangeFactory()
+        {
+            return (s, e) -> new Range((Hash) s, (Hash) e);
+        }
     }
 
     public static class Range extends accord.primitives.Range.EndInclusive
diff --git a/accord-core/src/test/java/accord/impl/IntKey.java 
b/accord-core/src/test/java/accord/impl/IntKey.java
index 2fa8df6..ae57550 100644
--- a/accord-core/src/test/java/accord/impl/IntKey.java
+++ b/accord-core/src/test/java/accord/impl/IntKey.java
@@ -24,6 +24,7 @@ import java.util.Objects;
 
 import accord.api.RoutingKey;
 import accord.local.ShardDistributor;
+import accord.primitives.RangeFactory;
 import accord.primitives.RoutableKey;
 import accord.primitives.Keys;
 import accord.primitives.RoutingKeys;
@@ -128,6 +129,12 @@ public class IntKey implements RoutableKey
         {
             return new Range(new Routing(key - 1), new Routing(key));
         }
+
+        @Override
+        public RangeFactory rangeFactory()
+        {
+            return (s, e) -> new Range((Routing)s, (Routing)e);
+        }
     }
 
     public static class Range extends accord.primitives.Range.EndInclusive
diff --git a/accord-core/src/test/java/accord/impl/PrefixedIntHashKey.java 
b/accord-core/src/test/java/accord/impl/PrefixedIntHashKey.java
index a8dab2b..2ee13d4 100644
--- a/accord-core/src/test/java/accord/impl/PrefixedIntHashKey.java
+++ b/accord-core/src/test/java/accord/impl/PrefixedIntHashKey.java
@@ -25,6 +25,7 @@ import javax.annotation.Nonnull;
 
 import accord.api.RoutingKey;
 import accord.local.ShardDistributor;
+import accord.primitives.RangeFactory;
 import accord.primitives.Ranges;
 import accord.primitives.RoutableKey;
 import accord.utils.CRCUtils;
@@ -127,6 +128,12 @@ public class PrefixedIntHashKey implements RoutableKey
         {
             super(prefix, key, isHash);
         }
+
+        @Override
+        public RangeFactory rangeFactory()
+        {
+            return (s, e) -> new Range((PrefixedIntRoutingKey) s, 
(PrefixedIntRoutingKey) e);
+        }
     }
 
     public static final class Sentinel extends PrefixedIntRoutingKey
diff --git a/accord-maelstrom/src/main/java/accord/maelstrom/MaelstromKey.java 
b/accord-maelstrom/src/main/java/accord/maelstrom/MaelstromKey.java
index 70246a3..3514afa 100644
--- a/accord-maelstrom/src/main/java/accord/maelstrom/MaelstromKey.java
+++ b/accord-maelstrom/src/main/java/accord/maelstrom/MaelstromKey.java
@@ -24,6 +24,7 @@ import java.util.Objects;
 import accord.api.RoutingKey;
 
 import accord.local.ShardDistributor;
+import accord.primitives.RangeFactory;
 import accord.primitives.RoutableKey;
 import accord.utils.Invariants;
 import com.google.gson.TypeAdapter;
@@ -149,6 +150,12 @@ public class MaelstromKey implements RoutableKey
             return new Range(new Routing(datum.hashCode() - 1),
                              new Routing(datum.hashCode()));
         }
+
+        @Override
+        public RangeFactory rangeFactory()
+        {
+            return Range::new;
+        }
     }
 
     public static class Range extends accord.primitives.Range.EndInclusive


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to