From 905273e3e419ba12d8130f56943b8f4f6818d544 Mon Sep 17 00:00:00 2001 From: Joshua McKenzie Date: Wed, 7 Jan 2015 12:35:11 -0600 Subject: [PATCH] Better detection/logging for corruption in compressed sstables Patch by jmckenzie; reviewed by marcuse for CASSANDRA-8192 --- CHANGES.txt | 1 + .../apache/cassandra/io/compress/CompressionMetadata.java | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 1f93bf5385..e7a4ee5b77 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.1.3 + * Better detection/logging for corruption in compressed sstables (CASSANDRA-8192) * Use the correct repairedAt value when closing writer (CASSANDRA-8570) * (cqlsh) Handle a schema mismatch being detected on startup (CASSANDRA-8512) * Properly calculate expected write size during compaction (CASSANDRA-8532) diff --git a/src/java/org/apache/cassandra/io/compress/CompressionMetadata.java b/src/java/org/apache/cassandra/io/compress/CompressionMetadata.java index f19d5029b6..a40048a840 100644 --- a/src/java/org/apache/cassandra/io/compress/CompressionMetadata.java +++ b/src/java/org/apache/cassandra/io/compress/CompressionMetadata.java @@ -178,6 +178,9 @@ public class CompressionMetadata try { int chunkCount = input.readInt(); + if (chunkCount <= 0) + throw new IOException("Compressed file with 0 chunks encountered: " + input); + Memory offsets = Memory.allocate(chunkCount * 8); for (int i = 0; i < chunkCount; i++) @@ -398,6 +401,8 @@ public class CompressionMetadata public Chunk(long offset, int length) { + assert(length > 0); + this.offset = offset; this.length = length; }