From b17e4ee88aca91e6446598b23cbeb3d6a58528fd Mon Sep 17 00:00:00 2001 From: Ariel Weisberg Date: Fri, 14 Mar 2025 14:01:38 -0400 Subject: [PATCH] Fix SSTableReader interval mock in UnifiedCompactionStrategyTest patch by Ariel Weisberg; reviewed by Caleb Rackliffe for CASSANDRA-20437 --- .../cassandra/io/sstable/format/SSTableReader.java | 11 +++++++++-- .../db/compaction/UnifiedCompactionStrategyTest.java | 4 ++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java b/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java index 75272a0b5f..8a554ae2c5 100644 --- a/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java +++ b/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java @@ -179,7 +179,7 @@ public abstract class SSTableReader extends SSTable implements UnfilteredSource, public static final Comparator maxTimestampAscending = Comparator.comparingLong(SSTableReader::getMaxTimestamp); public static final Comparator maxTimestampDescending = maxTimestampAscending.reversed(); - private static final TimeUUID.Generator.Factory UNIQUE_IDENTIFIER_FACTORY = new TimeUUID.Generator.Factory() + public static final TimeUUID.Generator.Factory UNIQUE_IDENTIFIER_FACTORY = new TimeUUID.Generator.Factory() { @Override public UniqueIdentifier atUnixMicrosWithLsb(long unixMicros, long clockSeqAndNode) @@ -197,6 +197,7 @@ public abstract class SSTableReader extends SSTable implements UnfilteredSource, super(unixMicros, clockSeqAndNode); } } + public final UniqueIdentifier instanceId = TimeUUID.Generator.nextTimeUUID(UNIQUE_IDENTIFIER_FACTORY); public static final Comparator firstKeyComparator = (o1, o2) -> o1.getFirst().compareTo(o2.getFirst()); @@ -1769,11 +1770,17 @@ public abstract class SSTableReader extends SSTable implements UnfilteredSource, boolean isOffline, IVerifier.Options options); + public UniqueIdentifier instanceId() + { + return instanceId; + } + @Override public int compareTo(SSTableReader other) { // Used in IntervalTree with the expecation that compareTo uniquely identifies an SSTableReader - return instanceId.compareTo(other.instanceId); + // Use accessor for instanceId for mocks + return instanceId().compareTo(other.instanceId()); } /** diff --git a/test/unit/org/apache/cassandra/db/compaction/UnifiedCompactionStrategyTest.java b/test/unit/org/apache/cassandra/db/compaction/UnifiedCompactionStrategyTest.java index 82fee2144c..9ca29cb190 100644 --- a/test/unit/org/apache/cassandra/db/compaction/UnifiedCompactionStrategyTest.java +++ b/test/unit/org/apache/cassandra/db/compaction/UnifiedCompactionStrategyTest.java @@ -58,11 +58,13 @@ import org.apache.cassandra.utils.FBUtilities; import org.apache.cassandra.utils.Interval; import org.apache.cassandra.utils.Overlaps; import org.apache.cassandra.utils.Pair; +import org.apache.cassandra.utils.TimeUUID; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; +import static org.apache.cassandra.io.sstable.format.SSTableReader.UNIQUE_IDENTIFIER_FACTORY; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; @@ -851,6 +853,8 @@ public class UnifiedCompactionStrategyTest when(ret.getFirst()).thenReturn(first); when(ret.getLast()).thenReturn(last); when(ret.getInterval()).thenReturn(new Interval<>(first, last, ret)); + when(ret.instanceId()).thenReturn(TimeUUID.Generator.nextTimeUUID(UNIQUE_IDENTIFIER_FACTORY)); + when(ret.compareTo(any())).thenCallRealMethod(); when(ret.isMarkedSuspect()).thenReturn(false); when(ret.isRepaired()).thenReturn(false); when(ret.getRepairedAt()).thenReturn(repairedAt);