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;
     }
 }


Reply via email to