This is an automated email from the ASF dual-hosted git repository.
maedhroz pushed a commit to branch cassandra-5.0
in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/cassandra-5.0 by this push:
new 225eb2feeb6 Correct the default behavior of compareTo() when comparing
WIDE and STATIC PrimaryKeys
225eb2feeb6 is described below
commit 225eb2feeb6ba856c5bf3f46fd0534d074539433
Author: Caleb Rackliffe <[email protected]>
AuthorDate: Thu Jan 23 11:52:38 2025 -0600
Correct the default behavior of compareTo() when comparing WIDE and STATIC
PrimaryKeys
patch by Caleb Rackliffe; reviewed by David Capwell for CASSANDRA-20238
---
CHANGES.txt | 1 +
.../disk/v1/postings/PostingListRangeIterator.java | 4 +-
.../sai/iterators/KeyRangeConcatIterator.java | 6 +--
.../iterators/KeyRangeIntersectionIterator.java | 13 +++---
.../index/sai/iterators/KeyRangeIterator.java | 15 +++++--
.../index/sai/iterators/KeyRangeListIterator.java | 2 +-
.../index/sai/iterators/KeyRangeUnionIterator.java | 4 +-
.../index/sai/memory/InMemoryKeyRangeIterator.java | 4 +-
.../sai/plan/StorageAttachedIndexSearcher.java | 2 +-
.../cassandra/index/sai/utils/PrimaryKey.java | 44 ++++++++++-----------
.../sai/cql/CompositePartitionKeyIndexTest.java | 46 ++++++++++++++++++++++
.../index/sai/iterators/LongIterator.java | 4 +-
.../cassandra/index/sai/utils/PrimaryKeyTest.java | 7 +---
13 files changed, 101 insertions(+), 51 deletions(-)
diff --git a/CHANGES.txt b/CHANGES.txt
index 1019b4d5c30..84a20e6c712 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
5.0.3
+ * Correct the default behavior of compareTo() when comparing WIDE and STATIC
PrimaryKeys (CASSANDRA-20238)
* Make sure we can set parameters when configuring CassandraCIDRAuthorizer
(CASSANDRA-20220)
* Add selected SAI index state and query performance metrics to nodetool
tablestats (CASSANDRA-20026)
* Remove v30 and v3X from 5.x in-JVM upgrade tests (CASSANDRA-20103)
diff --git
a/src/java/org/apache/cassandra/index/sai/disk/v1/postings/PostingListRangeIterator.java
b/src/java/org/apache/cassandra/index/sai/disk/v1/postings/PostingListRangeIterator.java
index 4f05e2a1715..813017db8d3 100644
---
a/src/java/org/apache/cassandra/index/sai/disk/v1/postings/PostingListRangeIterator.java
+++
b/src/java/org/apache/cassandra/index/sai/disk/v1/postings/PostingListRangeIterator.java
@@ -89,7 +89,7 @@ public class PostingListRangeIterator extends KeyRangeIterator
@Override
protected void performSkipTo(PrimaryKey nextKey)
{
- if (skipToKey != null && skipToKey.compareTo(nextKey) > 0)
+ if (skipToKey != null && skipToKey.compareTo(nextKey, false) > 0)
return;
skipToKey = nextKey;
@@ -137,7 +137,7 @@ public class PostingListRangeIterator extends
KeyRangeIterator
private boolean exhausted()
{
- return needsSkipping && skipToKey.compareTo(getMaximum()) > 0;
+ return needsSkipping && skipToKey.compareTo(getMaximum(), false) > 0;
}
/**
diff --git
a/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeConcatIterator.java
b/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeConcatIterator.java
index bb83f1ea81c..cd47ff219be 100644
---
a/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeConcatIterator.java
+++
b/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeConcatIterator.java
@@ -59,10 +59,10 @@ public class KeyRangeConcatIterator extends KeyRangeIterator
{
KeyRangeIterator currentIterator = ranges.get(current);
- if (currentIterator.hasNext() &&
currentIterator.peek().compareTo(nextKey) >= 0)
+ if (currentIterator.hasNext() &&
currentIterator.peek().compareTo(nextKey, false) >= 0)
break;
- if (currentIterator.getMaximum().compareTo(nextKey) >= 0)
+ if (currentIterator.getMaximum().compareTo(nextKey, false) >= 0)
{
currentIterator.skipTo(nextKey);
break;
@@ -178,7 +178,7 @@ public class KeyRangeConcatIterator extends KeyRangeIterator
{
min = range.getMinimum();
}
- else if (count > 0 && max.compareTo(range.getMinimum()) > 0)
+ else if (count > 0 && max.compareTo(range.getMinimum(), false)
> 0)
{
throw new
IllegalArgumentException(String.format(MUST_BE_SORTED_ERROR, max,
range.getMinimum()));
}
diff --git
a/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeIntersectionIterator.java
b/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeIntersectionIterator.java
index 5391dd75edb..e820b2fc4b7 100644
---
a/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeIntersectionIterator.java
+++
b/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeIntersectionIterator.java
@@ -74,7 +74,7 @@ public class KeyRangeIntersectionIterator extends
KeyRangeIterator
// compare to other keys only by partition.) This loop continues until
all iterators point to the same key,
// or if we run out of keys on any of them, or if we exceed the
maximum key.
// There is no point in iterating after maximum, because no keys will
match beyond that point.
- while (highestKey != null && highestKey.compareTo(getMaximum()) <= 0)
+ while (highestKey != null && highestKey.compareTo(getMaximum(), false)
<= 0)
{
// Try to advance all iterators to the highest key seen so far.
// Once this inner loop finishes normally, all iterators are
guaranteed to be at the same value.
@@ -83,7 +83,7 @@ public class KeyRangeIntersectionIterator extends
KeyRangeIterator
if (!range.hasNext())
return endOfData();
- if (range.peek().compareTo(highestKey) < 0)
+ if (range.peek().compareTo(highestKey, false) < 0)
{
// If we advance a STATIC key, then we must advance it to
the same partition as the highestKey.
// Advancing a STATIC key to a WIDE key directly (without
throwing away the clustering) would
@@ -95,7 +95,7 @@ public class KeyRangeIntersectionIterator extends
KeyRangeIterator
// We use strict comparison here, since it orders WIDE
primary keys after STATIC primary keys
// in the same partition. When WIDE keys are present, we
want to return them rather than STATIC
// keys to avoid retrieving and post-filtering entire
partitions.
- if (nextKey == null || nextKey.compareToStrict(highestKey)
> 0)
+ if (nextKey == null || nextKey.compareTo(highestKey, true)
> 0)
{
// We jumped over the highest key seen so far, so make
it the new highest key.
highestKey = nextKey;
@@ -105,7 +105,7 @@ public class KeyRangeIntersectionIterator extends
KeyRangeIterator
// Therefore, restart the inner loop in order to
advance the lagging iterators.
continue outer;
}
- assert nextKey.compareTo(highestKey) == 0 :
+ assert nextKey.compareTo(highestKey, false) == 0 :
String.format("Skipped to a key smaller than the
target! " +
"iterator: %s, target key: %s, returned
key: %s", range, highestKey, nextKey);
}
@@ -161,7 +161,7 @@ public class KeyRangeIntersectionIterator extends
KeyRangeIterator
{
if (!range.hasNext())
return null;
- if (range.peek().compareToStrict(max) > 0)
+ if (range.peek().compareTo(max, true) > 0)
max = range.peek();
}
return max;
@@ -394,6 +394,7 @@ public class KeyRangeIntersectionIterator extends
KeyRangeIterator
*/
private static boolean isDisjointInternal(PrimaryKey min, PrimaryKey max,
KeyRangeIterator b)
{
- return min == null || max == null || b.getMaxKeys() == 0 ||
min.compareTo(b.getMaximum()) > 0 || (b.hasNext() && b.peek().compareTo(max) >
0);
+ return min == null || max == null || b.getMaxKeys() == 0
+ || min.compareTo(b.getMaximum(), false) > 0 || (b.hasNext() &&
b.peek().compareTo(max, false) > 0);
}
}
diff --git
a/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeIterator.java
b/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeIterator.java
index 52c390770b2..a4ada8ec576 100644
--- a/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeIterator.java
+++ b/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeIterator.java
@@ -108,10 +108,10 @@ public abstract class KeyRangeIterator extends
AbstractGuavaIterator<PrimaryKey>
if (state == State.DONE)
return;
- if (state == State.READY && next.compareTo(nextKey) >= 0)
+ if (state == State.READY && next.compareTo(nextKey, false) >= 0)
return;
- if (max.compareTo(nextKey) < 0)
+ if (max.compareTo(nextKey, false) < 0)
{
endOfData();
return;
@@ -229,7 +229,7 @@ public abstract class KeyRangeIterator extends
AbstractGuavaIterator<PrimaryKey>
if (a == null) return b;
if (b == null) return a;
- return a.compareToStrict(b) > 0 ? b : a;
+ return a.compareTo(b) > 0 ? b : a;
}
protected static PrimaryKey nullSafeMax(PrimaryKey a, PrimaryKey b)
@@ -237,6 +237,13 @@ public abstract class KeyRangeIterator extends
AbstractGuavaIterator<PrimaryKey>
if (a == null) return b;
if (b == null) return a;
- return a.compareToStrict(b) > 0 ? a : b;
+ // The STATIC key sorts before WIDE keys in its partition, but to
avoid missing rows while
+ // intersecting, the STATIC key must override any WIDE key.
+ if (a.kind() == PrimaryKey.Kind.STATIC && b.kind() ==
PrimaryKey.Kind.WIDE)
+ return a.compareTo(b, false) >= 0 ? a : b;
+ else if (b.kind() == PrimaryKey.Kind.STATIC && a.kind() ==
PrimaryKey.Kind.WIDE)
+ return b.compareTo(a, false) >= 0 ? b : a;
+
+ return a.compareTo(b) > 0 ? a : b;
}
}
diff --git
a/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeListIterator.java
b/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeListIterator.java
index 334e740db87..4bf5d19bc3c 100644
---
a/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeListIterator.java
+++
b/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeListIterator.java
@@ -50,7 +50,7 @@ public class KeyRangeListIterator extends KeyRangeIterator
{
while (keyQueue.hasNext())
{
- if (keyQueue.peek().compareTo(nextKey) >= 0)
+ if (keyQueue.peek().compareTo(nextKey, false) >= 0)
break;
keyQueue.next();
}
diff --git
a/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeUnionIterator.java
b/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeUnionIterator.java
index 7bf73ab5345..340333f2af2 100644
---
a/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeUnionIterator.java
+++
b/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeUnionIterator.java
@@ -61,7 +61,7 @@ public class KeyRangeUnionIterator extends KeyRangeIterator
{
PrimaryKey peeked = range.peek();
- int cmp = candidateKey.compareTo(peeked);
+ int cmp = candidateKey.compareTo(peeked, false);
if (cmp == 0)
{
@@ -91,7 +91,7 @@ public class KeyRangeUnionIterator extends KeyRangeIterator
// Consume the remaining values equal to the candidate key:
candidate.next();
}
- while (candidate.hasNext() &&
candidate.peek().compareTo(candidateKey) == 0);
+ while (candidate.hasNext() &&
candidate.peek().compareTo(candidateKey, false) == 0);
}
return candidateKey;
diff --git
a/src/java/org/apache/cassandra/index/sai/memory/InMemoryKeyRangeIterator.java
b/src/java/org/apache/cassandra/index/sai/memory/InMemoryKeyRangeIterator.java
index d502afebddd..5131965278f 100644
---
a/src/java/org/apache/cassandra/index/sai/memory/InMemoryKeyRangeIterator.java
+++
b/src/java/org/apache/cassandra/index/sai/memory/InMemoryKeyRangeIterator.java
@@ -70,7 +70,7 @@ public class InMemoryKeyRangeIterator extends KeyRangeIterator
if (uniqueKeys)
return key;
- if (lastKey == null || lastKey.compareTo(key) != 0)
+ if (lastKey == null || lastKey.compareTo(key, false) != 0)
{
next = key;
lastKey = key;
@@ -87,7 +87,7 @@ public class InMemoryKeyRangeIterator extends KeyRangeIterator
while (!keys.isEmpty())
{
PrimaryKey key = keys.peek();
- if (key.compareTo(nextKey) >= 0)
+ if (key.compareTo(nextKey, false) >= 0)
break;
// consume smaller key
diff --git
a/src/java/org/apache/cassandra/index/sai/plan/StorageAttachedIndexSearcher.java
b/src/java/org/apache/cassandra/index/sai/plan/StorageAttachedIndexSearcher.java
index b235c251ef8..858242006aa 100644
---
a/src/java/org/apache/cassandra/index/sai/plan/StorageAttachedIndexSearcher.java
+++
b/src/java/org/apache/cassandra/index/sai/plan/StorageAttachedIndexSearcher.java
@@ -316,7 +316,7 @@ public class StorageAttachedIndexSearcher implements
Index.Searcher
*/
private boolean isWithinUpperBound(PrimaryKey key)
{
- return lastPrimaryKey.token().isMinimum() ||
lastPrimaryKey.compareTo(key) >= 0;
+ return lastPrimaryKey.token().isMinimum() ||
lastPrimaryKey.compareTo(key, false) >= 0;
}
/**
diff --git a/src/java/org/apache/cassandra/index/sai/utils/PrimaryKey.java
b/src/java/org/apache/cassandra/index/sai/utils/PrimaryKey.java
index 4e5081ad0c0..3cc50330445 100644
--- a/src/java/org/apache/cassandra/index/sai/utils/PrimaryKey.java
+++ b/src/java/org/apache/cassandra/index/sai/utils/PrimaryKey.java
@@ -269,10 +269,9 @@ public interface PrimaryKey extends
Comparable<PrimaryKey>, ByteComparable
// Otherwise, if the other key is token only we can only
compare tokens
// This is used by the ResultRetriever to skip to the current
key range start position
// during result retrieval.
- if ((cmp != 0) || o.kind() == Kind.TOKEN)
+ if (cmp != 0 || o.kind() == Kind.TOKEN)
return cmp;
- // Finally compare the partition keys
return partitionKey().compareTo(o.partitionKey());
}
@@ -320,24 +319,25 @@ public interface PrimaryKey extends
Comparable<PrimaryKey>, ByteComparable
}
@Override
- public int compareTo(PrimaryKey o)
+ public int compareTo(PrimaryKey o, boolean strict)
{
int cmp = super.compareTo(o);
if (cmp != 0 || o.kind() == Kind.TOKEN || o.kind() ==
Kind.SKINNY)
return cmp;
- // At this point the other key is in the same partition as
this static key so is equal to it. This
- // has to be the case because otherwise, intersections between
static column indexes and ordinary
- // indexes will fail.
+
+ // If we're comparing strictly, order this STATIC key before a
WIDE key, as this corresponds to the
+ // order of the corresponding row IDs in an on-disk postings
list. If we're not being strict, treat
+ // the keys as being equal, given they are in the same
partition.
+ if (strict && o.kind() == Kind.WIDE)
+ return -1;
+
return 0;
}
@Override
- public int compareToStrict(PrimaryKey o)
+ public int compareTo(PrimaryKey o)
{
- int cmp = compareTo(o);
- // Always order this STATIC key before a WIDE key in the same
partition, as this corresponds to the
- // order of the corresponding row IDs in an on-disk postings
list.
- return o.kind() == Kind.WIDE && cmp == 0 ? -1 : cmp;
+ return compareTo(o, true);
}
@Override
@@ -395,25 +395,25 @@ public interface PrimaryKey extends
Comparable<PrimaryKey>, ByteComparable
}
@Override
- public int compareTo(PrimaryKey o)
+ public int compareTo(PrimaryKey o, boolean strict)
{
int cmp = super.compareTo(o);
if (cmp != 0 || o.kind() == Kind.TOKEN || o.kind() ==
Kind.SKINNY)
return cmp;
- // At this point this key is in the same partition as the
other key so if the other key is a static
- // key then it must be equal to it. See comment in the
compareTo for static keys above.
+
if (o.kind() == Kind.STATIC)
- return 0;
+ // If we're comparing strictly, order this WIDE key after
the STATIC key, as this corresponds to the
+ // order of the corresponding row IDs in an on-disk
postings list. If we're not being strict, treat
+ // the keys as being equal, given they are in the same
partition.
+ return strict ? 1 : 0;
+
return clusteringComparator.compare(clustering(),
o.clustering());
}
@Override
- public int compareToStrict(PrimaryKey o)
+ public int compareTo(PrimaryKey o)
{
- int cmp = compareTo(o);
- // Always order this WIDE key before a STATIC key in the same
partition, as this corresponds to the
- // order of the corresponding row IDs in an on-disk postings
list.
- return o.kind() == Kind.STATIC && cmp == 0 ? 1 : cmp;
+ return compareTo(o, true);
}
@Override
@@ -490,8 +490,8 @@ public interface PrimaryKey extends Comparable<PrimaryKey>,
ByteComparable
throw new UnsupportedOperationException("Only STATIC and WIDE keys can
be converted to STATIC");
}
- default int compareToStrict(PrimaryKey o)
+ default int compareTo(PrimaryKey key, boolean strict)
{
- return compareTo(o);
+ return compareTo(key);
}
}
diff --git
a/test/unit/org/apache/cassandra/index/sai/cql/CompositePartitionKeyIndexTest.java
b/test/unit/org/apache/cassandra/index/sai/cql/CompositePartitionKeyIndexTest.java
index 99fcdf8319d..f384ca74e44 100644
---
a/test/unit/org/apache/cassandra/index/sai/cql/CompositePartitionKeyIndexTest.java
+++
b/test/unit/org/apache/cassandra/index/sai/cql/CompositePartitionKeyIndexTest.java
@@ -17,13 +17,59 @@
*/
package org.apache.cassandra.index.sai.cql;
+import java.math.BigInteger;
+
import org.junit.Test;
import org.apache.cassandra.cql3.restrictions.StatementRestrictions;
+import org.apache.cassandra.db.marshal.SimpleDateType;
+import org.apache.cassandra.db.marshal.TimeType;
import org.apache.cassandra.index.sai.SAITester;
public class CompositePartitionKeyIndexTest extends SAITester
{
+ @Test
+ public void testIntersectionWithStaticOverlap() throws Throwable
+ {
+ createTable("CREATE TABLE %s (pk0 int, pk1 int, ck0 int, s1 int
static, v0 int, PRIMARY KEY((pk0, pk1), ck0))");
+ createIndex("CREATE INDEX ON %s(pk0) USING 'sai'");
+
+ execute("UPDATE %s USING TIMESTAMP 1 SET s1 = 0, v0 = 0 WHERE pk0 = 0
AND pk1 = 1 AND ck0 = 0");
+ execute("DELETE FROM %s USING TIMESTAMP 2 WHERE pk0 = 0 AND pk1 = 1");
+
+ // If the STATIC and WIDE PrimaryKey objects in this partition are not
compared strictly, the new WIDE key
+ // will be interpreted as a duplicate and not added to the
Memtable-adjacent index. Then, on flush, the row
+ // corresponding to that WIDE key will be missing from the index.
+ execute("UPDATE %s USING TIMESTAMP 3 SET v0 = 1 WHERE pk0 = 0 AND pk1
= 1 AND ck0 = 1");
+
+ beforeAndAfterFlush(() -> assertRows(execute("SELECT * FROM %s WHERE
v0 = 1 AND pk0 = 0 ALLOW FILTERING"), row(0, 1, 1, null, 1)));
+ }
+
+ @Test
+ public void testIntersectionWithStaticUpdate() throws Throwable
+ {
+ createTable("CREATE TABLE %s (pk0 time, pk1 varint, ck0 date, s0
boolean static, s1 text static, v0 boolean, PRIMARY KEY ((pk0, pk1), ck0))");
+ createIndex("CREATE INDEX tbl_pk0 ON %s(pk0) USING 'sai'");
+ createIndex("CREATE INDEX tbl_s0 ON %s(s0) USING 'sai'");
+
+ // pk0: 23:15:13.897962392 -> (static clustering, -1296648-01-08)
+ // s0: false -> (static clustering, -1296648-01-08)
+ execute("INSERT INTO %s (pk0, pk1, ck0, s0, s1, v0) VALUES
('23:15:13.897962392', -2272, '-1296648-01-08', false, 'ᕊଖꥬ㨢걲映㚃', false)");
+
+ // pk0: 23:15:13.897962392 -> (static clustering (existing),
-1296648-01-08, -1306427-11-21)
+ // s0: true -> (static clustering, -1306427-11-21)
+ execute("UPDATE %s SET s0=true, s1='뾕⌒籖' + '鋿紞', v0=true WHERE pk0 =
'23:15:13.897962392' AND pk1 = -2272 AND ck0 = '-1306427-11-21'");
+
+ // Since the value of "true" is never mapped to the clustering
-1296648-01-08, the intersection must begin
+ // at the STATIC key. Otherwise, we will miss the WIDE key for
clustering -1296648-01-08.
+ beforeAndAfterFlush(() ->
+ assertRows(execute("SELECT * FROM %s WHERE s0 =
true AND pk0 = '23:15:13.897962392'"),
+
row(TimeType.instance.fromString("23:15:13.897962392"), new BigInteger("-2272"),
+
SimpleDateType.instance.fromString("-1306427-11-21"), true, "뾕⌒籖鋿紞", true),
+
row(TimeType.instance.fromString("23:15:13.897962392"), new BigInteger("-2272"),
+
SimpleDateType.instance.fromString("-1296648-01-08"), true, "뾕⌒籖鋿紞", false)));
+ }
+
@Test
public void testCompositePartitionIndex() throws Throwable
{
diff --git
a/test/unit/org/apache/cassandra/index/sai/iterators/LongIterator.java
b/test/unit/org/apache/cassandra/index/sai/iterators/LongIterator.java
index 45f655456a2..5bbc14cdaa8 100644
--- a/test/unit/org/apache/cassandra/index/sai/iterators/LongIterator.java
+++ b/test/unit/org/apache/cassandra/index/sai/iterators/LongIterator.java
@@ -63,8 +63,8 @@ public class LongIterator extends KeyRangeIterator
{
for ( ; currentIdx < keys.size(); currentIdx++)
{
- PrimaryKey token = keys.get(currentIdx);
- if (token.compareTo(nextKey) >= 0)
+ PrimaryKey key = keys.get(currentIdx);
+ if (key.compareTo(nextKey, false) >= 0)
break;
}
}
diff --git a/test/unit/org/apache/cassandra/index/sai/utils/PrimaryKeyTest.java
b/test/unit/org/apache/cassandra/index/sai/utils/PrimaryKeyTest.java
index 51edc67389c..c64372feab0 100644
--- a/test/unit/org/apache/cassandra/index/sai/utils/PrimaryKeyTest.java
+++ b/test/unit/org/apache/cassandra/index/sai/utils/PrimaryKeyTest.java
@@ -372,14 +372,9 @@ public class PrimaryKeyTest extends
AbstractPrimaryKeyTester
assertCompareToAndEquals(key, key, 0);
assertCompareToAndEquals(tokenOnlyKey, tokenOnlyKey, 0);
- // StaticPrimaryKey is a special case. All other keys in the
partition are equal to it
- boolean staticComparison = key.kind() == PrimaryKey.Kind.STATIC;
- boolean inPartition = staticComparison;
for (int comparisonIndex = index + 1; comparisonIndex <
keys.length; comparisonIndex++)
{
- if (staticComparison && keys[comparisonIndex].kind() ==
PrimaryKey.Kind.STATIC)
- inPartition = false;
- assertCompareToAndEquals(key, keys[comparisonIndex],
inPartition ? 0 : -1);
+ assertCompareToAndEquals(key, keys[comparisonIndex], -1);
assertCompareToAndEquals(tokenOnlyKey, keys[comparisonIndex],
tokenOnlyKey.token().equals(keys[comparisonIndex].token()) ? 0 : -1);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]