[prev in list] [next in list] [prev in thread] [next in thread] 

List:       cassandra-commits
Subject:    svn commit: r1040614 - in /cassandra/trunk: ./
From:       jbellis () apache ! org
Date:       2010-11-30 16:24:25
Message-ID: 20101130162426.28D2623888E7 () eris ! apache ! org
[Download RAW message or body]

Author: jbellis
Date: Tue Nov 30 16:24:24 2010
New Revision: 1040614

URL: http://svn.apache.org/viewvc?rev=1040614&view=rev
Log:
merge from 0.7

Modified:
    cassandra/trunk/   (props changed)
    cassandra/trunk/CHANGES.txt
    cassandra/trunk/README.txt
    cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java \
(props changed)  cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java \
(props changed)  cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java \
(props changed)  cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java \
(props changed)  cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java \
(props changed)  cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java
    cassandra/trunk/src/java/org/apache/cassandra/cli/CliMain.java
    cassandra/trunk/src/java/org/apache/cassandra/cli/CliUserHelp.java
    cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
    cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java
    cassandra/trunk/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordWriter.java
  cassandra/trunk/src/java/org/apache/cassandra/io/sstable/Descriptor.java
    cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
    cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableTracker.java
    cassandra/trunk/src/java/org/apache/cassandra/net/MessageDeliveryTask.java
    cassandra/trunk/src/java/org/apache/cassandra/net/MessagingService.java
    cassandra/trunk/src/java/org/apache/cassandra/net/sink/SinkManager.java
    cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamingService.java
    cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
    cassandra/trunk/src/java/org/apache/cassandra/thrift/ThriftValidation.java
    cassandra/trunk/src/java/org/apache/cassandra/tools/NodeCmd.java
    cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableExport.java
    cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableImport.java
    cassandra/trunk/src/java/org/apache/cassandra/utils/FBUtilities.java
    cassandra/trunk/test/resources/SimpleCF.json
    cassandra/trunk/test/unit/org/apache/cassandra/service/RemoveTest.java
    cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableExportTest.java
    cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableImportTest.java

Propchange: cassandra/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov 30 16:24:24 2010
@@ -1,5 +1,5 @@
-/cassandra/branches/cassandra-0.6:922689-1037847
-/cassandra/branches/cassandra-0.7:1026517-1038863
+/cassandra/branches/cassandra-0.6:922689-1040580
+/cassandra/branches/cassandra-0.7:1026517-1040581
 /incubator/cassandra/branches/cassandra-0.3:774578-796573
 /incubator/cassandra/branches/cassandra-0.4:810145-834239,834349-834350
 /incubator/cassandra/branches/cassandra-0.5:888872-915439

Modified: cassandra/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Tue Nov 30 16:24:24 2010
@@ -10,7 +10,14 @@ dev
  * fix add/remove index bugs in CFMetadata (CASSANDRA-1768)
  * rebuild Strategy during system_update_keyspace (CASSANDRA-1762)
  * cli updates prompt to ... in continuation lines (CASSANDRA-1770)
+ * support multiple Mutations per key in hadoop ColumnFamilyOutputFormat
+   (CASSANDRA-1774)
  * improvements to Debian init script (CASSANDRA-1772)
+ * use local classloader to check for version.properties (CASSANDRA-1778)
+ * Validate that column names in column_metadata are valid for the
+   defined comparator, and decode properly in cli (CASSANDRA-1773)
+ * use cross-platform newlines in cli (CASSANDRA-1786)
+ * add ExpiringColumn support to sstable import/export (CASSANDRA-1754)
 
 
 0.7.0-rc1

Modified: cassandra/trunk/README.txt
URL: http://svn.apache.org/viewvc/cassandra/trunk/README.txt?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/README.txt (original)
+++ cassandra/trunk/README.txt Tue Nov 30 16:24:24 2010
@@ -51,27 +51,27 @@ be sitting in front of a prompt...
   Connected to: "Test Cluster" on localhost/9160
   Welcome to cassandra CLI.
 
-  Type 'help' or '?' for help. Type 'quit' or 'exit' to quit.
+  Type 'help;' or '?' for help. Type 'quit;' or 'exit;' to quit.
   [default@unknown] 
 
-As the banner says, you can use 'help' or '?' to see what the CLI has to
-offer, and 'quit' or 'exit' when you've had enough fun. But lets try
+As the banner says, you can use 'help;' or '?' to see what the CLI has to
+offer, and 'quit;' or 'exit;' when you've had enough fun. But lets try
 something slightly more interesting...
 
-  [default@unknown] create keyspace Keyspace1
+  [default@unknown] create keyspace Keyspace1;
   ece86bde-dc55-11df-8240-e700f669bcfc
-  [default@unknown] use Keyspace1
+  [default@unknown] use Keyspace1;
   Authenticated to keyspace: Keyspace1
-  [default@Keyspace1] create column family Users with comparator=UTF8Type
+  [default@Keyspace1] create column family Users with comparator=UTF8Type;
   737c7a71-dc56-11df-8240-e700f669bcfc
 
-  [default@KS1] set Users[jsmith][first] = 'John'
+  [default@KS1] set Users[jsmith][first] = 'John';
   Value inserted.
-  [default@KS1] set Users[jsmith][last] = 'Smith'
+  [default@KS1] set Users[jsmith][last] = 'Smith';
   Value inserted.
-  [default@KS1] set Users[jsmith][age] = long(42)
+  [default@KS1] set Users[jsmith][age] = long(42);
   Value inserted.
-  [default@KS1] get Users[jsmith]
+  [default@KS1] get Users[jsmith];
   => (column=last, value=Smith, timestamp=1287604215498000)
   => (column=first, value=John, timestamp=1287604214111000)
   => (column=age, value=42, timestamp=1287604216661000)
@@ -81,7 +81,7 @@ If your session looks similar to what's 
 cluster is operational! But what exactly was all of that? Let's break it
 down into pieces and see.
 
-  set Users[jsmith][first] = 'John'
+  set Users[jsmith][first] = 'John';
         \      \        \          \
          \      \_ key   \          \_ value
           \               \_ column

Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java
                
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov 30 16:24:24 2010
@@ -1,5 +1,5 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-1037847
                
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026517-1038863
 +/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-1040580
 +/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026517-1040581
  /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/Cassandra.java:774578-796573
  /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/Cassandra.java:810145-834239,834349-834350
  /incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/Cassandra.java:888872-903502


Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java
                
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov 30 16:24:24 2010
@@ -1,5 +1,5 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-1037847
                
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026517-1038863
 +/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-1040580
 +/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026517-1040581
  /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/column_t.java:774578-792198
  /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/Column.java:810145-834239,834349-834350
  /incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/Column.java:888872-903502


Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java
                
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov 30 16:24:24 2010
@@ -1,5 +1,5 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-1037847
                
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026517-1038863
 +/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-1040580
 +/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026517-1040581
  /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:774578-796573
  /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:810145-834239,834349-834350
  /incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:888872-903502


Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java
                
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov 30 16:24:24 2010
@@ -1,5 +1,5 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-1037847
                
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026517-1038863
 +/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-1040580
 +/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026517-1040581
  /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:774578-796573
  /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:810145-834239,834349-834350
  /incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:888872-903502


Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java
                
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov 30 16:24:24 2010
@@ -1,5 +1,5 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-1037847
                
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026517-1038863
 +/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-1040580
 +/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026517-1040581
  /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/superColumn_t.java:774578-792198
  /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/SuperColumn.java:810145-834239,834349-834350
  /incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/SuperColumn.java:888872-903502


