You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by if...@apache.org on 2024/08/28 15:26:37 UTC
(cassandra) 01/04: Avoid ClassCastException when verifying tables with reversed partitioner
This is an automated email from the ASF dual-hosted git repository.
ifesdjeen pushed a commit to branch cep-15-accord
in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit 139f324969a564d32bd88e36a7abbc7d2bbbc8f0
Author: Marcus Eriksson <ma...@apache.org>
AuthorDate: Thu Apr 25 19:44:39 2024 +0200
Avoid ClassCastException when verifying tables with reversed partitioner
Patch by Marcus Eriksson; reviewed by Sam Tunnicliffe for
CASSANDRA-19710
---
.../cassandra/db/compaction/CompactionManager.java | 6 ++++--
.../io/sstable/format/SortedTableVerifier.java | 4 +++-
.../org/apache/cassandra/io/sstable/VerifyTest.java | 18 ++++++++++++++++++
3 files changed, 25 insertions(+), 3 deletions(-)
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
index 6899d58c60..edf6df5c99 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
@@ -99,6 +99,7 @@ import org.apache.cassandra.io.sstable.metadata.StatsMetadata;
import org.apache.cassandra.io.util.File;
import org.apache.cassandra.io.util.FileUtils;
import org.apache.cassandra.locator.InetAddressAndPort;
+import org.apache.cassandra.locator.MetaStrategy;
import org.apache.cassandra.locator.RangesAtEndpoint;
import org.apache.cassandra.locator.Replica;
import org.apache.cassandra.metrics.CompactionMetrics;
@@ -628,8 +629,9 @@ public class CompactionManager implements CompactionManagerMBean, ICompactionMan
logger.info("Cleanup cannot run before a node has joined the ring");
return AllSSTableOpStatus.ABORTED;
}
- if (cfStore.keyspace.getMetadata().params.replication.isMeta())
- return AllSSTableOpStatus.SUCCESSFUL; // todo - we probably want to be able to cleanup MetaStrategy keyspaces
+ if (cfStore.getPartitioner() == MetaStrategy.partitioner)
+ return AllSSTableOpStatus.SUCCESSFUL; // todo - we probably want to be able to cleanup MetaStrategy keyspaces. When we fix this, also fix
+ // SortedTableVerifier to make sure system_cluster_metadata is empty for non-CMS instances
final boolean hasIndexes = cfStore.indexManager.hasIndexes();
// if local ranges is empty, it means no data should remain
diff --git a/src/java/org/apache/cassandra/io/sstable/format/SortedTableVerifier.java b/src/java/org/apache/cassandra/io/sstable/format/SortedTableVerifier.java
index f68e1c9684..eb6231f9e7 100644
--- a/src/java/org/apache/cassandra/io/sstable/format/SortedTableVerifier.java
+++ b/src/java/org/apache/cassandra/io/sstable/format/SortedTableVerifier.java
@@ -56,6 +56,7 @@ import org.apache.cassandra.io.sstable.metadata.MetadataType;
import org.apache.cassandra.io.util.DataIntegrityMetadata;
import org.apache.cassandra.io.util.FileUtils;
import org.apache.cassandra.io.util.RandomAccessReader;
+import org.apache.cassandra.locator.MetaStrategy;
import org.apache.cassandra.service.ActiveRepairService;
import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.utils.ByteBufferUtil;
@@ -152,7 +153,8 @@ public abstract class SortedTableVerifier<R extends SSTableReaderWithFilter> imp
verifyBloomFilter();
- if (options.checkOwnsTokens && !isOffline && !(cfs.getPartitioner() instanceof LocalPartitioner))
+ // TODO: when making it possible to clean up system_cluster_metadata, we should make sure that non-cms members don't have any sstables there
+ if (options.checkOwnsTokens && !isOffline && !(cfs.getPartitioner() instanceof LocalPartitioner) && !(cfs.getPartitioner() == MetaStrategy.partitioner))
{
if (verifyOwnedRanges() == 0)
return;
diff --git a/test/unit/org/apache/cassandra/io/sstable/VerifyTest.java b/test/unit/org/apache/cassandra/io/sstable/VerifyTest.java
index c4a8a07aac..5493356a2e 100644
--- a/test/unit/org/apache/cassandra/io/sstable/VerifyTest.java
+++ b/test/unit/org/apache/cassandra/io/sstable/VerifyTest.java
@@ -43,6 +43,7 @@ import org.apache.cassandra.batchlog.Batch;
import org.apache.cassandra.batchlog.BatchlogManager;
import org.apache.cassandra.cache.ChunkCache;
import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.cql3.QueryProcessor;
import org.apache.cassandra.db.BufferDecoratedKey;
import org.apache.cassandra.db.ColumnFamilyStore;
import org.apache.cassandra.db.DecoratedKey;
@@ -763,6 +764,23 @@ public class VerifyTest
}
}
+ @Test
+ public void testVerifyReversedPartitioner()
+ {
+ for (long i = 0; i < 10; i++)
+ QueryProcessor.executeInternal("insert into system.local_metadata_log (epoch) values (?)", i);
+ ColumnFamilyStore cfs = Keyspace.open("system").getColumnFamilyStore("local_metadata_log");
+ cfs.forceBlockingFlush(ColumnFamilyStore.FlushReason.UNIT_TESTS);
+ assertFalse(cfs.getLiveSSTables().isEmpty());
+ for (SSTableReader sstable : cfs.getLiveSSTables())
+ {
+ try (IVerifier verifier = sstable.getVerifier(cfs, new OutputHandler.LogOutput(), false, IVerifier.options()
+ .checkOwnsTokens(true).build()))
+ {
+ verifier.verify();
+ }
+ }
+ }
private DecoratedKey dk(long l)
{
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org