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]

Reply via email to