Modified: cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java Tue Nov 30 \
16:24:24 2010 @@ -241,7 +241,7 @@ public class CliClient extends CliUserHe
         SlicePredicate predicate = new \
SlicePredicate().setColumn_names(null).setSlice_range(range);  
         int count = \
thriftClient.get_count(ByteBuffer.wrap(key.getBytes(Charsets.UTF_8)), colParent, \
                predicate, ConsistencyLevel.ONE);
-        sessionState.out.printf("%d columns\n", count);
+        sessionState.out.printf("%d columns%n", count);
     }
     
     private void executeDelete(Tree statement) 
@@ -319,7 +319,7 @@ public class CliClient extends CliUserHe
                 for (Column col : superColumn.getColumns())
                 {
                     validator = getValidatorForValue(cfDef, col.getName());
-                    sessionState.out.printf("\n     (column=%s, value=%s, \
timestamp=%d)", formatSubcolumnName(keyspace, columnFamily, col), +                   \
sessionState.out.printf("%n     (column=%s, value=%s, timestamp=%d)", \
                formatSubcolumnName(keyspace, columnFamily, col),
                                     validator.getString(col.value), col.timestamp);
                 }
                 
@@ -329,7 +329,7 @@ public class CliClient extends CliUserHe
             {
                 Column column = cosc.column;
                 validator = getValidatorForValue(cfDef, column.getName());
-                sessionState.out.printf("=> (column=%s, value=%s, timestamp=%d)\n", \
formatColumnName(keyspace, columnFamily, column), +                \
sessionState.out.printf("=> (column=%s, value=%s, timestamp=%d)%n", \
                formatColumnName(keyspace, columnFamily, column),
                                 validator.getString(column.value), \
column.timestamp);  }
         }
@@ -453,7 +453,7 @@ public class CliClient extends CliUserHe
         }
 
         // print results
-        sessionState.out.printf("=> (column=%s, value=%s, timestamp=%d)\n",
+        sessionState.out.printf("=> (column=%s, value=%s, timestamp=%d)%n",
                                 formatColumnName(keySpace, columnFamily, column), \
valueAsString, column.timestamp);  }
 
@@ -1197,31 +1197,35 @@ public class CliClient extends CliUserHe
                 sessionState.out.println("    Replication Factor: " + \
ks_def.replication_factor);  sessionState.out.println("  Column Families:");
 
