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 134df576 Improve Journal table key serialization Also improve: -
TxnId serialization - StoreParticipants serialization - compareUnsigned
Node.Id for consistency with serialized TxnId
134df576 is described below
commit 134df57677bbd5092994923a4dc2f15cd1d033d1
Author: Benedict Elliott Smith <[email protected]>
AuthorDate: Tue Apr 8 20:39:53 2025 +0100
Improve Journal table key serialization
Also improve:
- TxnId serialization
- StoreParticipants serialization
- compareUnsigned Node.Id for consistency with serialized TxnId
patch by Benedict; reviewed by Alex Petrov for CASSANDRA-20546
---
accord-core/src/main/java/accord/local/Node.java | 2 +-
.../src/main/java/accord/primitives/AbstractRanges.java | 5 +++++
.../java/accord/primitives/AbstractUnseekableKeys.java | 5 +++++
.../src/main/java/accord/primitives/FullKeyRoute.java | 6 ++++++
.../src/main/java/accord/primitives/KeyRoute.java | 5 +++++
.../src/main/java/accord/primitives/RangeRoute.java | 5 +++++
accord-core/src/main/java/accord/primitives/Route.java | 6 +++---
.../src/main/java/accord/primitives/Unseekables.java | 5 +++++
accord-core/src/main/java/accord/utils/TinyEnumSet.java | 16 ++++++++++++++++
9 files changed, 51 insertions(+), 4 deletions(-)
diff --git a/accord-core/src/main/java/accord/local/Node.java
b/accord-core/src/main/java/accord/local/Node.java
index a5c421c2..fd789527 100644
--- a/accord-core/src/main/java/accord/local/Node.java
+++ b/accord-core/src/main/java/accord/local/Node.java
@@ -146,7 +146,7 @@ public class Node implements ConfigurationService.Listener,
NodeCommandStoreServ
@Override
public int compareTo(Id that)
{
- return Integer.compare(this.id, that.id);
+ return Integer.compareUnsigned(this.id, that.id);
}
public String toString()
diff --git a/accord-core/src/main/java/accord/primitives/AbstractRanges.java
b/accord-core/src/main/java/accord/primitives/AbstractRanges.java
index d7bcad48..fa610d5d 100644
--- a/accord-core/src/main/java/accord/primitives/AbstractRanges.java
+++ b/accord-core/src/main/java/accord/primitives/AbstractRanges.java
@@ -845,4 +845,9 @@ public abstract class AbstractRanges implements
Iterable<Range>, Routables<Range
{
return Routables.foldl(this, intersect, fold, p1, p2, accumulator, i
-> false);
}
+
+ public Range[] unsafeRanges()
+ {
+ return ranges;
+ }
}
\ No newline at end of file
diff --git
a/accord-core/src/main/java/accord/primitives/AbstractUnseekableKeys.java
b/accord-core/src/main/java/accord/primitives/AbstractUnseekableKeys.java
index 7a163dfb..48d5526f 100644
--- a/accord-core/src/main/java/accord/primitives/AbstractUnseekableKeys.java
+++ b/accord-core/src/main/java/accord/primitives/AbstractUnseekableKeys.java
@@ -194,4 +194,9 @@ implements Iterable<RoutingKey>, Unseekables<RoutingKey>,
Participants<RoutingKe
{
return wrap == keys ? this : new RoutingKeys(wrap);
}
+
+ public RoutingKey[] unsafeKeys()
+ {
+ return keys;
+ }
}
diff --git a/accord-core/src/main/java/accord/primitives/FullKeyRoute.java
b/accord-core/src/main/java/accord/primitives/FullKeyRoute.java
index f0f0d04e..4f6396a6 100644
--- a/accord-core/src/main/java/accord/primitives/FullKeyRoute.java
+++ b/accord-core/src/main/java/accord/primitives/FullKeyRoute.java
@@ -65,6 +65,12 @@ public class FullKeyRoute extends KeyRoute implements
FullRoute<RoutingKey>
return this;
}
+ @Override
+ public boolean containsHomeKey()
+ {
+ return true;
+ }
+
@Override
public String toString()
{
diff --git a/accord-core/src/main/java/accord/primitives/KeyRoute.java
b/accord-core/src/main/java/accord/primitives/KeyRoute.java
index e4b50b75..f2ab3e5c 100644
--- a/accord-core/src/main/java/accord/primitives/KeyRoute.java
+++ b/accord-core/src/main/java/accord/primitives/KeyRoute.java
@@ -93,6 +93,11 @@ public abstract class KeyRoute extends
AbstractUnseekableKeys implements Route<R
return this;
}
+ public Participants<RoutingKey> participantsOnly()
+ {
+ return new RoutingKeys(keys);
+ }
+
@Override
public Participants<RoutingKey> participants(Ranges ranges)
{
diff --git a/accord-core/src/main/java/accord/primitives/RangeRoute.java
b/accord-core/src/main/java/accord/primitives/RangeRoute.java
index abc8b8a7..2bc692ee 100644
--- a/accord-core/src/main/java/accord/primitives/RangeRoute.java
+++ b/accord-core/src/main/java/accord/primitives/RangeRoute.java
@@ -84,6 +84,11 @@ public abstract class RangeRoute extends AbstractRanges
implements Route<Range>,
return with(homeKey);
}
+ public Participants<Range> participantsOnly()
+ {
+ return Ranges.ofSortedAndDeoverlappedUnchecked(ranges);
+ }
+
@Override
public boolean participatesIn(Ranges ranges)
{
diff --git a/accord-core/src/main/java/accord/primitives/Route.java
b/accord-core/src/main/java/accord/primitives/Route.java
index fb75ad4a..e59ecba1 100644
--- a/accord-core/src/main/java/accord/primitives/Route.java
+++ b/accord-core/src/main/java/accord/primitives/Route.java
@@ -54,6 +54,7 @@ public interface Route<K extends Unseekable> extends
Participants<K>
Route<K> intersecting(Unseekables<?> intersecting, Slice slice);
Route<K> withHomeKey();
+ default boolean containsHomeKey() { return contains(homeKey()); }
Route<K> with(Unseekables<K> with);
/**
@@ -61,10 +62,9 @@ public interface Route<K extends Unseekable> extends
Participants<K>
*/
boolean participatesIn(Ranges ranges);
- /**
- * Return the unseekables excluding any coordination-only home key
- */
Participants<K> participants();
+ // convert to not-a-Route
+ Participants<K> participantsOnly();
/**
* Return the unseekables excluding any coordination-only home key, that
intersect the provided ranges
diff --git a/accord-core/src/main/java/accord/primitives/Unseekables.java
b/accord-core/src/main/java/accord/primitives/Unseekables.java
index 61827f74..832440ca 100644
--- a/accord-core/src/main/java/accord/primitives/Unseekables.java
+++ b/accord-core/src/main/java/accord/primitives/Unseekables.java
@@ -40,6 +40,11 @@ public interface Unseekables<K extends Unseekable> extends
Iterable<K>, Routable
{
return this == FullKeyRoute | this == FullRangeRoute;
}
+
+ public Routable.Domain domain()
+ {
+ return this.compareTo(FullKeyRoute) <= 0 ? Routable.Domain.Key :
Routable.Domain.Range;
+ }
}
/**
diff --git a/accord-core/src/main/java/accord/utils/TinyEnumSet.java
b/accord-core/src/main/java/accord/utils/TinyEnumSet.java
index 9e540694..609a099d 100644
--- a/accord-core/src/main/java/accord/utils/TinyEnumSet.java
+++ b/accord-core/src/main/java/accord/utils/TinyEnumSet.java
@@ -44,6 +44,22 @@ public class TinyEnumSet<E extends Enum<E>>
this.bitset = bitset;
}
+ public static <E extends Enum<E>> TinyEnumSet<E> allOf(Class<E> clazz)
+ {
+ int count = clazz.getEnumConstants().length;
+ return new TinyEnumSet<>(-1 >>> (32 - count));
+ }
+
+ public static <E extends Enum<E>> TinyEnumSet<E> of(Enum<E> value)
+ {
+ return new TinyEnumSet<>(encode(value));
+ }
+
+ public static <E extends Enum<E>> TinyEnumSet<E> of(Enum<E> ... values)
+ {
+ return new TinyEnumSet<>(encode(values));
+ }
+
public static <E extends Enum<E>> int encode(Enum<E> ... values)
{
int bitset = 0;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]