ninja: revert count output and changed fields in SSTableMetadataViewer

this patch also fixes incorrect visualisation of SSTable min/max local deletion time when no
tombstones are present in a SSTable

patch by Stefan Miklosovic; reviewed by Marcus Eriksson and Brandon Williams for CASSANDRA-18639
This commit is contained in:
Stefan Miklosovic 2023-07-07 14:43:41 +02:00
parent c5ebc2243c
commit e27ba0ea34
No known key found for this signature in database
GPG Key ID: 32F35CB2F546D93E
2 changed files with 38 additions and 31 deletions

View File

@ -40,11 +40,11 @@ $ sstablemetadata /var/lib/cassandra/data/keyspace1/standard1-f6845640a6cb11e8b6
SSTable: /var/lib/cassandra/data/keyspace1/standard1-f6845640a6cb11e8b6836d2c86545d91/mc-1-big SSTable: /var/lib/cassandra/data/keyspace1/standard1-f6845640a6cb11e8b6836d2c86545d91/mc-1-big
Partitioner: org.apache.cassandra.dht.Murmur3Partitioner Partitioner: org.apache.cassandra.dht.Murmur3Partitioner
Bloom Filter FP chance: 0.010000 Bloom Filter FP chance: 0.010000
Minimum timestamp: 06/28/2023 15:15:04 (1687979704767589) Minimum timestamp: 07/08/2023 09:11:52 (1688800312685792)
Maximum timestamp: 06/28/2023 15:15:09 (1687979709601420) Maximum timestamp: 07/08/2023 09:12:03 (1688800323542149)
Duration: Days: 0 Hours: 0 Minutes: 0 Seconds: 4 Duration: Days: 0 Hours: 0 Minutes: 0 Seconds: 10
SSTable min local deletion time: 08/17/292278994 02:12:55 (9223372036854775807) SSTable min local deletion time: 07/08/2023 09:11:52 (1688800312)
SSTable max local deletion time: 08/17/292278994 02:12:55 (9223372036854775807) SSTable max local deletion time: 07/08/2023 09:12:03 (1688800323)
Compressor: org.apache.cassandra.io.compress.LZ4Compressor Compressor: org.apache.cassandra.io.compress.LZ4Compressor
Compression ratio: 0.553999337227618 Compression ratio: 0.553999337227618
TTL min: 86400 TTL min: 86400
@ -263,6 +263,32 @@ $ sstablemetadata --gc_grace_seconds 5000 /var/lib/cassandra/data/keyspace1/stan
Estimated droppable tombstones: 0.0 Estimated droppable tombstones: 0.0
.... ....
== Scanning of a table
It is possible to specify `--scan` option to get additional statistics about a table which might be time-consuming.
Example
....
sstablemetadata -s /var/lib/cassandra/data/data/ks/tb-dbead8501c9511ee805bb3deafc4499b/nc-1-big-Data.db
....
This gives you statistics such as:
....
Size: 120
Partitions: 2
Rows: 5
Tombstones: 0
Cells: 5
Widest Partitions:
[2] 3
[1] 2
Largest Partitions:
[2] 147 (147 B)
[1] 98 (98 B)
....
== Explanation of each value printed above == Explanation of each value printed above
|=== |===
@ -279,8 +305,7 @@ timestamp of any entry in this sstable, in epoch microseconds
|Maximum |Maximum
timestamp |maximum timestamp of any entry in this sstable, in epoch timestamp |maximum timestamp of any entry in this sstable, in epoch
microseconds microseconds
|Duration |Difference between Maximum timestamp |Duration |Difference between Maximum timestamp and Minimum timestamp
and Minimum timestamp
|SSTable min local deletion time |minimum timestamp of |SSTable min local deletion time |minimum timestamp of
deletion date, based on TTL, in epoch seconds deletion date, based on TTL, in epoch seconds
|SSTable max local deletion |SSTable max local deletion
@ -302,10 +327,9 @@ sstable, if leveled compaction (LCS) is used
this sstable was marked as repaired via sstablerepairedset, in epoch this sstable was marked as repaired via sstablerepairedset, in epoch
milliseconds milliseconds
|Replay positions covered |the interval of time and commitlog |Replay positions covered |the interval of time and commitlog
positions related to this sstable positions related to this sstable
|Total Columns Cells |number of cells in the table |totalColumnsSet |number of cells in the table
|Total Rows |number of rows in the table |totalRows |number of rows in the table
|Total Partitions |total number of partitions
|Estimated tombstone drop |Estimated tombstone drop
times |approximate number of rows that will expire, ordered by epoch times |approximate number of rows that will expire, ordered by epoch
seconds seconds