+            boolean isSuper;
+
             Collections.sort(ks_def.cf_defs, new CfDefNamesComparator());
             for (CfDef cf_def : ks_def.cf_defs)
             {
-                sessionState.out.printf("    ColumnFamily: %s%s\n", cf_def.name, \
cf_def.column_type.equals("Super") ? " (Super)" : ""); +                isSuper = \
cf_def.column_type.equals("Super"); +                sessionState.out.printf("    \
ColumnFamily: %s%s%n", cf_def.name, isSuper ? " (Super)" : "");  
                 if (cf_def.comment != null && !cf_def.comment.isEmpty())
                 {
-                    sessionState.out.printf("    \"%s\"\n", cf_def.comment);
+                    sessionState.out.printf("    \"%s\"%n", cf_def.comment);
                 }
                 
-                sessionState.out.printf("      Columns sorted by: %s%s\n", \
cf_def.comparator_type, cf_def.column_type.equals("Super") ? "/" + \
                cf_def.subcomparator_type : "");
-                sessionState.out.printf("      Row cache size / save period: \
                %s/%s\n", cf_def.row_cache_size, \
                cf_def.row_cache_save_period_in_seconds);
-                sessionState.out.printf("      Key cache size / save period: \
                %s/%s\n", cf_def.key_cache_size, \
                cf_def.key_cache_save_period_in_seconds);
-                sessionState.out.printf("      Memtable thresholds: %s/%s/%s\n",
+                sessionState.out.printf("      Columns sorted by: %s%s%n", \
cf_def.comparator_type, cf_def.column_type.equals("Super") ? "/" + \
cf_def.subcomparator_type : ""); +                sessionState.out.printf("      Row \
cache size / save period: %s/%s%n", cf_def.row_cache_size, \
cf_def.row_cache_save_period_in_seconds); +                sessionState.out.printf("  \
Key cache size / save period: %s/%s%n", cf_def.key_cache_size, \
cf_def.key_cache_save_period_in_seconds); +                sessionState.out.printf("  \
                Memtable thresholds: %s/%s/%s%n",
                                 cf_def.memtable_operations_in_millions, \
                cf_def.memtable_throughput_in_mb, cf_def.memtable_flush_after_mins);
-                sessionState.out.printf("      GC grace seconds: %s\n", \
                cf_def.gc_grace_seconds);
-                sessionState.out.printf("      Compaction min/max thresholds: \
                %s/%s\n", cf_def.min_compaction_threshold, \
                cf_def.max_compaction_threshold);
-                sessionState.out.printf("      Read repair chance: %s\n", \
cf_def.read_repair_chance); +                sessionState.out.printf("      GC grace \
seconds: %s%n", cf_def.gc_grace_seconds); +                sessionState.out.printf("  \
Compaction min/max thresholds: %s/%s%n", cf_def.min_compaction_threshold, \
cf_def.max_compaction_threshold); +                sessionState.out.printf("      \
Read repair chance: %s%n", cf_def.read_repair_chance);  
                 if (cf_def.getColumn_metadataSize() != 0)
                 {
                     String leftSpace = "      ";
                     String columnLeftSpace = leftSpace + "    ";
 
-                    AbstractType columnNameValidator = \
getFormatTypeForColumn(cf_def.comparator_type); +                    AbstractType \
columnNameValidator = getFormatTypeForColumn(isSuper ? cf_def.subcomparator_type +    \
: cf_def.comparator_type);  
                     sessionState.out.println(leftSpace + "Column Metadata:");
                     for (ColumnDef columnDef : cf_def.getColumn_metadata())
@@ -1789,8 +1793,8 @@ public class CliClient extends CliUserHe
         {
             String keyName = (keyComparator == null) ? ByteBufferUtil.string(ks.key, \
Charsets.UTF_8) : keyComparator.getString(ks.key);  
-            sessionState.out.printf("-------------------\n");
-            sessionState.out.printf("RowKey: %s\n", keyName);
+            sessionState.out.printf("-------------------%n");
+            sessionState.out.printf("RowKey: %s%n", keyName);
             Iterator<ColumnOrSuperColumn> iterator = ks.getColumnsIterator();
 
             while (iterator.hasNext())
@@ -1802,7 +1806,7 @@ public class CliClient extends CliUserHe
                     Column col = columnOrSuperColumn.column;
                     validator = getValidatorForValue(columnFamilyDef, \
col.getName());  
-                    sessionState.out.printf("=> (column=%s, value=%s, \
timestamp=%d)\n", +                    sessionState.out.printf("=> (column=%s, \
                value=%s, timestamp=%d)%n",
                                     formatColumnName(keySpace, columnFamilyName, \
col), validator.getString(col.value), col.timestamp);  }
                 else if (columnOrSuperColumn.super_column != null)
@@ -1814,7 +1818,7 @@ public class CliClient extends CliUserHe
                     {
                         validator = getValidatorForValue(columnFamilyDef, \
col.getName());  
-                        sessionState.out.printf("\n     (column=%s, value=%s, \
timestamp=%d)", +                        sessionState.out.printf("%n     (column=%s, \
                value=%s, timestamp=%d)",
                                         formatSubcolumnName(keySpace, \
columnFamilyName, col), validator.getString(col.value), col.timestamp);  }
 
@@ -1823,7 +1827,7 @@ public class CliClient extends CliUserHe
             }
         }
 
-        sessionState.out.printf("\n%d Row%s Returned.\n", slices.size(), \
(slices.size() > 1 ? "s" : "")); +        sessionState.out.printf("%n%d Row%s \
Returned.%n", slices.size(), (slices.size() > 1 ? "s" : ""));  }
 
     // returnsub-columnmn name in human-readable format

Modified: cassandra/trunk/src/java/org/apache/cassandra/cli/CliMain.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cli/CliMain.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cli/CliMain.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cli/CliMain.java Tue Nov 30 \
16:24:24 2010 @@ -325,7 +325,12 @@ public class CliMain
         {
             prompt = (inCompoundStatement) ? "...\t" : getPrompt(cliClient);
 
-            line = reader.readLine(prompt).trim();
+            line = reader.readLine(prompt);
+
+            if (line == null)
+                return;
+
+            line = line.trim();
 
             if (line.isEmpty())
                 continue;

Modified: cassandra/trunk/src/java/org/apache/cassandra/cli/CliUserHelp.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cli/CliUserHelp.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cli/CliUserHelp.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cli/CliUserHelp.java Tue Nov 30 \
16:24:24 2010 @@ -172,7 +172,7 @@ public class CliUserHelp {
                 state.out.println("attributes. Note that you must be using a \
keyspace.\n");  state.out.println("valid attributes are:");
                 for (ColumnFamilyArgument argument : ColumnFamilyArgument.values())
-                    state.out.printf("    - %s: %s\n", \
argument.toString().toLowerCase(), argumentExplanations.get(argument)); +             \
state.out.printf("    - %s: %s%n", argument.toString().toLowerCase(), \
                argumentExplanations.get(argument));
                 state.out.println("    - column_metadata: Metadata which describes \
                columns of column family.");
                 state.out.println("        Supported format is [{ k:v, k:v, ... }, { \
                ... }, ...]");
                 state.out.println("        Valid attributes: column_name, \
validation_class (see comparator),"); @@ -197,7 +197,7 @@ public class CliUserHelp {
                 {
                     if (argument == ColumnFamilyArgument.COMPARATOR || argument == \
ColumnFamilyArgument.SUBCOMPARATOR)  continue;
-                    state.out.printf("    - %s: %s\n", \
argument.toString().toLowerCase(), argumentExplanations.get(argument)); +             \
state.out.printf("    - %s: %s%n", argument.toString().toLowerCase(), \
argumentExplanations.get(argument));  }
                 state.out.println("    - column_metadata: Metadata which describes \
                columns of column family.");
                 state.out.println("        Supported format is [{ k:v, k:v, ... }, { \
... }, ...]");

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java \
                (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Tue Nov \
30 16:24:24 2010 @@ -215,7 +215,6 @@ public class ColumnFamilyStore implement
         // scan for sstables corresponding to this cf and load them
         ssTables = new SSTableTracker(table.name, columnFamilyName);
         Set<DecoratedKey> savedKeys = \
readSavedCache(DatabaseDescriptor.getSerializedKeyCachePath(table.name, \
                columnFamilyName));
-        logger.info("read " + savedKeys.size() + " from saved key cache");
         List<SSTableReader> sstables = new ArrayList<SSTableReader>();
         for (Map.Entry<Descriptor,Set<Component>> sstableFiles : files(table.name, \
columnFamilyName, false).entrySet())  {
@@ -264,14 +263,13 @@ public class ColumnFamilyStore implement
     protected Set<DecoratedKey> readSavedCache(File path)
     {
         Set<DecoratedKey> keys = new TreeSet<DecoratedKey>();
-        try
+        if (path.exists())
         {
-            long start = System.currentTimeMillis();
-
-            if (path.exists())
+            try
             {
-                if (logger.isDebugEnabled())
-                    logger.debug(String.format("reading saved cache from %s", \
path)); +                long start = System.currentTimeMillis();
+
+                logger.info(String.format("reading saved cache %s", path));
                 ObjectInputStream in = new ObjectInputStream(new \
BufferedInputStream(new FileInputStream(path)));  while (in.available() > 0)
                 {
@@ -282,13 +280,13 @@ public class ColumnFamilyStore implement
                 }
                 in.close();
                 if (logger.isDebugEnabled())
-                    logger.debug(String.format("completed reading (%d ms; %d keys) \
from saved cache at %s", +                    logger.debug(String.format("completed \
                reading (%d ms; %d keys) saved cache %s",
                                                System.currentTimeMillis() - start, \
keys.size(), path));  }
-        }
-        catch (IOException ioe)
-        {
-            logger.warn(String.format("error reading saved cache at %s", \
path.getAbsolutePath()), ioe); +            catch (IOException ioe)
+            {
+                logger.warn(String.format("error reading saved cache %s", \
path.getAbsolutePath()), ioe); +            }
         }
         return keys;
     }
@@ -504,18 +502,20 @@ public class ColumnFamilyStore implement
     // must be called after all sstables are loaded since row cache merges all row \
versions  public void initRowCache()
     {
-        String msgSuffix = String.format(" row cache for %s of %s", columnFamily, \
                table.name);
         int rowCacheSavePeriodInSeconds = \
DatabaseDescriptor.getTableMetaData(table.name).get(columnFamily).getRowCacheSavePeriodInSeconds();
                
         int keyCacheSavePeriodInSeconds = \
DatabaseDescriptor.getTableMetaData(table.name).get(columnFamily).getKeyCacheSavePeriodInSeconds();
  
         long start = System.currentTimeMillis();
-        logger.info(String.format("loading%s", msgSuffix));
         // sort the results on read because there are few reads and many writes and \
                reads only happen at startup
         Set<DecoratedKey> savedKeys = \
readSavedCache(DatabaseDescriptor.getSerializedRowCachePath(table.name, \
columnFamily));  for (DecoratedKey key : savedKeys)
             cacheRow(key);
-        logger.info(String.format("completed loading (%d ms; %d keys) %s",
-                                  System.currentTimeMillis()-start, \
ssTables.getRowCache().getSize(), msgSuffix)); +        if \
(ssTables.getRowCache().getSize() > 0) +            \
logger.info(String.format("completed loading (%d ms; %d keys) row cache for %s.%s", + \
System.currentTimeMillis()-start, +                                      \
ssTables.getRowCache().getSize(), +                                      table.name,
+                                      columnFamily));
         if (rowCacheSavePeriodInSeconds > 0)
         {
             cacheSavingExecutor.scheduleWithFixedDelay(rowCacheSaverTask,
@@ -594,7 +594,7 @@ public class ColumnFamilyStore implement
      */
     public String getFlushPath()
     {
-        long guessedSize = 2 * memsize.value() * 1024*1024; // 2* adds room for \
keys, column indexes +        long guessedSize = 2L * memsize.value() * 1024*1024; // \
                2* adds room for keys, column indexes
         String location = DatabaseDescriptor.getDataFileLocationForTable(table.name, \
guessedSize);  if (location == null)
             throw new RuntimeException("Insufficient disk space to flush");

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java Tue Nov 30 \
16:24:24 2010 @@ -296,6 +296,6 @@ public class Memtable implements Compara
 
     public boolean isExpired()
     {
-        return System.currentTimeMillis() > creationTime + \
cfs.getMemtableFlushAfterMins() * 60 * 1000; +        return \
System.currentTimeMillis() > creationTime + cfs.getMemtableFlushAfterMins() * 60 * \
1000L;  }
 }

Modified: cassandra/trunk/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordWriter.java
                
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordWriter.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordWriter.java \
                (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordWriter.java \
Tue Nov 30 16:24:24 2010 @@ -319,8 +319,14 @@ implements \
                org.apache.hadoop.mapred.Reco
                 Map<ByteBuffer, Map<String, List<Mutation>>> batch = new \
HashMap<ByteBuffer, Map<String, List<Mutation>>>();  while (batch.size() < \
batchThreshold)  {
-                    Map<String, List<Mutation>> subBatch = \
                Collections.singletonMap(columnFamily, \
                Arrays.asList(mutation.right));
-                    batch.put(mutation.left, subBatch);
+                    Map<String, List<Mutation>> subBatch = batch.get(mutation.left);
+                    if (subBatch == null)
+                    {
+                        subBatch = Collections.singletonMap(columnFamily, \
(List<Mutation>) new ArrayList<Mutation>()); +                        \
batch.put(mutation.left, subBatch); +                    }
+                    
+                    subBatch.get(columnFamily).add(mutation.right);
                     if ((mutation = queue.poll()) == null)
                         break;
                 }

Modified: cassandra/trunk/src/java/org/apache/cassandra/io/sstable/Descriptor.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/sstable/Descriptor.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/io/sstable/Descriptor.java \
                (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/io/sstable/Descriptor.java Tue Nov \
30 16:24:24 2010 @@ -82,12 +82,8 @@ public class Descriptor
     {
         return filenameFor(component.name());
     }
-
-    /**
-     * @param suffix A component suffix, such as 'Data.db'/'Index.db'/etc
-     * @return A filename for this descriptor with the given suffix.
-     */
-    public String filenameFor(String suffix)
+    
+    private String baseFilename()
     {
         StringBuilder buff = new StringBuilder();
         buff.append(directory).append(File.separatorChar);
@@ -96,12 +92,20 @@ public class Descriptor
             buff.append(SSTable.TEMPFILE_MARKER).append("-");
         if (!LEGACY_VERSION.equals(version))
             buff.append(version).append("-");
-        buff.append(generation).append("-");
-        buff.append(suffix);
+        buff.append(generation);
         return buff.toString();
     }
 
     /**
+     * @param suffix A component suffix, such as 'Data.db'/'Index.db'/etc
+     * @return A filename for this descriptor with the given suffix.
+     */
+    public String filenameFor(String suffix)
+    {
+        return baseFilename() + "-" + suffix;
+    }
+
+    /**
      * @see #fromFilename(File directory, String name)
      */
     public static Descriptor fromFilename(String filename)
@@ -177,7 +181,7 @@ public class Descriptor
     @Override
     public String toString()
     {
-        return this.filenameFor("<>");
+        return baseFilename();
     }
 
     @Override

Modified: cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java \
                (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java Tue \
Nov 30 16:24:24 2010 @@ -167,7 +167,7 @@ public class SSTableReader extends SSTab
         assert partitioner != null;
 
         long start = System.currentTimeMillis();
-        logger.info("Sampling index for " + descriptor);
+        logger.info("Opening " + descriptor);
 
         EstimatedHistogram rowSizes;
         EstimatedHistogram columnCounts;

Modified: cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableTracker.java
                
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableTracker.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableTracker.java \
                (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableTracker.java Tue \
Nov 30 16:24:24 2010 @@ -71,8 +71,8 @@ public class SSTableTracker implements I
         public void saveCache(JMXInstrumentedCache<K, V> cache, File savedCachePath, \
Function<K, ByteBuffer> converter) throws IOException  {
             long start = System.currentTimeMillis();
-            String msgSuffix = " " + savedCachePath.getName() + " for " + cfname + " \
                of " + ksname;
-            logger.debug("saving" + msgSuffix);
+            String msgSuffix = savedCachePath.getName() + " for " + cfname + " of " \
+ ksname; +            logger.info("saving " + msgSuffix);
             int count = 0;
             File tmpFile = File.createTempFile(savedCachePath.getName(), null, \
savedCachePath.getParentFile());  FileOutputStream fout = new \
FileOutputStream(tmpFile); @@ -91,7 +91,7 @@ public class SSTableTracker implements I
             if (!tmpFile.renameTo(savedCachePath))
                 throw new IOException("Unable to rename cache to " + \
savedCachePath);  if (logger.isDebugEnabled())
-                logger.debug("saved " + count + " keys in " + \
(System.currentTimeMillis() - start) + " ms from" + msgSuffix); +                \
logger.debug("saved " + count + " keys in " + (System.currentTimeMillis() - start) + \
" ms from " + msgSuffix);  }
     }
 

Modified: cassandra/trunk/src/java/org/apache/cassandra/net/MessageDeliveryTask.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/net/MessageDeliveryTask.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/net/MessageDeliveryTask.java \
                (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/net/MessageDeliveryTask.java Tue \
Nov 30 16:24:24 2010 @@ -33,6 +33,7 @@ public class MessageDeliveryTask impleme
 
     public MessageDeliveryTask(Message message)
     {
+        assert message != null;
         message_ = message;    
     }
     

Modified: cassandra/trunk/src/java/org/apache/cassandra/net/MessagingService.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/net/MessagingService.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/net/MessagingService.java \
                (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/net/MessagingService.java Tue Nov \
30 16:24:24 2010 @@ -305,7 +305,7 @@ public class MessagingService implements
         }
 
         // message sinks are a testing hook
-        Message processedMessage = SinkManager.processClientMessageSink(message, \
to); +        Message processedMessage = SinkManager.processClientMessage(message, \
to);  if (processedMessage == null)
         {
             return;
@@ -385,11 +385,13 @@ public class MessagingService implements
 
     public static void receive(Message message)
     {
-        message = SinkManager.processServerMessageSink(message, null);
+        message = SinkManager.processServerMessage(message);
+        if (message == null)
+            return;
 
         Runnable runnable = new MessageDeliveryTask(message);
         ExecutorService stage = StageManager.getStage(message.getMessageType());
-        assert stage != null;
+        assert stage != null : "No stage for message type " + \
message.getMessageType();  stage.execute(runnable);
     }
 

Modified: cassandra/trunk/src/java/org/apache/cassandra/net/sink/SinkManager.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/net/sink/SinkManager.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/net/sink/SinkManager.java \
                (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/net/sink/SinkManager.java Tue Nov \
30 16:24:24 2010 @@ -18,56 +18,50 @@
 
 package org.apache.cassandra.net.sink;
 
-import java.util.*;
-import java.io.IOException;
-
 import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.cassandra.net.Message;
 
 public class SinkManager
 {
-    private static LinkedList<IMessageSink> messageSinks_ = new \
LinkedList<IMessageSink>(); +    private static List<IMessageSink> sinks = new \
ArrayList<IMessageSink>();  
-    public static boolean isInitialized()
+    public static void add(IMessageSink ms)
     {
-        return ( messageSinks_.size() > 0 );
+        sinks.add(ms);
     }
 
-    public static void addMessageSink(IMessageSink ms)
+    public static void clear()
     {
-        messageSinks_.addLast(ms);
-    }
-    
-    public static void clearSinks(){
-        messageSinks_.clear();
+        sinks.clear();
     }
 
-    public static Message processClientMessageSink(Message message, InetAddress to)
+    public static Message processClientMessage(Message message, InetAddress to)
     {
-        ListIterator<IMessageSink> li = messageSinks_.listIterator();
-        while ( li.hasNext() )
+        if (sinks.isEmpty())
+            return message;
+
+        for (IMessageSink ms : sinks)
         {
-            IMessageSink ms = li.next();
             message = ms.handleMessage(message, to);
-            if ( message == null )
-            {
+            if (message == null)
                 return null;
-            }
         }
         return message;
     }
 
-    public static Message processServerMessageSink(Message message, InetAddress to)
+    public static Message processServerMessage(Message message)
     {
-        ListIterator<IMessageSink> li = \
                messageSinks_.listIterator(messageSinks_.size());
-        while ( li.hasPrevious() )
+        if (sinks.isEmpty())
+            return message;
+
+        for (IMessageSink ms : sinks)
         {
-            IMessageSink ms = li.previous();
-            message = ms.handleMessage(message, to);
-            if ( message == null )
-            {
+            message = ms.handleMessage(message, null);
+            if (message == null)
                 return null;
-            }
         }
         return message;
     }

Modified: cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamingService.java
                
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamingService.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamingService.java \
                (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamingService.java Tue \
Nov 30 16:24:24 2010 @@ -56,19 +56,19 @@ public class StreamingService implements
         sb.append("Receiving from:\n");
         for (InetAddress source : StreamInSession.getSources())
         {
-            sb.append(String.format(" %s:\n", source.getHostAddress()));
+            sb.append(String.format(" %s:%n", source.getHostAddress()));
             for (PendingFile pf : StreamInSession.getIncomingFiles(source))
             {
-                sb.append(String.format("  %s\n", pf.toString()));
+                sb.append(String.format("  %s%n", pf.toString()));
             }
         }
-        sb.append("Sending to:\n");
+        sb.append("Sending to:%n");
         for (InetAddress dest : StreamOutSession.getDestinations())
         {
-            sb.append(String.format(" %s:\n", dest.getHostAddress()));
+            sb.append(String.format(" %s:%n", dest.getHostAddress()));
             for (PendingFile pf : StreamOutSession.getOutgoingFiles(dest))
             {
-                sb.append(String.format("  %s\n", pf.toString()));
+                sb.append(String.format("  %s%n", pf.toString()));
             }
         }
         return sb.toString();

Modified: cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java \
                (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java Tue Nov \
30 16:24:24 2010 @@ -704,6 +704,7 @@ public class CassandraServer implements 
     public String system_add_column_family(CfDef cf_def) throws \
InvalidRequestException, TException  {
         state().hasColumnFamilyListAccess(Permission.WRITE);
+        ThriftValidation.validateCfDef(cf_def);
         try
         {
             applyMigrationOnStage(new AddColumnFamily(convertToCFMetaData(cf_def)));

Modified: cassandra/trunk/src/java/org/apache/cassandra/thrift/ThriftValidation.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/thrift/ThriftValidation.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/thrift/ThriftValidation.java \
                (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/thrift/ThriftValidation.java Tue \
Nov 30 16:24:24 2010 @@ -25,6 +25,7 @@ import java.util.Arrays;
 import java.util.Comparator;
 import java.util.Set;
 
+import org.apache.cassandra.config.ConfigurationException;
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.db.ColumnFamily;
 import org.apache.cassandra.db.ColumnFamilyType;
@@ -377,4 +378,39 @@ public class ThriftValidation
         }
         throw new InvalidRequestException("No indexed columns present in index \
clause with operator EQ");  }
+
+    public static void validateCfDef(CfDef cf_def) throws InvalidRequestException
+    {
+        try
+        {
+            DatabaseDescriptor.getComparator(cf_def.comparator_type);
+            DatabaseDescriptor.getComparator(cf_def.subcomparator_type);
+            DatabaseDescriptor.getComparator(cf_def.default_validation_class);
+
+            if (cf_def.column_metadata == null)
+                return;
+
+            AbstractType comparator = cf_def.subcomparator_type == null
+                                    ? \
DatabaseDescriptor.getComparator(cf_def.comparator_type) +                            \
: DatabaseDescriptor.getComparator(cf_def.subcomparator_type); +            for \
(ColumnDef c : cf_def.column_metadata) +            {
+                DatabaseDescriptor.getComparator(c.validation_class);
+
+                try
+                {
+                    comparator.validate(c.name);
+                }
+                catch (MarshalException e)
+                {
+                    throw new InvalidRequestException(String.format("Column name %s \
is not valid for comparator %s", +                                                    \
FBUtilities.bytesToHex(c.name), cf_def.comparator_type)); +                }
+            }
+        }
+        catch (ConfigurationException e)
+        {
+            throw new InvalidRequestException(e.getMessage());
+        }
+    }
 }

Modified: cassandra/trunk/src/java/org/apache/cassandra/tools/NodeCmd.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeCmd.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/tools/NodeCmd.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/tools/NodeCmd.java Tue Nov 30 \
16:24:24 2010 @@ -97,11 +97,11 @@ public class NodeCmd {
         Collection<String> leavingNodes = probe.getLeavingNodes();
         Map<String, String> loadMap = probe.getLoadMap();
 
-        outs.printf("%-16s%-7s%-8s%-16s%-8s%-44s\n", "Address", "Status", "State", \
"Load", "Owns", "Token"); +        outs.printf("%-16s%-7s%-8s%-16s%-8s%-44s%n", \
                "Address", "Status", "State", "Load", "Owns", "Token");
         // show pre-wrap token twice so you can always read a node's range as
         // (previous line token, current line token]
         if (sortedTokens.size() > 1)
-            outs.printf("%-16s%-7s%-8s%-16s%-8s%-44s\n", "", "", "", "", "", \
sortedTokens.get(sortedTokens.size() - 1)); +            \
outs.printf("%-16s%-7s%-8s%-16s%-8s%-44s%n", "", "", "", "", "", \
sortedTokens.get(sortedTokens.size() - 1));  
         // Calculate per-token ownership of the ring
         Map<Token, Float> ownerships = probe.getOwnership();
@@ -123,13 +123,13 @@ public class NodeCmd {
                           ? loadMap.get(primaryEndpoint)
                           : "?";
             String owns = new \
                DecimalFormat("##0.00%").format(ownerships.get(token));
-            outs.printf("%-16s%-7s%-8s%-16s%-8s%-44s\n", primaryEndpoint, status, \
state, load, owns, token); +            outs.printf("%-16s%-7s%-8s%-16s%-8s%-44s%n", \
primaryEndpoint, status, state, load, owns, token);  }
     }
 
     public void printThreadPoolStats(PrintStream outs)
     {
-        outs.printf("%-25s%10s%10s%15s\n", "Pool Name", "Active", "Pending", \
"Completed"); +        outs.printf("%-25s%10s%10s%15s%n", "Pool Name", "Active", \
"Pending", "Completed");  
         Iterator<Map.Entry<String, IExecutorMBean>> threads = \
probe.getThreadPoolMBeanProxies();  while (threads.hasNext())
@@ -137,7 +137,7 @@ public class NodeCmd {
             Entry<String, IExecutorMBean> thread = threads.next();
             String poolName = thread.getKey();
             IExecutorMBean threadPoolProxy = thread.getValue();
-            outs.printf("%-25s%10s%10s%15s\n",
+            outs.printf("%-25s%10s%10s%15s%n",
                         poolName, threadPoolProxy.getActiveCount(), \
threadPoolProxy.getPendingTasks(), threadPoolProxy.getCompletedTasks());  }
     }
@@ -150,18 +150,18 @@ public class NodeCmd {
     public void printInfo(PrintStream outs)
     {
         outs.println(probe.getToken());
-        outs.printf("%-17s: %s\n", "Load", probe.getLoadString());
-        outs.printf("%-17s: %s\n", "Generation No", \
probe.getCurrentGenerationNumber()); +        outs.printf("%-17s: %s%n", "Load", \
probe.getLoadString()); +        outs.printf("%-17s: %s%n", "Generation No", \
probe.getCurrentGenerationNumber());  
         // Uptime
         long secondsUp = probe.getUptime() / 1000;
-        outs.printf("%-17s: %d\n", "Uptime (seconds)", secondsUp);
+        outs.printf("%-17s: %d%n", "Uptime (seconds)", secondsUp);
 
         // Memory usage
         MemoryUsage heapUsage = probe.getHeapMemoryUsage();
         double memUsed = (double)heapUsage.getUsed() / (1024 * 1024);
         double memMax = (double)heapUsage.getMax() / (1024 * 1024);
-        outs.printf("%-17s: %.2f / %.2f\n", "Heap Memory (MB)", memUsed, memMax);
+        outs.printf("%-17s: %.2f / %.2f%n", "Heap Memory (MB)", memUsed, memMax);
     }
 
     public void printReleaseVersion(PrintStream outs)
@@ -171,7 +171,7 @@ public class NodeCmd {
 
     public void printNetworkStats(final InetAddress addr, PrintStream outs)
     {
-        outs.printf("Mode: %s\n", probe.getOperationMode());
+        outs.printf("Mode: %s%n", probe.getOperationMode());
         Set<InetAddress> hosts = addr == null ? probe.getStreamDestinations() : new \
HashSet<InetAddress>(){{add(addr);}};  if (hosts.size() == 0)
             outs.println("Not sending any streams.");
@@ -182,18 +182,18 @@ public class NodeCmd {
                 List<String> files = probe.getFilesDestinedFor(host);
                 if (files.size() > 0)
                 {
-                    outs.printf("Streaming to: %s\n", host);
+                    outs.printf("Streaming to: %s%n", host);
                     for (String file : files)
-                        outs.printf("   %s\n", file);
+                        outs.printf("   %s%n", file);
                 }
                 else
                 {
-                    outs.printf(" Nothing streaming to %s\n", host);
+                    outs.printf(" Nothing streaming to %s%n", host);
                 }
             }
             catch (IOException ex)
             {
-                outs.printf("   Error retrieving file data for %s\n", host);
+                outs.printf("   Error retrieving file data for %s%n", host);
             }
         }
 
@@ -207,18 +207,18 @@ public class NodeCmd {
                 List<String> files = probe.getIncomingFiles(host);
                 if (files.size() > 0)
                 {
-                    outs.printf("Streaming from: %s\n", host);
+                    outs.printf("Streaming from: %s%n", host);
                     for (String file : files)
-                        outs.printf("   %s\n", file);
+                        outs.printf("   %s%n", file);
                 }
                 else
                 {
-                    outs.printf(" Nothing streaming from %s\n", host);
+                    outs.printf(" Nothing streaming from %s%n", host);
                 }
             }
             catch (IOException ex)
             {
-                outs.printf("   Error retrieving file data for %s\n", host);
+                outs.printf("   Error retrieving file data for %s%n", host);
             }
         }
 
@@ -226,7 +226,7 @@ public class NodeCmd {
         outs.printf("%-25s", "Pool Name");
         outs.printf("%10s", "Active");
         outs.printf("%10s", "Pending");
-        outs.printf("%15s\n", "Completed");
+        outs.printf("%15s%n", "Completed");
 
         int pending;
         long completed;
@@ -237,7 +237,7 @@ public class NodeCmd {
         completed = 0;
         for (long n : ms.getCommandCompletedTasks().values())
             completed += n;
-        outs.printf("%-25s%10s%10s%15s\n", "Commands", "n/a", pending, completed);
+        outs.printf("%-25s%10s%10s%15s%n", "Commands", "n/a", pending, completed);
 
         pending = 0;
         for (int n : ms.getResponsePendingTasks().values())
@@ -245,7 +245,7 @@ public class NodeCmd {
         completed = 0;
         for (long n : ms.getResponseCompletedTasks().values())
             completed += n;
-        outs.printf("%-25s%10s%10s%15s\n", "Responses", "n/a", pending, completed);
+        outs.printf("%-25s%10s%10s%15s%n", "Responses", "n/a", pending, completed);
     }
     
     public void printColumnFamilyStats(PrintStream outs)

Modified: cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableExport.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableExport.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableExport.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableExport.java Tue Nov 30 \
16:24:24 2010 @@ -31,6 +31,7 @@ import org.apache.cassandra.config.Datab
 import org.apache.cassandra.db.ColumnFamily;
 import org.apache.cassandra.db.DecoratedKey;
 import org.apache.cassandra.db.IColumn;
+import org.apache.cassandra.db.ExpiringColumn;
 import org.apache.cassandra.db.marshal.AbstractType;
 import org.apache.cassandra.dht.IPartitioner;
 import org.apache.cassandra.io.sstable.*;
@@ -95,6 +96,12 @@ public class SSTableExport
             json.append(column.timestamp());
             json.append(", ");
             json.append(column.isMarkedForDelete());
+            if (column instanceof ExpiringColumn) {
+              json.append(", ");
+              json.append(((ExpiringColumn)column).getTimeToLive());
+              json.append(", ");
+              json.append(((ExpiringColumn)column).getLocalDeletionTime());
+            }
             json.append("]");
             if (iter.hasNext())
                 json.append(", ");

Modified: cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableImport.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableImport.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableImport.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableImport.java Tue Nov 30 \
16:24:24 2010 @@ -28,6 +28,7 @@ import org.apache.cassandra.config.Confi
 import org.apache.cassandra.db.ColumnFamily;
 import org.apache.cassandra.db.DecoratedKey;
 import org.apache.cassandra.db.SuperColumn;
+import org.apache.cassandra.db.ExpiringColumn;
 import org.apache.cassandra.db.ColumnFamilyType;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.dht.IPartitioner;
@@ -68,15 +69,22 @@ public class SSTableImport
         private String value;
         private long timestamp;
         private boolean isDeleted;
+        private int ttl;
+        private int localExpirationTime;
         
         private JsonColumn(Object obj) throws ClassCastException
         {
             JSONArray colSpec = (JSONArray)obj;
-            assert colSpec.size() == 4;
+            assert colSpec.size() == 4 || colSpec.size() == 6;
             name = (String)colSpec.get(0);
             value = (String)colSpec.get(1);
             timestamp = (Long)colSpec.get(2);
             isDeleted = (Boolean)colSpec.get(3);
+            if (colSpec.size() == 6)
+            {
+                ttl = (int)(long)((Long)colSpec.get(4));
+                localExpirationTime = (int)(long)((Long)colSpec.get(5));
+            }
         }
     }
 
@@ -94,9 +102,16 @@ public class SSTableImport
         {
             JsonColumn col = new JsonColumn(c);
             QueryPath path = new QueryPath(cfm.cfName, null, \
                ByteBuffer.wrap(hexToBytes(col.name)));
-            if (col.isDeleted) {
+            if (col.ttl > 0)
+            {
+                cfamily.addColumn(null, new \
ExpiringColumn(ByteBuffer.wrap(hexToBytes(col.name)), \
ByteBuffer.wrap(hexToBytes(col.value)), col.timestamp, col.ttl, \
col.localExpirationTime)); +            }
+            else if (col.isDeleted)
+            {
                 cfamily.addTombstone(path, ByteBuffer.wrap(hexToBytes(col.value)), \
                col.timestamp);
-            } else {
+            }
+            else
+            {
                 cfamily.addColumn(path, ByteBuffer.wrap(hexToBytes(col.value)), \
col.timestamp);  }
         }
@@ -124,9 +139,16 @@ public class SSTableImport
             {
                 JsonColumn col = new JsonColumn(c);
                 QueryPath path = new QueryPath(cfm.cfName, superName, \
                ByteBuffer.wrap(hexToBytes(col.name)));
-                if (col.isDeleted) {
+                if (col.ttl > 0)
+                {
+                    cfamily.addColumn(superName, new \
ExpiringColumn(ByteBuffer.wrap(hexToBytes(col.name)), \
ByteBuffer.wrap(hexToBytes(col.value)), col.timestamp, col.ttl, \
col.localExpirationTime)); +                }
+                else if (col.isDeleted)
+                {
                     cfamily.addTombstone(path, \
                ByteBuffer.wrap(hexToBytes(col.value)), col.timestamp);
-                } else {
+                }
+                else
+                {
                     cfamily.addColumn(path, ByteBuffer.wrap(hexToBytes(col.value)), \
col.timestamp);  }
             }

Modified: cassandra/trunk/src/java/org/apache/cassandra/utils/FBUtilities.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/utils/FBUtilities.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/utils/FBUtilities.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/utils/FBUtilities.java Tue Nov 30 \
16:24:24 2010 @@ -517,7 +517,7 @@ public class FBUtilities
     {
         try
         {
-            InputStream in = \
ClassLoader.getSystemClassLoader().getResourceAsStream("org/apache/cassandra/config/version.properties");
 +            InputStream in = \
FBUtilities.class.getClassLoader().getResourceAsStream("org/apache/cassandra/config/version.properties");
  Properties props = new Properties();
             props.load(in);
             return props.getProperty("CassandraVersion");
@@ -573,13 +573,13 @@ public class FBUtilities
         }
         catch (NoSuchFieldException e)
         {
-            ConfigurationException ex = new ConfigurationException("Invalid \
comparator: must define a public static instance field."); +            \
ConfigurationException ex = new ConfigurationException("Invalid comparator " + \
compareWith + " : must define a public static instance field.");  ex.initCause(e);
             throw ex;
         }
         catch (IllegalAccessException e)
         {
-            ConfigurationException ex = new ConfigurationException("Invalid \
comparator: must define a public static instance field."); +            \
ConfigurationException ex = new ConfigurationException("Invalid comparator " + \
compareWith + " : must define a public static instance field.");  ex.initCause(e);
             throw ex;
         }
@@ -599,7 +599,7 @@ public class FBUtilities
         }
         catch (ClassNotFoundException e)
         {
-            throw new ConfigurationException(String.format("Unable to find %s class \
'%s': is the CLASSPATH set correctly?", readable, classname)); +            throw new \
ConfigurationException(String.format("Unable to find %s class '%s'", readable, \
classname));  }
     }
 

Modified: cassandra/trunk/test/resources/SimpleCF.json
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/resources/SimpleCF.json?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/test/resources/SimpleCF.json (original)
+++ cassandra/trunk/test/resources/SimpleCF.json Tue Nov 30 16:24:24 2010
@@ -1,4 +1,4 @@
 {
- "726f7741": [["636f6c4141", "76616c4141", 1, false], ["636f6c4142", "76616c4142", \
1, false]], + "726f7741": [["636f6c4141", "76616c4141", 1, false], ["636f6c4142", \
"76616c4142", 1, false], ["636f6c4143", "76616c4143", 1, false, 42, 2000000000 ]],  \
"726f7742": [["636f6c4241", "76616c4241", 1, false], ["636f6c4242", "76616c4242", 1, \
false]]  }

Modified: cassandra/trunk/test/unit/org/apache/cassandra/service/RemoveTest.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/service/RemoveTest.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/service/RemoveTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/service/RemoveTest.java Tue Nov 30 \
16:24:24 2010 @@ -83,7 +83,7 @@ public class RemoveTest extends CleanupH
     @After
     public void tearDown()
     {
-        SinkManager.clearSinks();
+        SinkManager.clear();
         MessagingService.shutdown();
         ss.setPartitionerUnsafe(oldPartitioner);
     }
@@ -111,7 +111,7 @@ public class RemoveTest extends CleanupH
 
         final String token = \
partitioner.getTokenFactory().toString(endpointTokens.get(5));  ReplicationSink rSink \
                = new ReplicationSink();
-        SinkManager.addMessageSink(rSink);
+        SinkManager.add(rSink);
 
         // start removal in background and send replication confirmations
         final AtomicBoolean success = new AtomicBoolean(false);
@@ -159,8 +159,8 @@ public class RemoveTest extends CleanupH
 
         NotificationSink nSink = new NotificationSink();
         ReplicationSink rSink = new ReplicationSink();
-        SinkManager.addMessageSink(nSink);
-        SinkManager.addMessageSink(rSink);
+        SinkManager.add(nSink);
+        SinkManager.add(rSink);
 
         assertEquals(0, tmd.getLeavingEndpoints().size());
 

Modified: cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableExportTest.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableExportTest.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableExportTest.java \
                (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableExportTest.java Tue \
Nov 30 16:24:24 2010 @@ -28,6 +28,7 @@ import java.util.Arrays;
 import org.apache.cassandra.SchemaLoader;
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.db.ColumnFamily;
+import org.apache.cassandra.db.ExpiringColumn;
 import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.dht.IPartitioner;
@@ -90,13 +91,16 @@ public class SSTableExportTest extends S
     }
 
     @Test
-    public void testExportSimpleCf() throws IOException    {
+    public void testExportSimpleCf() throws IOException
+    {
         File tempSS = tempSSTableFile("Keyspace1", "Standard1");
         ColumnFamily cfamily = ColumnFamily.create("Keyspace1", "Standard1");
         SSTableWriter writer = new SSTableWriter(tempSS.getPath(), 2);
         
+        int nowInSec = (int)(System.currentTimeMillis() / 1000);
         // Add rowA
         cfamily.addColumn(new QueryPath("Standard1", null, \
ByteBufferUtil.bytes("colA")), ByteBufferUtil.bytes("valA"), 1); +        \
cfamily.addColumn(null, new ExpiringColumn(ByteBufferUtil.bytes("colExp"), \
ByteBufferUtil.bytes("valExp"), 1, 42, nowInSec));  writer.append(Util.dk("rowA"), \
cfamily);  cfamily.clear();
         
@@ -121,6 +125,10 @@ public class SSTableExportTest extends S
         JSONArray rowA = (JSONArray)json.get(asHex("rowA"));
         JSONArray colA = (JSONArray)rowA.get(0);
         assert Arrays.equals(hexToBytes((String)colA.get(1)), "valA".getBytes());
+
+        JSONArray colExp = (JSONArray)rowA.get(1);
+        assert ((Long)colExp.get(4)) == 42;
+        assert ((Long)colExp.get(5)) == nowInSec;
         
         JSONArray rowB = (JSONArray)json.get(asHex("rowB"));
         JSONArray colB = (JSONArray)rowB.get(0);

Modified: cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableImportTest.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableImportTest.java?rev=1040614&r1=1040613&r2=1040614&view=diff
 ==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableImportTest.java \
                (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableImportTest.java Tue \
Nov 30 16:24:24 2010 @@ -27,9 +27,11 @@ import org.apache.cassandra.SchemaLoader
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.db.ColumnFamily;
 import org.apache.cassandra.db.DeletedColumn;
+import org.apache.cassandra.db.ExpiringColumn;
 import org.apache.cassandra.db.IColumn;
 import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
+import org.apache.cassandra.db.columniterator.IColumnIterator;
 import org.apache.cassandra.io.sstable.Descriptor;
 import org.apache.cassandra.io.sstable.SSTableReader;
 import static org.apache.cassandra.utils.FBUtilities.hexToBytes;
@@ -41,6 +43,9 @@ import org.json.simple.parser.ParseExcep
 import org.junit.Test;
 import org.apache.cassandra.utils.ByteBufferUtil;
 
+
+import org.apache.cassandra.utils.FBUtilities;
+
 public class SSTableImportTest extends SchemaLoader
 {   
     @Test
@@ -53,10 +58,16 @@ public class SSTableImportTest extends S
 
         // Verify results
         SSTableReader reader = \
                SSTableReader.open(Descriptor.fromFilename(tempSS.getPath()));
-        QueryFilter qf = QueryFilter.getNamesFilter(Util.dk("rowA"), new \
                QueryPath("Standard1", null, null), ByteBufferUtil.bytes("colAA"));
-        ColumnFamily cf = qf.getSSTableColumnIterator(reader).getColumnFamily();
+        QueryFilter qf = QueryFilter.getIdentityFilter(Util.dk("rowA"), new \
QueryPath("Standard1")); +        IColumnIterator iter = \
qf.getSSTableColumnIterator(reader); +        ColumnFamily cf = \
iter.getColumnFamily(); +        while (iter.hasNext()) cf.addColumn(iter.next());
         assert cf.getColumn(ByteBufferUtil.bytes("colAA")).value().equals(ByteBuffer.wrap(hexToBytes("76616c4141")));
                
         assert !(cf.getColumn(ByteBufferUtil.bytes("colAA")) instanceof \
DeletedColumn); +        IColumn expCol = \
cf.getColumn(ByteBufferUtil.bytes("colAC")); +        assert \
expCol.value().equals(ByteBuffer.wrap(hexToBytes("76616c4143"))); +        assert \
expCol instanceof ExpiringColumn; +        assert \
((ExpiringColumn)expCol).getTimeToLive() == 42 && \
((ExpiringColumn)expCol).getLocalDeletionTime() == 2000000000;  }
 
     @Test


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic