Author: jbellis Date: Tue Sep 27 15:29:14 2011 New Revision: 1176433 URL: http://svn.apache.org/viewvc?rev=1176433&view=rev Log: merge from 1.0.0
Modified: cassandra/branches/cassandra-1.0/ (props changed) cassandra/branches/cassandra-1.0/CHANGES.txt cassandra/branches/cassandra-1.0/NEWS.txt cassandra/branches/cassandra-1.0/bin/cassandra cassandra/branches/cassandra-1.0/conf/cassandra.yaml cassandra/branches/cassandra-1.0/contrib/ (props changed) cassandra/branches/cassandra-1.0/debian/cassandra.conf cassandra/branches/cassandra-1.0/debian/init cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java (props changed) cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java (props changed) cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java (props changed) cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java (props changed) cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java (props changed) cassandra/branches/cassandra-1.0/redhat/cassandra.conf cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/CompactionController.java cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/CompactionTask.java cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/security/SSLFactory.java Propchange: cassandra/branches/cassandra-1.0/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Sep 27 15:29:14 2011 @@ -1,11 +1,11 @@ /cassandra/branches/cassandra-0.6:922689-1052356,1052358-1053452,1053454,1053456-1131291 /cassandra/branches/cassandra-0.7:1026516-1170333,1172024 /cassandra/branches/cassandra-0.7.0:1053690-1055654 -/cassandra/branches/cassandra-0.8:1090934-1125013,1125019-1174469,1174701,1175880 +/cassandra/branches/cassandra-0.8:1090934-1125013,1125019-1176205 /cassandra/branches/cassandra-0.8.0:1125021-1130369 /cassandra/branches/cassandra-0.8.1:1101014-1125018 /cassandra/branches/cassandra-1.0:1167106,1167185 -/cassandra/branches/cassandra-1.0.0:1167104-1174472,1174704,1175725,1175770-1175771,1175882,1176371 +/cassandra/branches/cassandra-1.0.0:1167104-1176432 /cassandra/tags/cassandra-0.7.0-rc3:1051699-1053689 /cassandra/tags/cassandra-0.8.0-rc1:1102511-1125020 /cassandra/trunk:1167085-1167102,1169870 Modified: cassandra/branches/cassandra-1.0/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/CHANGES.txt?rev=1176433&r1=1176432&r2=1176433&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0/CHANGES.txt (original) +++ cassandra/branches/cassandra-1.0/CHANGES.txt Tue Sep 27 15:29:14 2011 @@ -5,6 +5,8 @@ 1.0.0-final * Log a miningfull warning when a node receive a message for a repair session that don't exist anymore (CASSANDRA-3256) + * test for NUMA policy support as well as numactl presence (CASSANDRA-3245) + * Fix FD leak when internode encryption is enabled (CASSANDRA-3257) * Remove incorrect assertion in mergeIterator (CASSANDRA-3260) @@ -27,8 +29,9 @@ * Allow using quotes in "USE <keyspace>;" CLI command (CASSANDRA-3208) * Don't allow any cache loading exceptions to halt startup (CASSANDRA-3218) * Fix sstableloader --ignores option (CASSANDRA-3247) + * File descriptor limit increased in packaging (CASSANDRA-3206) * Fix deadlock in commit log during flush (CASSANDRA-3253) - + 1.0.0-beta1 * removed binarymemtable (CASSANDRA-2692) Modified: cassandra/branches/cassandra-1.0/NEWS.txt URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/NEWS.txt?rev=1176433&r1=1176432&r2=1176433&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0/NEWS.txt (original) +++ cassandra/branches/cassandra-1.0/NEWS.txt Tue Sep 27 15:29:14 2011 @@ -204,7 +204,7 @@ Features - optional intranode encryption; see comments around 'encryption_options' in cassandra.yaml - compaction multithreading and rate-limiting; see - 'compaction_multithreading' and 'compaction_throughput_mb_per_sec' in + 'concurrent_compactors' and 'compaction_throughput_mb_per_sec' in cassandra.yaml - cassandra will limit total memtable memory usage to 1/3 of the heap by default. This can be ajusted or disabled with the Modified: cassandra/branches/cassandra-1.0/bin/cassandra URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/bin/cassandra?rev=1176433&r1=1176432&r2=1176433&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0/bin/cassandra (original) +++ cassandra/branches/cassandra-1.0/bin/cassandra Tue Sep 27 15:29:14 2011 @@ -91,10 +91,12 @@ fi # If numactl is available, use it. For Cassandra, the priority is to # avoid disk I/O. Even for the purpose of CPU efficiency, we don't -# really have CPU<->data affinity anyway. -if which numactl >/dev/null 2>/dev/null +# really have CPU<->data affinity anyway. Also, empirically test that numactl +# works before trying to use it (CASSANDRA-3245). +NUMACTL_ARGS="--interleave=all" +if which numactl >/dev/null 2>/dev/null && numactl $NUMACTL_ARGS ls / >/dev/null 2>/dev/null then - NUMACTL="numactl --interleave=all" + NUMACTL="numactl $NUMACTL_ARGS" else NUMACTL="" fi Modified: cassandra/branches/cassandra-1.0/conf/cassandra.yaml URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/conf/cassandra.yaml?rev=1176433&r1=1176432&r2=1176433&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0/conf/cassandra.yaml (original) +++ cassandra/branches/cassandra-1.0/conf/cassandra.yaml Tue Sep 27 15:29:14 2011 @@ -137,7 +137,6 @@ concurrent_writes: 32 # Total memory to use for memtables. Cassandra will flush the largest # memtable when this much memory is used. # If omitted, Cassandra will set it to 1/3 of the heap. -# If set to 0, only the old flush thresholds are used. # memtable_total_space_in_mb: 2048 # Total space to use for commitlogs. Propchange: cassandra/branches/cassandra-1.0/contrib/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Sep 27 15:29:14 2011 @@ -1,11 +1,11 @@ /cassandra/branches/cassandra-0.6/contrib:922689-1052356,1052358-1053452,1053454,1053456-1068009 /cassandra/branches/cassandra-0.7/contrib:1026516-1170333,1172024 /cassandra/branches/cassandra-0.7.0/contrib:1053690-1055654 -/cassandra/branches/cassandra-0.8/contrib:1090934-1125013,1125019-1174469,1174701,1175880 +/cassandra/branches/cassandra-0.8/contrib:1090934-1125013,1125019-1175057,1175880 /cassandra/branches/cassandra-0.8.0/contrib:1125021-1130369 /cassandra/branches/cassandra-0.8.1/contrib:1101014-1125018 /cassandra/branches/cassandra-1.0/contrib:1167106,1167185 -/cassandra/branches/cassandra-1.0.0/contrib:1167104-1174472,1174704,1175725,1175770-1175771,1175882,1176371 +/cassandra/branches/cassandra-1.0.0/contrib:1167104-1175725,1175770-1175771,1175882,1176371 /cassandra/tags/cassandra-0.7.0-rc3/contrib:1051699-1053689 /cassandra/tags/cassandra-0.8.0-rc1/contrib:1102511-1125020 /cassandra/trunk/contrib:1167085-1167102,1169870 Modified: cassandra/branches/cassandra-1.0/debian/cassandra.conf URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/debian/cassandra.conf?rev=1176433&r1=1176432&r2=1176433&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0/debian/cassandra.conf (original) +++ cassandra/branches/cassandra-1.0/debian/cassandra.conf Tue Sep 27 15:29:14 2011 @@ -1,2 +1,3 @@ # Provided by the cassandra package cassandra - memlock unlimited +cassandra - nofile 100000 Modified: cassandra/branches/cassandra-1.0/debian/init URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/debian/init?rev=1176433&r1=1176432&r2=1176433&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0/debian/init (original) +++ cassandra/branches/cassandra-1.0/debian/init Tue Sep 27 15:29:14 2011 @@ -22,6 +22,7 @@ CONFDIR=/etc/cassandra JSVC=/usr/bin/jsvc WAIT_FOR_START=10 CASSANDRA_HOME=/usr/share/cassandra +FD_LIMIT=100000 # The first existing directory is used for JAVA_HOME if needed. JVM_SEARCH_DIRS="/usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-sun" @@ -127,6 +128,7 @@ do_start() is_running && return 1 ulimit -l unlimited + ulimit -n "$FD_LIMIT" cassandra_home=`getent passwd cassandra | awk -F ':' '{ print $6; }'` cd / # jsvc doesn't chdir() for us Propchange: cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Sep 27 15:29:14 2011 @@ -1,11 +1,11 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-1052356,1052358-1053452,1053454,1053456-1131291 /cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026516-1170333,1172024 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1053690-1055654 -/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1090934-1125013,1125019-1174469,1174701,1175880 +/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1090934-1125013,1125019-1175057,1175880 /cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1125021-1130369 /cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1101014-1125018 /cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1167106,1167185 -/cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1167104-1174472,1174704,1175725,1175770-1175771,1175882,1176371 +/cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1167104-1175725,1175770-1175771,1175882,1176371 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1051699-1053689 /cassandra/tags/cassandra-0.8.0-rc1/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1102511-1125020 /cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1167085-1167102,1169870 Propchange: cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Sep 27 15:29:14 2011 @@ -1,11 +1,11 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-1052356,1052358-1053452,1053454,1053456-1131291 /cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026516-1170333,1172024 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1053690-1055654 -/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1090934-1125013,1125019-1174469,1174701,1175880 +/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1090934-1125013,1125019-1175057,1175880 /cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1125021-1130369 /cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1101014-1125018 /cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1167106,1167185 -/cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1167104-1174472,1174704,1175725,1175770-1175771,1175882,1176371 +/cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1167104-1175725,1175770-1175771,1175882,1176371 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1051699-1053689 /cassandra/tags/cassandra-0.8.0-rc1/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1102511-1125020 /cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1167085-1167102,1169870 Propchange: cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Sep 27 15:29:14 2011 @@ -1,11 +1,11 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-1052356,1052358-1053452,1053454,1053456-1131291 /cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026516-1170333,1172024 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1053690-1055654 -/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1090934-1125013,1125019-1174469,1174701,1175880 +/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1090934-1125013,1125019-1175057,1175880 /cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1125021-1130369 /cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1101014-1125018 /cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1167106,1167185 -/cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1167104-1174472,1174704,1175725,1175770-1175771,1175882,1176371 +/cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1167104-1175725,1175770-1175771,1175882,1176371 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1051699-1053689 /cassandra/tags/cassandra-0.8.0-rc1/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1102511-1125020 /cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1167085-1167102,1169870 Propchange: cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Sep 27 15:29:14 2011 @@ -1,11 +1,11 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-1052356,1052358-1053452,1053454,1053456-1131291 /cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026516-1170333,1172024 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1053690-1055654 -/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1090934-1125013,1125019-1174469,1174701,1175880 +/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1090934-1125013,1125019-1175057,1175880 /cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1125021-1130369 /cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1101014-1125018 /cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1167106,1167185 -/cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1167104-1174472,1174704,1175725,1175770-1175771,1175882,1176371 +/cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1167104-1175725,1175770-1175771,1175882,1176371 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1051699-1053689 /cassandra/tags/cassandra-0.8.0-rc1/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1102511-1125020 /cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1167085-1167102,1169870 Propchange: cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Sep 27 15:29:14 2011 @@ -1,11 +1,11 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-1052356,1052358-1053452,1053454,1053456-1131291 /cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026516-1170333,1172024 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1053690-1055654 -/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1090934-1125013,1125019-1174469,1174701,1175880 +/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1090934-1125013,1125019-1175057,1175880 /cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1125021-1130369 /cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1101014-1125018 /cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1167106,1167185 -/cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1167104-1174472,1174704,1175725,1175770-1175771,1175882,1176371 +/cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1167104-1175725,1175770-1175771,1175882,1176371 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1051699-1053689 /cassandra/tags/cassandra-0.8.0-rc1/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1102511-1125020 /cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1167085-1167102,1169870 Modified: cassandra/branches/cassandra-1.0/redhat/cassandra.conf URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/redhat/cassandra.conf?rev=1176433&r1=1176432&r2=1176433&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0/redhat/cassandra.conf (original) +++ cassandra/branches/cassandra-1.0/redhat/cassandra.conf Tue Sep 27 15:29:14 2011 @@ -1 +1,2 @@ cassandra - memlock unlimited +cassandra - nofile 100000 Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1176433&r1=1176432&r2=1176433&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original) +++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Tue Sep 27 15:29:14 2011 @@ -321,7 +321,8 @@ public class ColumnFamilyStore implement */ public static void scrubDataDirectories(String table, String columnFamily) { - logger.info("Removing compacted SSTable files from " + columnFamily + " (see http://wiki.apache.org/cassandra/MemtableSSTable)"); + logger.debug("Removing compacted SSTable files from {} (see http://wiki.apache.org/cassandra/MemtableSSTable)", columnFamily); + for (Map.Entry<Descriptor,Set<Component>> sstableFiles : files(table, columnFamily, true, true).entrySet()) { Descriptor desc = sstableFiles.getKey(); @@ -884,6 +885,11 @@ public class ColumnFamilyStore implement return false; } + public boolean isKeyExistenceExpensive(Set<? extends SSTable> sstablesToIgnore) + { + return compactionStrategy.isKeyExistenceExpensive(sstablesToIgnore); + } + /* * Called after a BinaryMemtable flushes its in-memory data, or we add a file * via bootstrap. This information is cached in the ColumnFamilyStore. Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java?rev=1176433&r1=1176432&r2=1176433&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java (original) +++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java Tue Sep 27 15:29:14 2011 @@ -21,9 +21,11 @@ package org.apache.cassandra.db.compacti import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.TimeUnit; import org.apache.cassandra.db.ColumnFamilyStore; +import org.apache.cassandra.io.sstable.SSTable; import org.apache.cassandra.io.sstable.SSTableReader; import org.apache.cassandra.service.StorageService; @@ -97,4 +99,10 @@ public abstract class AbstractCompaction * @return size in bytes of the largest sstables for this strategy */ public abstract long getMaxSSTableSize(); + + /** + * @return true if checking for whether a key exists, ignoring @param sstablesToIgnore, + * is going to be expensive + */ + public abstract boolean isKeyExistenceExpensive(Set<? extends SSTable> sstablesToIgnore); } Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/CompactionController.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/CompactionController.java?rev=1176433&r1=1176432&r2=1176433&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/CompactionController.java (original) +++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/CompactionController.java Tue Sep 27 15:29:14 2011 @@ -44,6 +44,7 @@ public class CompactionController private final boolean forceDeserialize; public final int gcBefore; + public boolean keyExistenceIsExpensive; public CompactionController(ColumnFamilyStore cfs, Collection<SSTableReader> sstables, int gcBefore, boolean forceDeserialize) { @@ -52,6 +53,7 @@ public class CompactionController this.sstables = new HashSet<SSTableReader>(sstables); this.gcBefore = gcBefore; this.forceDeserialize = forceDeserialize; + keyExistenceIsExpensive = cfs.getCompactionStrategy().isKeyExistenceExpensive(this.sstables); } public String getKeyspace() @@ -102,13 +104,19 @@ public class CompactionController */ public AbstractCompactedRow getCompactedRow(List<SSTableIdentityIterator> rows) { - if (rows.size() == 1 && !needDeserialize() && !shouldPurge(rows.get(0).getKey())) - return new EchoedRow(this, rows.get(0)); - long rowSize = 0; for (SSTableIdentityIterator row : rows) rowSize += row.dataSize; + // in-memory echoedrow is only enabled if we think checking for the key's existence in the other sstables, + // is going to be less expensive than simply de/serializing the row again + if (rows.size() == 1 && !needDeserialize() + && (rowSize > DatabaseDescriptor.getInMemoryCompactionLimit() || !keyExistenceIsExpensive) + && !shouldPurge(rows.get(0).getKey())) + { + return new EchoedRow(this, rows.get(0)); + } + if (rowSize > DatabaseDescriptor.getInMemoryCompactionLimit()) { String keyString = cfs.metadata.getKeyValidator().getString(rows.get(0).getKey().key); Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/CompactionTask.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/CompactionTask.java?rev=1176433&r1=1176432&r2=1176433&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/CompactionTask.java (original) +++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/CompactionTask.java Tue Sep 27 15:29:14 2011 @@ -72,11 +72,12 @@ public class CompactionTask extends Abst Set<SSTableReader> toCompact = new HashSet<SSTableReader>(sstables); if (!isUserDefined) { - if ( !allowSingletonCompaction() && toCompact.size() < 2) + if (!allowSingletonCompaction() && toCompact.size() < 2) { - logger.info("Nothing to compact in " + cfs.getColumnFamilyName() + "." + - "Use forceUserDefinedCompaction if you wish to force compaction of single sstables " + - "(e.g. for tombstone collection)"); + String msg = "Nothing to compact in " + cfs.getColumnFamilyName(); + if (cfs.getCompactionStrategy() instanceof SizeTieredCompactionStrategy) + msg += ". Use forceUserDefinedCompaction if you wish to force compaction of single sstables (e.g. for tombstone collection)"; + logger.info(msg); return 0; } @@ -220,7 +221,7 @@ public class CompactionTask extends Abst double mbps = dTime > 0 ? (double)endsize/(1024*1024)/((double)dTime/1000) : 0; logger.info(String.format("Compacted to %s. %,d to %,d (~%d%% of original) bytes for %,d keys at %fMBPS. Time: %,dms.", builder.toString(), startsize, endsize, (int) (ratio * 100), totalkeysWritten, mbps, dTime)); - logger.info(String.format("CF Total Bytes Compacted: %,d", CompactionTask.addToTotalBytesCompacted(endsize))); + logger.debug(String.format("CF Total Bytes Compacted: %,d", CompactionTask.addToTotalBytesCompacted(endsize))); return toCompact.size(); } Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java?rev=1176433&r1=1176432&r2=1176433&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java (original) +++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java Tue Sep 27 15:29:14 2011 @@ -21,17 +21,17 @@ package org.apache.cassandra.db.compacti */ -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.cassandra.db.ColumnFamilyStore; +import org.apache.cassandra.io.sstable.SSTable; import org.apache.cassandra.io.sstable.SSTableReader; import org.apache.cassandra.notifications.INotification; import org.apache.cassandra.notifications.INotificationConsumer; @@ -71,7 +71,7 @@ public class LeveledCompactionStrategy e maxSSTableSizeInMB = configuredMaxSSTableSize; cfs.getDataTracker().subscribe(this); - logger.info(this + " subscribed to the data tracker."); + logger.debug("{} subscribed to the data tracker.", this); manifest = LeveledManifest.create(cfs, this.maxSSTableSizeInMB); logger.debug("Created {}", manifest); @@ -159,6 +159,12 @@ public class LeveledCompactionStrategy e return maxSSTableSizeInMB * 1024 * 1024; } + public boolean isKeyExistenceExpensive(Set<? extends SSTable> sstablesToIgnore) + { + Set<SSTableReader> L0 = ImmutableSet.copyOf(manifest.getLevel(0)); + return Sets.difference(L0, sstablesToIgnore).size() + manifest.getLevelCount() > 20; + } + @Override public String toString() { Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java?rev=1176433&r1=1176432&r2=1176433&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java (original) +++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java Tue Sep 27 15:29:14 2011 @@ -27,8 +27,6 @@ import java.io.IOException; import java.util.*; import com.google.common.collect.Iterables; -import org.apache.commons.lang.StringUtils; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,12 +52,13 @@ public class LeveledManifest * uses a pessimistic estimate of how many keys overlap (none), so we risk wasting memory * or even OOMing when compacting highly overlapping sstables */ - private static int MAX_COMPACTING_L0 = 32; + static int MAX_COMPACTING_L0 = 32; private final ColumnFamilyStore cfs; private final List<SSTableReader>[] generations; private final DecoratedKey[] lastCompactedKeys; private final int maxSSTableSizeInMB; + private int levelCount; private LeveledManifest(ColumnFamilyStore cfs, int maxSSTableSizeInMB) { @@ -135,14 +134,16 @@ public class LeveledManifest serialize(); } - // if the number of SSTables in the current compacted set exeeds the target level, find an empty level + /** + * if the number of SSTables in the current compacted set *by itself* exeeds the target level's + * (regardless of the level's current contents), find an empty level instead + */ private int skipLevels(int newLevel, Iterable<SSTableReader> added) { - // skip newlevel if the resulting sstables exceed newlevel threshold - if (maxBytesForLevel(newLevel) < SSTableReader.getTotalBytes(added) - && SSTableReader.getTotalBytes(generations[(newLevel + 1)]) == 0) + while (maxBytesForLevel(newLevel) < SSTableReader.getTotalBytes(added) + && generations[(newLevel + 1)].isEmpty()) { - newLevel = skipLevels(newLevel + 1, added); + newLevel++; } return newLevel; } @@ -171,7 +172,8 @@ public class LeveledManifest int newLevel = minimumLevel == maximumLevel ? maximumLevel + 1 : maximumLevel; newLevel = skipLevels(newLevel, added); assert newLevel > 0; - logger.debug("Adding [{}] at L{}", StringUtils.join(added.iterator(), ", "), newLevel); + if (logger.isDebugEnabled()) + logger.debug("Adding [{}] at L{}", toString(added), newLevel); lastCompactedKeys[minimumLevel] = SSTable.sstableOrdering.max(added).last; for (SSTableReader ssTableReader : added) @@ -185,7 +187,12 @@ public class LeveledManifest StringBuilder builder = new StringBuilder(); for (SSTableReader sstable : sstables) { - builder.append(sstable.toString()).append(" (L").append(levelOf(sstable)).append("), "); + builder.append(sstable.descriptor.cfname) + .append('-') + .append(sstable.descriptor.generation) + .append("(L") + .append(levelOf(sstable)) + .append("), "); } return builder.toString(); } @@ -383,7 +390,7 @@ public class LeveledManifest File manifestFile = new File(new File(dir, cfs.table.name), cfs.columnFamily + ".json"); if (manifestFile.exists()) { - logger.debug("Loading manifest from {}", manifestFile); + logger.debug("Found manifest at {}", manifestFile); return manifestFile; } } @@ -396,4 +403,19 @@ public class LeveledManifest { return "Manifest@" + hashCode(); } + + public int getLevelCount() + { + for (int i = generations.length - 1; i >= 0; i--) + { + if (generations[i].size() > 0) + return i; + } + return 0; + } + + public List<SSTableReader> getLevel(int i) + { + return generations[i]; + } } Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java?rev=1176433&r1=1176432&r2=1176433&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java (original) +++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java Tue Sep 27 15:29:14 2011 @@ -25,6 +25,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.cassandra.db.ColumnFamilyStore; +import org.apache.cassandra.db.DataTracker; +import org.apache.cassandra.io.sstable.SSTable; import org.apache.cassandra.io.sstable.SSTableReader; import org.apache.cassandra.utils.Pair; @@ -181,6 +183,11 @@ public class SizeTieredCompactionStrateg return Long.MAX_VALUE; } + public boolean isKeyExistenceExpensive(Set<? extends SSTable> sstablesToIgnore) + { + return cfs.getSSTables().size() - sstablesToIgnore.size() > 20; + } + public String toString() { return String.format("SizeTieredCompactionStrategy[%s/%s]", Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/security/SSLFactory.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/security/SSLFactory.java?rev=1176433&r1=1176432&r2=1176433&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/security/SSLFactory.java (original) +++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/security/SSLFactory.java Tue Sep 27 15:29:14 2011 @@ -25,7 +25,6 @@ import java.io.FileInputStream; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; -import java.net.SocketAddress; import java.security.KeyStore; import javax.net.ssl.KeyManagerFactory; @@ -35,6 +34,7 @@ import javax.net.ssl.SSLSocket; import javax.net.ssl.TrustManagerFactory; import org.apache.cassandra.config.EncryptionOptions; +import org.apache.cassandra.io.util.FileUtils; /** * A Factory for providing and setting up Client and Server SSL wrapped @@ -46,7 +46,6 @@ public final class SSLFactory private static final String ALGORITHM = "SunX509"; private static final String STORE_TYPE = "JKS"; - public static SSLServerSocket getServerSocket(EncryptionOptions options, InetAddress address, int port) throws IOException { SSLContext ctx = createSSLContext(options); @@ -75,28 +74,39 @@ public final class SSLFactory return socket; } - private static SSLContext createSSLContext(EncryptionOptions options) throws IOException { + private static SSLContext createSSLContext(EncryptionOptions options) throws IOException + { + FileInputStream tsf = new FileInputStream(options.truststore); + FileInputStream ksf = new FileInputStream(options.keystore); SSLContext ctx; - try { + try + { ctx = SSLContext.getInstance(PROTOCOL); - TrustManagerFactory tmf = null; - KeyManagerFactory kmf = null; + TrustManagerFactory tmf; + KeyManagerFactory kmf; tmf = TrustManagerFactory.getInstance(ALGORITHM); KeyStore ts = KeyStore.getInstance(STORE_TYPE); - ts.load(new FileInputStream(options.truststore), options.truststore_password.toCharArray()); + ts.load(tsf, options.truststore_password.toCharArray()); tmf.init(ts); kmf = KeyManagerFactory.getInstance(ALGORITHM); KeyStore ks = KeyStore.getInstance(STORE_TYPE); - ks.load(new FileInputStream(options.keystore), options.keystore_password.toCharArray()); + ks.load(ksf, options.keystore_password.toCharArray()); kmf.init(ks, options.keystore_password.toCharArray()); ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); - } catch (Exception e) { + } + catch (Exception e) + { throw new IOException("Error creating the initializing the SSL Context", e); } + finally + { + FileUtils.closeQuietly(tsf); + FileUtils.closeQuietly(ksf); + } return ctx; } }