From cac5702c3f69370baf1d14c72488bae37792bd85 Mon Sep 17 00:00:00 2001 From: Michael Marshall Date: Wed, 4 Jun 2025 15:20:11 -0500 Subject: [PATCH] Use binary search in ShardBoundaries#getShardForToken --- .../apache/cassandra/db/memtable/ShardBoundaries.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/java/org/apache/cassandra/db/memtable/ShardBoundaries.java b/src/java/org/apache/cassandra/db/memtable/ShardBoundaries.java index cb8b55cedbca..b5b9fb8d96af 100644 --- a/src/java/org/apache/cassandra/db/memtable/ShardBoundaries.java +++ b/src/java/org/apache/cassandra/db/memtable/ShardBoundaries.java @@ -68,12 +68,11 @@ public ShardBoundaries(List boundaries, long ringVersion) */ public int getShardForToken(Token tk) { - for (int i = 0; i < boundaries.length; i++) - { - if (tk.compareTo(boundaries[i]) <= 0) // boundaries are end-inclusive - return i; - } - return boundaries.length; + int idx = Arrays.binarySearch(boundaries, tk); + // boundaries are end-inclusive, so an exact match is the correct shard + if (idx >= 0) + return idx; + return -idx - 1; } /**