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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]