View File

@ -71,8 +71,6 @@ import static org.apache.cassandra.tools.Util.WHITE;
import static org.apache.cassandra.utils.Clock.Global.currentTimeMillis; import static org.apache.cassandra.utils.Clock.Global.currentTimeMillis;
import static org.apache.commons.lang3.time.DurationFormatUtils.formatDurationWords; import static org.apache.commons.lang3.time.DurationFormatUtils.formatDurationWords;
import org.apache.cassandra.io.sstable.KeyIterator;
/** /**
* Shows the contents of sstable metadata * Shows the contents of sstable metadata
*/ */
@ -115,7 +113,7 @@ public class SSTableMetadataViewer
public static String deletion(long time) public static String deletion(long time)
{ {
if (time == 0 || time == Integer.MAX_VALUE) if (time == 0 || time == Long.MAX_VALUE)
{ {
return "no tombstones"; return "no tombstones";
} }
@ -323,20 +321,6 @@ public class SSTableMetadataViewer
CompactionMetadata compaction = statsComponent.compactionMetadata(); CompactionMetadata compaction = statsComponent.compactionMetadata();
SerializationHeader.Component header = statsComponent.serializationHeader(); SerializationHeader.Component header = statsComponent.serializationHeader();
Class<? extends ICompressor> compressorClass = null; Class<? extends ICompressor> compressorClass = null;
TableMetadata metadata = Util.metadataFromSSTable(descriptor);
SSTableReader sstable = SSTableReader.openNoValidation(null, descriptor, TableMetadataRef.forOfflineTools(metadata));
int count = 0;
try (KeyIterator iter = sstable.keyIterator())
{
while (iter.hasNext())
{
iter.next();
count += 1;
}
}
try (CompressionMetadata compression = CompressionInfoComponent.loadIfExists(descriptor)) try (CompressionMetadata compression = CompressionInfoComponent.loadIfExists(descriptor))
{ {
compressorClass = compression != null ? compression.compressor().getClass() : null; compressorClass = compression != null ? compression.compressor().getClass() : null;
@ -381,8 +365,8 @@ public class SSTableMetadataViewer
field("Originating host id", stats.originatingHostId); field("Originating host id", stats.originatingHostId);
field("Pending repair", stats.pendingRepair); field("Pending repair", stats.pendingRepair);
field("Replay positions covered", stats.commitLogIntervals); field("Replay positions covered", stats.commitLogIntervals);
field("Total Column Cells", stats.totalColumnsSet); field("totalColumnsSet", stats.totalColumnsSet);
field("Total Rows", stats.totalRows); field("totalRows", stats.totalRows);
field("Estimated tombstone drop times", ""); field("Estimated tombstone drop times", "");
TermHistogram estDropped = new TermHistogram(stats.estimatedTombstoneDropTime, TermHistogram estDropped = new TermHistogram(stats.estimatedTombstoneDropTime,
@ -394,7 +378,6 @@ public class SSTableMetadataViewer
String::valueOf); String::valueOf);
estDropped.printHistogram(out, color, unicode); estDropped.printHistogram(out, color, unicode);
field("Partition Size", ""); field("Partition Size", "");
field("Total Partitions", count);
TermHistogram rowSize = new TermHistogram(stats.estimatedPartitionSize, TermHistogram rowSize = new TermHistogram(stats.estimatedPartitionSize,
"Size (bytes)", "Size (bytes)",
offset -> String.format("%d %s", offset -> String.format("%d %s",