Repository: cassandra Updated Branches: refs/heads/trunk 7d8092b66 -> e80564f39
Fix resetAndTruncate:ing CompressionMetadata Patch by kvaster, reviewed by marcuse for CASSANDRA-6791 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/41d8a5f4 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/41d8a5f4 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/41d8a5f4 Branch: refs/heads/trunk Commit: 41d8a5f4861c37ff8e22344418e9277236672c1f Parents: b3a9a44 Author: Marcus Eriksson <[email protected]> Authored: Mon Mar 3 11:35:03 2014 +0100 Committer: Marcus Eriksson <[email protected]> Committed: Mon Mar 3 14:21:00 2014 +0100 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../io/compress/CompressedSequentialWriter.java | 2 +- .../CompressedRandomAccessReaderTest.java | 42 ++++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/41d8a5f4/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 3e73f91..6de11c5 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -28,6 +28,7 @@ * Disallow post-query re-ordering when paging (CASSANDRA-6722) * Fix potential paging bug with deleted columns (CASSANDRA-6748) * Fix NPE on BulkLoader caused by losing StreamEvent (CASSANDRA-6636) + * Fix truncating compression metadata (CASSANDRA-6791) Merged from 1.2: * Add CMSClassUnloadingEnabled JVM option (CASSANDRA-6541) * Catch memtable flush exceptions during shutdown (CASSANDRA-6735) http://git-wip-us.apache.org/repos/asf/cassandra/blob/41d8a5f4/src/java/org/apache/cassandra/io/compress/CompressedSequentialWriter.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/compress/CompressedSequentialWriter.java b/src/java/org/apache/cassandra/io/compress/CompressedSequentialWriter.java index 54b990f..eef5b17 100644 --- a/src/java/org/apache/cassandra/io/compress/CompressedSequentialWriter.java +++ b/src/java/org/apache/cassandra/io/compress/CompressedSequentialWriter.java @@ -231,7 +231,7 @@ public class CompressedSequentialWriter extends SequentialWriter // truncate data and index file truncate(chunkOffset); - metadataWriter.resetAndTruncate(realMark.nextChunkIndex); + metadataWriter.resetAndTruncate(realMark.nextChunkIndex - 1); } /** http://git-wip-us.apache.org/repos/asf/cassandra/blob/41d8a5f4/test/unit/org/apache/cassandra/io/compress/CompressedRandomAccessReaderTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/io/compress/CompressedRandomAccessReaderTest.java b/test/unit/org/apache/cassandra/io/compress/CompressedRandomAccessReaderTest.java index ee32a0e..3c9dfe5 100644 --- a/test/unit/org/apache/cassandra/io/compress/CompressedRandomAccessReaderTest.java +++ b/test/unit/org/apache/cassandra/io/compress/CompressedRandomAccessReaderTest.java @@ -19,11 +19,13 @@ package org.apache.cassandra.io.compress; import java.io.*; +import java.util.Collections; import java.util.Random; import org.junit.Test; import org.apache.cassandra.db.marshal.BytesType; +import org.apache.cassandra.exceptions.ConfigurationException; import org.apache.cassandra.io.sstable.CorruptSSTableException; import org.apache.cassandra.io.sstable.SSTableMetadata; import org.apache.cassandra.io.util.*; @@ -48,6 +50,46 @@ public class CompressedRandomAccessReaderTest testResetAndTruncate(File.createTempFile("compressed", "1"), true, 10); testResetAndTruncate(File.createTempFile("compressed", "2"), true, CompressionParameters.DEFAULT_CHUNK_LENGTH); } + @Test + public void test6791() throws IOException, ConfigurationException + { + File f = File.createTempFile("compressed6791_", "3"); + String filename = f.getAbsolutePath(); + try + { + + SSTableMetadata.Collector sstableMetadataCollector = SSTableMetadata.createCollector(BytesType.instance).replayPosition(null); + CompressedSequentialWriter writer = new CompressedSequentialWriter(f, filename + ".metadata", false, new CompressionParameters(SnappyCompressor.instance, 32, Collections.<String, String>emptyMap()), sstableMetadataCollector); + + for (int i = 0; i < 20; i++) + writer.write("x".getBytes()); + + FileMark mark = writer.mark(); + // write enough garbage to create new chunks: + for (int i = 0; i < 40; ++i) + writer.write("y".getBytes()); + + writer.resetAndTruncate(mark); + + for (int i = 0; i < 20; i++) + writer.write("x".getBytes()); + writer.close(); + + CompressedRandomAccessReader reader = CompressedRandomAccessReader.open(filename, new CompressionMetadata(filename + ".metadata", f.length(), true)); + String res = reader.readLine(); + assertEquals(res, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); + assertEquals(40, res.length()); + } + finally + { + // cleanup + if (f.exists()) + f.delete(); + File metadata = new File(filename+ ".metadata"); + if (metadata.exists()) + metadata.delete(); + } + } private void testResetAndTruncate(File f, boolean compressed, int junkSize) throws IOException {
