Author: slebresne Date: Mon Oct 10 13:56:27 2011 New Revision: 1180970 URL: http://svn.apache.org/viewvc?rev=1180970&view=rev Log: Fix places where uncompressed sstable size is used in place of the compressed one. patch by slebresne; reviewed by jbellis for CASSANDRA-3338
Modified: cassandra/branches/cassandra-1.0.0/CHANGES.txt cassandra/branches/cassandra-1.0.0/build.xml cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/CompactionManager.java cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/sstable/SSTable.java cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/sstable/SSTableReader.java cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/util/CompressedSegmentedFile.java cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/util/SegmentedFile.java Modified: cassandra/branches/cassandra-1.0.0/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/CHANGES.txt?rev=1180970&r1=1180969&r2=1180970&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0.0/CHANGES.txt (original) +++ cassandra/branches/cassandra-1.0.0/CHANGES.txt Mon Oct 10 13:56:27 2011 @@ -12,6 +12,8 @@ * run compaction and hinted handoff threads at MIN_PRIORITY (CASSANDRA-3308) * default hsha thrift server to cpu core count in rpc pool (CASSANDRA-3329) * add bin\daemon to binary tarball for Windows service (CASSANDRA-3331) + * Fix places where uncompressed size of sstables was use in place of the + compressed one (CASSANDRA-3338) Fixes merged from 0.8 below: * Fix tool .bat files when CASSANDRA_HOME contains spaces (CASSANDRA-3258) * Force flush of status table when removing/updating token (CASSANDRA-3243) Modified: cassandra/branches/cassandra-1.0.0/build.xml URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/build.xml?rev=1180970&r1=1180969&r2=1180970&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0.0/build.xml (original) +++ cassandra/branches/cassandra-1.0.0/build.xml Mon Oct 10 13:56:27 2011 @@ -350,7 +350,7 @@ url=${svn.entry.url}?pathrev=${svn.entry <license name="The Apache Software License, Version 2.0" url="http://www.apache.org/licenses/LICENSE-2.0.txt"/> <scm connection="${scm.connection}" developerConnection="${scm.developerConnection}" url="${scm.url}"/> <dependencyManagement> - <dependency groupId="org.xerial.snappy" artifactId="snappy-java" version="1.0.3.3"/> + <dependency groupId="org.xerial.snappy" artifactId="snappy-java" version="1.0.3"/> <dependency groupId="com.ning" artifactId="compress-lzf" version="0.8.4"/> <dependency groupId="com.google.guava" artifactId="guava" version="r08"/> <dependency groupId="commons-cli" artifactId="commons-cli" version="1.1"/> Modified: cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1180970&r1=1180969&r2=1180970&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original) +++ cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Mon Oct 10 13:56:27 2011 @@ -915,7 +915,7 @@ public class ColumnFamilyStore implement long expectedFileSize = 0; for (SSTableReader sstable : sstables) { - long size = sstable.length(); + long size = sstable.onDiskLength(); expectedFileSize = expectedFileSize + size; } return expectedFileSize; @@ -930,9 +930,9 @@ public class ColumnFamilyStore implement SSTableReader maxFile = null; for (SSTableReader sstable : sstables) { - if (sstable.length() > maxSize) + if (sstable.onDiskLength() > maxSize) { - maxSize = sstable.length(); + maxSize = sstable.onDiskLength(); maxFile = sstable; } } Modified: cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/CompactionManager.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/CompactionManager.java?rev=1180970&r1=1180969&r2=1180970&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/CompactionManager.java (original) +++ cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/CompactionManager.java Mon Oct 10 13:56:27 2011 @@ -472,7 +472,7 @@ public class CompactionManager implement boolean isCommutative = cfs.metadata.getDefaultValidator().isCommutative(); // Calculate the expected compacted filesize - String compactionFileLocation = cfs.table.getDataFileLocation(sstable.length()); + String compactionFileLocation = cfs.table.getDataFileLocation(sstable.onDiskLength()); if (compactionFileLocation == null) throw new IOException("disk full"); int expectedBloomFilterSize = Math.max(DatabaseDescriptor.getIndexInterval(), @@ -765,8 +765,8 @@ public class CompactionManager implement String format = "Cleaned up to %s. %,d to %,d (~%d%% of original) bytes for %,d keys. Time: %,dms."; long dTime = System.currentTimeMillis() - startTime; - long startsize = sstable.length(); - long endsize = newSstable.length(); + long startsize = sstable.onDiskLength(); + long endsize = newSstable.onDiskLength(); double ratio = (double)endsize / (double)startsize; logger.info(String.format(format, writer.getFilename(), startsize, endsize, (int)(ratio*100), totalkeysWritten, dTime)); } Modified: cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java?rev=1180970&r1=1180969&r2=1180970&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java (original) +++ cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java Mon Oct 10 13:56:27 2011 @@ -100,7 +100,7 @@ public class SizeTieredCompactionStrateg { List<Pair<SSTableReader, Long>> tableLengthPairs = new ArrayList<Pair<SSTableReader, Long>>(); for(SSTableReader table: collection) - tableLengthPairs.add(new Pair<SSTableReader, Long>(table, table.length())); + tableLengthPairs.add(new Pair<SSTableReader, Long>(table, table.onDiskLength())); return tableLengthPairs; } Modified: cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/sstable/SSTable.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/sstable/SSTable.java?rev=1180970&r1=1180969&r2=1180970&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/sstable/SSTable.java (original) +++ cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/sstable/SSTable.java Mon Oct 10 13:56:27 2011 @@ -257,7 +257,7 @@ public abstract class SSTable long sum = 0; for (SSTableReader sstable : sstables) { - sum += sstable.length(); + sum += sstable.onDiskLength(); } return sum; } Modified: cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/sstable/SSTableReader.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/sstable/SSTableReader.java?rev=1180970&r1=1180969&r2=1180970&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/sstable/SSTableReader.java (original) +++ cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/sstable/SSTableReader.java Mon Oct 10 13:56:27 2011 @@ -555,7 +555,7 @@ public class SSTableReader extends SSTab long right = getPosition(new DecoratedKey(range.right, null), Operator.GT); if (right == -1 || Range.isWrapAround(range.left, range.right)) // right is past the end of the file, or it wraps - right = length(); + right = uncompressedLength(); if (left == right) // empty range continue; @@ -669,13 +669,25 @@ public class SSTableReader extends SSTab } /** - * @return The length in bytes of the data file for this SSTable. + * @return The length in bytes of the data for this SSTable. For + * compressed files, this is not the same thing as the on disk size (see + * onDiskLength()) */ - public long length() + public long uncompressedLength() { return dfile.length; } + /** + * @return The length in bytes of the on disk size for this SSTable. For + * compressed files, this is not the same thing as the data length (see + * length()) + */ + public long onDiskLength() + { + return dfile.onDiskLength; + } + public boolean acquireReference() { while (true) Modified: cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/util/CompressedSegmentedFile.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/util/CompressedSegmentedFile.java?rev=1180970&r1=1180969&r2=1180970&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/util/CompressedSegmentedFile.java (original) +++ cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/util/CompressedSegmentedFile.java Mon Oct 10 13:56:27 2011 @@ -30,7 +30,7 @@ public class CompressedSegmentedFile ext public CompressedSegmentedFile(String path, CompressionMetadata metadata) { - super(path, metadata.dataLength); + super(path, metadata.dataLength, metadata.compressedFileLength); this.metadata = metadata; } Modified: cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/util/SegmentedFile.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/util/SegmentedFile.java?rev=1180970&r1=1180969&r2=1180970&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/util/SegmentedFile.java (original) +++ cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/util/SegmentedFile.java Mon Oct 10 13:56:27 2011 @@ -42,13 +42,23 @@ public abstract class SegmentedFile public final String path; public final long length; + // This differs from length for compressed files (but we still need length for + // SegmentIterator because offsets in the file are relative to the uncompressed size) + public final long onDiskLength; + /** * Use getBuilder to get a Builder to construct a SegmentedFile. */ SegmentedFile(String path, long length) { + this(path, length, length); + } + + protected SegmentedFile(String path, long length, long onDiskLength) + { this.path = path; this.length = length; + this.onDiskLength = onDiskLength; } /**