Add UUID to nodetool import logging
Patch by Marcus Eriksson; reviewed by Josh McKenzie, Jordan West, and Sam Tunnicliffe for CASSANDRA-17800
Co-authored-by: Marcus Eriksson <marcuse@apache.org>
Co-authored-by: Josh McKenzie <jmckenzie@apache.org>
diff --git a/src/java/org/apache/cassandra/db/SSTableImporter.java b/src/java/org/apache/cassandra/db/SSTableImporter.java
index 5949559..83b4e7b 100644
--- a/src/java/org/apache/cassandra/db/SSTableImporter.java
+++ b/src/java/org/apache/cassandra/db/SSTableImporter.java
@@ -25,6 +25,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.UUID;
import com.google.common.annotations.VisibleForTesting;
@@ -69,8 +70,8 @@
@VisibleForTesting
synchronized List<String> importNewSSTables(Options options)
{
- logger.info("Loading new SSTables for {}/{}: {}",
- cfs.keyspace.getName(), cfs.getTableName(), options);
+ UUID importID = UUID.randomUUID();
+ logger.info("[{}] Loading new SSTables for {}/{}: {}", importID, cfs.keyspace.getName(), cfs.getTableName(), options);
List<Pair<Directories.SSTableLister, String>> listers = getSSTableListers(options.srcPaths);
@@ -99,12 +100,12 @@
{
if (dir != null)
{
- logger.error("Failed verifying sstable {} in directory {}", descriptor, dir, t);
+ logger.error("[{}] Failed verifying sstable {} in directory {}", importID, descriptor, dir, t);
failedDirectories.add(dir);
}
else
{
- logger.error("Failed verifying sstable {}", descriptor, t);
+ logger.error("[{}] Failed verifying sstable {}", importID, descriptor, t);
throw new RuntimeException("Failed verifying sstable "+descriptor, t);
}
break;
@@ -144,7 +145,7 @@
newSSTablesPerDirectory.forEach(s -> s.selfRef().release());
if (dir != null)
{
- logger.error("Failed importing sstables in directory {}", dir, t);
+ logger.error("[{}] Failed importing sstables in directory {}", importID, dir, t);
failedDirectories.add(dir);
if (options.copyData)
{
@@ -160,7 +161,7 @@
}
else
{
- logger.error("Failed importing sstables from data directory - renamed sstables are: {}", movedSSTables);
+ logger.error("[{}] Failed importing sstables from data directory - renamed sstables are: {}", importID, movedSSTables);
throw new RuntimeException("Failed importing sstables", t);
}
}
@@ -170,11 +171,13 @@
if (newSSTables.isEmpty())
{
- logger.info("No new SSTables were found for {}/{}", cfs.keyspace.getName(), cfs.getTableName());
+ logger.info("[{}] No new SSTables were found for {}/{}", importID, cfs.keyspace.getName(), cfs.getTableName());
return failedDirectories;
}
- logger.info("Loading new SSTables and building secondary indexes for {}/{}: {}", cfs.keyspace.getName(), cfs.getTableName(), newSSTables);
+ logger.info("[{}] Loading new SSTables and building secondary indexes for {}/{}: {}", importID, cfs.keyspace.getName(), cfs.getTableName(), newSSTables);
+ if (logger.isTraceEnabled())
+ logLeveling(importID, newSSTables);
try (Refs<SSTableReader> refs = Refs.ref(newSSTables))
{
@@ -187,10 +190,32 @@
}
- logger.info("Done loading load new SSTables for {}/{}", cfs.keyspace.getName(), cfs.getTableName());
+ logger.info("[{}] Done loading load new SSTables for {}/{}", importID, cfs.keyspace.getName(), cfs.getTableName());
return failedDirectories;
}
+ private void logLeveling(UUID importID, Set<SSTableReader> newSSTables)
+ {
+ StringBuilder sb = new StringBuilder();
+ for (SSTableReader sstable : cfs.getSSTables(SSTableSet.CANONICAL))
+ sb.append(formatMetadata(sstable));
+ logger.debug("[{}] Current sstables: {}", importID, sb);
+ sb = new StringBuilder();
+ for (SSTableReader sstable : newSSTables)
+ sb.append(formatMetadata(sstable));
+ logger.debug("[{}] New sstables: {}", importID, sb);
+ }
+
+ private static String formatMetadata(SSTableReader sstable)
+ {
+ return String.format("{[%s, %s], %d, %s, %d}",
+ sstable.first.getToken(),
+ sstable.last.getToken(),
+ sstable.getSSTableLevel(),
+ sstable.isRepaired(),
+ sstable.onDiskLength());
+ }
+
/**
* Opens the sstablereader described by descriptor and figures out the correct directory for it based
* on the first token