From bcd76eae43f2ba6c8a7eea6f9a59820f00b57073 Mon Sep 17 00:00:00 2001 From: Aparna Naik Date: Sun, 31 May 2026 17:56:21 -0700 Subject: [PATCH] Fix mutation_tracking_shards by-key query scanning all shards --- .../db/virtual/MutationTrackingTables.java | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/java/org/apache/cassandra/db/virtual/MutationTrackingTables.java b/src/java/org/apache/cassandra/db/virtual/MutationTrackingTables.java index 406693d23e81..07f7cecf81ca 100644 --- a/src/java/org/apache/cassandra/db/virtual/MutationTrackingTables.java +++ b/src/java/org/apache/cassandra/db/virtual/MutationTrackingTables.java @@ -18,6 +18,7 @@ package org.apache.cassandra.db.virtual; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -133,9 +134,8 @@ public static class MutationTrackingShardsTable extends AbstractVirtualTable .build()); } - private void addShardRows(Shard shard, SimpleDataSet result) + private void addShardRows(Shard.DebugInfo shardDebugInfo, SimpleDataSet result) { - Shard.DebugInfo shardDebugInfo = shard.getDebugInfo(); for (Map.Entry entry : shardDebugInfo.logs.entrySet()) { CoordinatorLogId logId = entry.getKey(); @@ -159,7 +159,7 @@ public DataSet data() for (Shard shard : MutationTrackingService.instance().getShards()) { - addShardRows(shard, result); + addShardRows(shard.getDebugInfo(), result); } return result; @@ -170,16 +170,12 @@ public DataSet data(DecoratedKey key) { String keyspaceName = UTF8Type.instance.compose(key.getKey()); SimpleDataSet result = new SimpleDataSet(metadata()); - - for (Shard shard : MutationTrackingService.instance().getShards()) - { - Shard.DebugInfo debugInfo = shard.getDebugInfo(); - if (!debugInfo.keyspace.equals(keyspaceName)) - continue; - - addShardRows(shard, result); - } - + + List shards = new ArrayList<>(); + MutationTrackingService.instance().forEachShardInKeyspace(keyspaceName, shards::add); + for (Shard shard : shards) + addShardRows(shard.getDebugInfo(), result); + return result; } }