From c7d2e97da04e09dd908b1ea238a8498cfe5a3edb Mon Sep 17 00:00:00 2001 From: David Capwell Date: Mon, 8 Aug 2022 10:37:30 -0700 Subject: [PATCH] NPE bug in streaming checking if SSTable is being repaired patch by David Capwell; reviewed by Marcus Eriksson for CASSANDRA-17801 --- CHANGES.txt | 1 + .../cassandra/db/streaming/CassandraStreamManager.java | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 64ee3e800d..e33cd45a78 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 4.2 + * NPE bug in streaming checking if SSTable is being repaired (CASSANDRA-17801) * Users of NativeLibrary should handle lack of JNA appropriately when running in client mode (CASSANDRA-17794) * Warn on unknown directories found in system keyspace directory rather than kill node during startup checks (CASSANDRA-17777) * Log duplicate rows sharing a partition key found in verify and scrub (CASSANDRA-17789) diff --git a/src/java/org/apache/cassandra/db/streaming/CassandraStreamManager.java b/src/java/org/apache/cassandra/db/streaming/CassandraStreamManager.java index 46cf253d4d..8ca7ac5dac 100644 --- a/src/java/org/apache/cassandra/db/streaming/CassandraStreamManager.java +++ b/src/java/org/apache/cassandra/db/streaming/CassandraStreamManager.java @@ -30,6 +30,7 @@ import org.apache.cassandra.db.lifecycle.View; import org.apache.cassandra.dht.Range; import org.apache.cassandra.dht.Token; import org.apache.cassandra.io.sstable.format.SSTableReader; +import org.apache.cassandra.io.sstable.metadata.StatsMetadata; import org.apache.cassandra.locator.RangesAtEndpoint; import org.apache.cassandra.locator.Replica; import org.apache.cassandra.service.ActiveRepairService; @@ -105,7 +106,10 @@ public class CassandraStreamManager implements TableStreamManager } else { - predicate = s -> s.isPendingRepair() && s.getSSTableMetadata().pendingRepair.equals(pendingRepair); + predicate = s -> { + StatsMetadata sstableMetadata = s.getSSTableMetadata(); + return sstableMetadata.pendingRepair != ActiveRepairService.NO_PENDING_REPAIR && sstableMetadata.pendingRepair.equals(pendingRepair); + }; } for (Range keyRange : keyRanges)