You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2011/06/20 22:54:26 UTC

svn commit: r1137777 - in /cassandra/trunk: ./ bin/ contrib/ debian/ examples/hadoop_word_count/src/ interface/thrift/gen-java/org/apache/cassandra/thrift/ src/java/org/apache/cassandra/cache/ src/java/org/apache/cassandra/cli/ src/java/org/apache/cass...

Author: jbellis
Date: Mon Jun 20 20:54:24 2011
New Revision: 1137777

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

Added:
    cassandra/trunk/src/java/org/apache/cassandra/db/marshal/BooleanType.java
      - copied unchanged from r1137774, cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/marshal/BooleanType.java
    cassandra/trunk/src/java/org/apache/cassandra/db/marshal/DateType.java
      - copied unchanged from r1137774, cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/marshal/DateType.java
    cassandra/trunk/src/java/org/apache/cassandra/db/marshal/DoubleType.java
      - copied unchanged from r1137774, cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/marshal/DoubleType.java
    cassandra/trunk/src/java/org/apache/cassandra/db/marshal/FloatType.java
      - copied unchanged from r1137774, cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/marshal/FloatType.java
Removed:
    cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLogHeader.java
Modified:
    cassandra/trunk/   (props changed)
    cassandra/trunk/CHANGES.txt
    cassandra/trunk/NEWS.txt
    cassandra/trunk/bin/cassandra.bat
    cassandra/trunk/build.xml
    cassandra/trunk/contrib/   (props changed)
    cassandra/trunk/debian/changelog
    cassandra/trunk/debian/rules
    cassandra/trunk/examples/hadoop_word_count/src/WordCount.java
    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/cache/InstrumentingCache.java
    cassandra/trunk/src/java/org/apache/cassandra/cache/InstrumentingCacheMBean.java
    cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java
    cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g
    cassandra/trunk/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java
    cassandra/trunk/src/java/org/apache/cassandra/cql/Term.java
    cassandra/trunk/src/java/org/apache/cassandra/db/EchoedRow.java
    cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/ReplayPosition.java
    cassandra/trunk/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
    cassandra/trunk/src/java/org/apache/cassandra/gms/FailureDetector.java
    cassandra/trunk/src/java/org/apache/cassandra/gms/Gossiper.java
    cassandra/trunk/src/java/org/apache/cassandra/io/util/FileUtils.java
    cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamInSession.java
    cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamOut.java
    cassandra/trunk/src/java/org/apache/cassandra/tools/NodeCmd.java
    cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableExport.java
    cassandra/trunk/test/system/test_cql.py
    cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java
    cassandra/trunk/test/unit/org/apache/cassandra/locator/EC2SnitchTest.java
    cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableExportTest.java

Propchange: cassandra/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 20 20:54:24 2011
@@ -1,7 +1,7 @@
 /cassandra/branches/cassandra-0.6:922689-1052356,1052358-1053452,1053454,1053456-1131291
-/cassandra/branches/cassandra-0.7:1026516-1133874
+/cassandra/branches/cassandra-0.7:1026516-1133874,1135638
 /cassandra/branches/cassandra-0.7.0:1053690-1055654
-/cassandra/branches/cassandra-0.8:1090934-1125013,1125019-1135241,1135288,1135399,1135426,1135441,1136006,1137550
+/cassandra/branches/cassandra-0.8:1090934-1125013,1125019-1137774
 /cassandra/branches/cassandra-0.8.0:1125021-1130369
 /cassandra/branches/cassandra-0.8.1:1101014-1125018
 /cassandra/tags/cassandra-0.7.0-rc3:1051699-1053689

Modified: cassandra/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Mon Jun 20 20:54:24 2011
@@ -8,6 +8,14 @@
  * Fixed the ability to set compaction strategy in cli using create column family command (CASSANDRA-2778)
  * Add startup flag to renew counter node id (CASSANDRA-2788)
 
+
+0.8.2
+ * fix cache mbean getSize (CASSANDRA-2781)
+ * Add Date, Float, Double, and Boolean types (CASSANDRA-2530)
+ * fix repair hanging if a neighbor has nothing to send (CASSANDRA-2797)
+ * add jamm agent to cassandra.bat (CASSANDRA-2787)
+
+
 0.8.1
  * CQL:
    - support for insert, delete in BATCH (CASSANDRA-2537)
@@ -15,7 +23,6 @@
    - timestamp support for INSERT, UPDATE, and BATCH (CASSANDRA-2555)
    - TTL support (CASSANDRA-2476)
    - counter support (CASSANDRA-2473)
-   - improve JDBC spec compliance (CASSANDRA-2720)
    - ALTER COLUMNFAMILY (CASSANDRA-1709)
    - DROP INDEX (CASSANDRA-2617)
    - add SCHEMA/TABLE as aliases for KS/CF (CASSANDRA-2743)
@@ -58,6 +65,7 @@
    by nio sockets (CASSANDRA-2654)
  * restrict repair streaming to specific columnfamilies (CASSANDRA-2280)
  * fix nodetool ring use with Ec2Snitch (CASSANDRA-2733)
+ * fix inconsistency window during bootstrap (CASSANDRA-833)
  * fix removing columns and subcolumns that are supressed by a row or
    supercolumn tombstone during replica resolution (CASSANDRA-2590)
  * support sstable2json against snapshot sstables (CASSANDRA-2386)
@@ -68,7 +76,14 @@
  * avoid skipping rows in scrub for counter column family (CASSANDRA-2759)
  * fix ConcurrentModificationException in repair when dealing with 0.7 node
    (CASSANDRA-2767)
+ * use threadsafe collections for StreamInSession (CASSANDRA-2766)
  * avoid infinite loop when creating merkle tree (CASSANDRA-2758)
+ * avoids unmarking compacting sstable prematurely in cleanup (CASSANDRA-2769)
+ * fix NPE when the commit log is bypassed (CASSANDRA-2718)
+ * don't throw an exception in SS.isRPCServerRunning (CASSANDRA-2721)
+ * make stress.jar executable (CASSANDRA-2744)
+ * add daemon mode to java stress (CASSANDRA-2267)
+ * expose the DC and rack of a node through JMX and nodetool ring (CASSANDRA-2531)
 
 
 0.8.0-final
@@ -175,7 +190,8 @@
  * add key type information and alias (CASSANDRA-2311, 2396)
  * cli no longer divides read_repair_chance by 100 (CASSANDRA-2458)
  * made CompactionInfo.getTaskType return an enum (CASSANDRA-2482)
- * add a server-wide cap on measured memtable memory usage (CASSANDRA-2006)
+ * add a server-wide cap on measured memtable memory usage and aggressively
+   flush to keep under that threshold (CASSANDRA-2006)
  * add unified UUIDType (CASSANDRA-2233)
 
 

Modified: cassandra/trunk/NEWS.txt
URL: http://svn.apache.org/viewvc/cassandra/trunk/NEWS.txt?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/NEWS.txt (original)
+++ cassandra/trunk/NEWS.txt Mon Jun 20 20:54:24 2011
@@ -7,6 +7,31 @@ Upgrading
       sstableloader tool instead.
 
 
+0.8.1
+=====
+
+Upgrading
+---------
+    - 0.8.1 is backwards compatible with 0.8, upgrade can be achieved by a
+      simple rolling restart.
+    - If upgrading for earlier version (0.7), please refer to the 0.8 section
+      for instructions.
+
+Features
+--------
+    - Numerous additions/improvements to CQL (support for counters, TTL, batch
+      inserts/deletes, index dropping, ...).
+    - Add two new AbstractTypes (comparator) to support compound keys
+      (CompositeType and DynamicCompositeType), as well as a ReverseType to
+      reverse the order of any existing comparator.
+    - New option to bypass the commit log on some keyspaces (for advanced
+      users).
+
+Tools
+-----
+    - Add new data bulk loading utility (sstableloader).
+
+
 0.8
 ===
 

Modified: cassandra/trunk/bin/cassandra.bat
URL: http://svn.apache.org/viewvc/cassandra/trunk/bin/cassandra.bat?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/bin/cassandra.bat (original)
+++ cassandra/trunk/bin/cassandra.bat Mon Jun 20 20:54:24 2011
@@ -24,6 +24,7 @@ if NOT DEFINED JAVA_HOME goto err
 REM ***** JAVA options *****
 set JAVA_OPTS=^
  -ea^
+ -javaagent:%CASSANDRA_HOME%\lib\jamm-0.2.2.jar^
  -Xms1G^
  -Xmx1G^
  -XX:+HeapDumpOnOutOfMemoryError^

Modified: cassandra/trunk/build.xml
URL: http://svn.apache.org/viewvc/cassandra/trunk/build.xml?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/build.xml (original)
+++ cassandra/trunk/build.xml Mon Jun 20 20:54:24 2011
@@ -25,8 +25,8 @@
     <property name="debuglevel" value="source,lines,vars"/>
 
     <!-- default version and SCM information (we need the default SCM info as people may checkout with git-svn) -->
-    <property name="base.version" value="0.8.0"/>
-    <property name="scm.default.path" value="cassandra/branches/cassandra-0.7"/>
+    <property name="base.version" value="0.8.1"/>
+    <property name="scm.default.path" value="cassandra/branches/cassandra-0.8"/>
     <property name="scm.default.connection" value="scm:svn:http://svn.apache.org/repos/asf/${scm.default.path}"/>
     <property name="scm.default.developerConnection" value="scm:svn:https://svn.apache.org/repos/asf/${scm.default.path}"/>
     <property name="scm.default.url" value="http://svn.apache.org/viewvc/${scm.default.path}"/>

Propchange: cassandra/trunk/contrib/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 20 20:54:24 2011
@@ -1,7 +1,7 @@
 /cassandra/branches/cassandra-0.6/contrib:922689-1052356,1052358-1053452,1053454,1053456-1068009
-/cassandra/branches/cassandra-0.7/contrib:1026516-1133874
+/cassandra/branches/cassandra-0.7/contrib:1026516-1133874,1135638
 /cassandra/branches/cassandra-0.7.0/contrib:1053690-1055654
-/cassandra/branches/cassandra-0.8/contrib:1090934-1125013,1125019-1135241,1135288,1135399,1135426,1135441,1136006,1137550
+/cassandra/branches/cassandra-0.8/contrib:1090934-1125013,1125019-1137774
 /cassandra/branches/cassandra-0.8.0/contrib:1125021-1130369
 /cassandra/branches/cassandra-0.8.1/contrib:1101014-1125018
 /cassandra/tags/cassandra-0.7.0-rc3/contrib:1051699-1053689

Modified: cassandra/trunk/debian/changelog
URL: http://svn.apache.org/viewvc/cassandra/trunk/debian/changelog?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/debian/changelog (original)
+++ cassandra/trunk/debian/changelog Mon Jun 20 20:54:24 2011
@@ -1,3 +1,9 @@
+cassandra (0.8.1) unstable; urgency=low
+
+  * New release 
+
+ -- Sylvain Lebresne <sl...@apache.org>  Thu, 16 Jun 2011 09:37:27 +0200
+
 cassandra (0.8.0) unstable; urgency=low
 
   * New release

Modified: cassandra/trunk/debian/rules
URL: http://svn.apache.org/viewvc/cassandra/trunk/debian/rules?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/debian/rules (original)
+++ cassandra/trunk/debian/rules Mon Jun 20 20:54:24 2011
@@ -40,8 +40,6 @@ install: build
 		usr/share/cassandra
 	dh_install build/apache-cassandra-thrift-$(VERSION).jar \
 		usr/share/cassandra
-	dh_install build/apache-cassandra-cql-*.jar \
-		usr/share/cassandra
 
 	dh_link usr/share/cassandra/apache-cassandra-$(VERSION).jar \
 		usr/share/cassandra/apache-cassandra.jar

Modified: cassandra/trunk/examples/hadoop_word_count/src/WordCount.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/examples/hadoop_word_count/src/WordCount.java?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/examples/hadoop_word_count/src/WordCount.java (original)
+++ cassandra/trunk/examples/hadoop_word_count/src/WordCount.java Mon Jun 20 20:54:24 2011
@@ -136,13 +136,13 @@ public class WordCount extends Configure
         private static Mutation getMutation(Text word, int sum)
         {
             Column c = new Column();
-            c.name = ByteBuffer.wrap(Arrays.copyOf(word.getBytes(), word.getLength()));
-            c.value = ByteBufferUtil.bytes(String.valueOf(sum));
-            c.timestamp = System.currentTimeMillis() * 1000;
+            c.setName(Arrays.copyOf(word.getBytes(), word.getLength()));
+            c.setValue(ByteBufferUtil.bytes(String.valueOf(sum)));
+            c.setTimestamp(System.currentTimeMillis());
 
             Mutation m = new Mutation();
-            m.column_or_supercolumn = new ColumnOrSuperColumn();
-            m.column_or_supercolumn.column = c;
+            m.setColumn_or_supercolumn(new ColumnOrSuperColumn());
+            m.column_or_supercolumn.setColumn(c);
             return m;
         }
     }

Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 20 20:54:24 2011
@@ -1,7 +1,7 @@
 /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-1133874
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026516-1133874,1135638
 /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-1135241,1135288,1135399,1135426,1135441,1136006,1137550
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1090934-1125013,1125019-1137774
 /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/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1051699-1053689

Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 20 20:54:24 2011
@@ -1,7 +1,7 @@
 /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-1133874
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026516-1133874,1135638
 /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-1135241,1135288,1135399,1135426,1135441,1136006,1137550
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1090934-1125013,1125019-1137774
 /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/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1051699-1053689

Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 20 20:54:24 2011
@@ -1,7 +1,7 @@
 /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-1133874
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026516-1133874,1135638
 /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-1135241,1135288,1135399,1135426,1135441,1136006,1137550
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1090934-1125013,1125019-1137774
 /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/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1051699-1053689

Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 20 20:54:24 2011
@@ -1,7 +1,7 @@
 /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-1133874
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026516-1133874,1135638
 /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-1135241,1135288,1135399,1135426,1135441,1136006,1137550
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1090934-1125013,1125019-1137774
 /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/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1051699-1053689

Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 20 20:54:24 2011
@@ -1,7 +1,7 @@
 /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-1133874
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026516-1133874,1135638
 /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-1135241,1135288,1135399,1135426,1135441,1136006,1137550
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1090934-1125013,1125019-1137774
 /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/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1051699-1053689

Modified: cassandra/trunk/src/java/org/apache/cassandra/cache/InstrumentingCache.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cache/InstrumentingCache.java?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cache/InstrumentingCache.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cache/InstrumentingCache.java Mon Jun 20 20:54:24 2011
@@ -108,6 +108,11 @@ public class InstrumentingCache<K, V> im
         return map.size();
     }
 
+    public int getSize()
+    {
+        return size();
+    }
+
     public long getHits()
     {
         return hits.get();

Modified: cassandra/trunk/src/java/org/apache/cassandra/cache/InstrumentingCacheMBean.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cache/InstrumentingCacheMBean.java?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cache/InstrumentingCacheMBean.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cache/InstrumentingCacheMBean.java Mon Jun 20 20:54:24 2011
@@ -25,7 +25,7 @@ public interface InstrumentingCacheMBean
 {
     public int getCapacity();
     public void setCapacity(int capacity);
-    public int size();
+    public int getSize();
 
     /** total request count since cache creation */
     public long getRequests();

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=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java Mon Jun 20 20:54:24 2011
@@ -265,6 +265,7 @@ public class CliClient
                     break;
                 case CliParser.NODE_CONSISTENCY_LEVEL:
                     executeConsistencyLevelStatement(tree);
+                    break;
                 case CliParser.NODE_THRIFT_INCR:
                     executeIncr(tree, 1L);
                     break;
@@ -2088,17 +2089,6 @@ public class CliClient
     }
 
     /**
-     * Converts column name into byte[] according to comparator type
-     * @param superColumn - sub-column name from parser
-     * @param columnFamily - column family name from parser
-     * @return bytes[] - into which column name was converted according to comparator type
-     */
-    private byte[] subColumnNameAsByteArray(String superColumn, String columnFamily)
-    {
-        return TBaseHelper.byteBufferToByteArray(subColumnNameAsBytes(superColumn, columnFamily));
-    }
-
-    /**
      * Converts sub-column name into byte[] according to comparator type
      * @param superColumn - sub-column name from parser
      * @param cfDef - column family from parser

Modified: cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g Mon Jun 20 20:54:24 2011
@@ -427,11 +427,11 @@ dropColumnFamilyStatement returns [Strin
     ;
 
 comparatorType
-    : 'bytea' | 'ascii' | 'text' | 'varchar' | 'int' | 'varint' | 'bigint' | 'uuid' | 'counter'
+    : 'bytea' | 'ascii' | 'text' | 'varchar' | 'int' | 'varint' | 'bigint' | 'uuid' | 'counter' | 'boolean' | 'date' | 'float' | 'double'
     ;
 
 term returns [Term item]
-    : ( t=K_KEY | t=STRING_LITERAL | t=INTEGER | t=UUID | t=IDENT ) { $item = new Term($t.text, $t.type); }
+    : ( t=K_KEY | t=STRING_LITERAL | t=INTEGER | t=UUID | t=IDENT | t=FLOAT) { $item = new Term($t.text, $t.type); }
     ;
 
 termList returns [List<Term> items]

Modified: cassandra/trunk/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java Mon Jun 20 20:54:24 2011
@@ -72,6 +72,10 @@ public class CreateColumnFamilyStatement
         comparators.put("bigint", "LongType");
         comparators.put("uuid", "UUIDType");
         comparators.put("counter", "CounterColumnType");
+        comparators.put("boolean", "BooleanType");
+        comparators.put("date", "DateType");
+        comparators.put("float", "FloatType");
+        comparators.put("double", "DoubleType");
 
         keywords.add(KW_COMPARATOR);
         keywords.add(KW_COMMENT);

Modified: cassandra/trunk/src/java/org/apache/cassandra/cql/Term.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/Term.java?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/Term.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/Term.java Mon Jun 20 20:54:24 2011
@@ -24,6 +24,7 @@ import java.nio.ByteBuffer;
 
 import org.apache.cassandra.db.marshal.AbstractType;
 import org.apache.cassandra.db.marshal.AsciiType;
+import org.apache.cassandra.db.marshal.FloatType;
 import org.apache.cassandra.db.marshal.IntegerType;
 import org.apache.cassandra.db.marshal.LexicalUUIDType;
 import org.apache.cassandra.db.marshal.MarshalException;
@@ -107,6 +108,8 @@ public class Term
                 // we specifically want the Lexical class here, not "UUIDType," because we're supposed to have
                 // a uuid-shaped string here, and UUIDType also accepts integer or date strings (and turns them into version 1 uuids).
                 return LexicalUUIDType.instance.fromString(text);
+            case FLOAT: 
+              return FloatType.instance.fromString(text);
         }
         
         // FIXME: handle scenario that should never happen
@@ -132,7 +135,7 @@ public class Term
 
 enum TermType
 {
-    STRING, INTEGER, UUID;
+    STRING, INTEGER, UUID, FLOAT;
     
     static TermType forInt(int type)
     {
@@ -141,7 +144,9 @@ enum TermType
         else if (type == CqlParser.INTEGER)
             return INTEGER;
         else if (type == CqlParser.UUID)
-            return UUID;
+          return UUID;
+        else if (type == CqlParser.FLOAT)
+          return FLOAT;
         
         // FIXME: handled scenario that should never occur.
         return null;

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/EchoedRow.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/EchoedRow.java?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/EchoedRow.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/EchoedRow.java Mon Jun 20 20:54:24 2011
@@ -1,4 +1,25 @@
 package org.apache.cassandra.db;
+/*
+ * 
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * 
+ */
+
 
 import java.io.DataOutput;
 import java.io.IOException;

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/ReplayPosition.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/ReplayPosition.java?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/ReplayPosition.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/ReplayPosition.java Mon Jun 20 20:54:24 2011
@@ -73,9 +73,9 @@ public class ReplayPosition implements C
         public int compare(ReplayPosition o1, ReplayPosition o2)
         {
             if (o1.segment != o2.segment)
-                return new Long(o1.segment).compareTo(o2.segment);
+                return Long.valueOf(o1.segment).compareTo(o2.segment);
 
-            return new Integer(o1.position).compareTo(o2.position);
+            return Integer.valueOf(o1.position).compareTo(o2.position);
         }
     };
 

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/compaction/CompactionManager.java?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/compaction/CompactionManager.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/compaction/CompactionManager.java Mon Jun 20 20:54:24 2011
@@ -652,56 +652,50 @@ public class CompactionManager implement
               logger.debug("Expected bloom filter size : " + expectedBloomFilterSize);
 
             SSTableWriter writer = null;
+
+            logger.info("Cleaning up " + sstable);
+            // Calculate the expected compacted filesize
+            long expectedRangeFileSize = cfs.getExpectedCompactedFileSize(Arrays.asList(sstable)) / 2;
+            String compactionFileLocation = table.getDataFileLocation(expectedRangeFileSize);
+            if (compactionFileLocation == null)
+                throw new IOException("disk full");
+
+            SSTableScanner scanner = sstable.getDirectScanner(CompactionIterator.FILE_BUFFER_SIZE);
+            SortedSet<ByteBuffer> indexedColumns = cfs.getIndexedColumns();
+            CleanupInfo ci = new CleanupInfo(sstable, scanner);
+            executor.beginCompaction(ci);
             try
             {
-                logger.info("Cleaning up " + sstable);
-                // Calculate the expected compacted filesize
-                long expectedRangeFileSize = cfs.getExpectedCompactedFileSize(Arrays.asList(sstable)) / 2;
-                String compactionFileLocation = table.getDataFileLocation(expectedRangeFileSize);
-                if (compactionFileLocation == null)
-                    throw new IOException("disk full");
-
-                SSTableScanner scanner = sstable.getDirectScanner(CompactionIterator.FILE_BUFFER_SIZE);
-                SortedSet<ByteBuffer> indexedColumns = cfs.getIndexedColumns();
-                CleanupInfo ci = new CleanupInfo(sstable, scanner);
-                executor.beginCompaction(ci);
-                try
+                while (scanner.hasNext())
                 {
-                    while (scanner.hasNext())
+                    SSTableIdentityIterator row = (SSTableIdentityIterator) scanner.next();
+                    if (Range.isTokenInRanges(row.getKey().token, ranges))
                     {
-                        SSTableIdentityIterator row = (SSTableIdentityIterator) scanner.next();
-                        if (Range.isTokenInRanges(row.getKey().token, ranges))
-                        {
-                            writer = maybeCreateWriter(cfs, compactionFileLocation, expectedBloomFilterSize, writer, Collections.singletonList(sstable));
-                            writer.append(controller.getCompactedRow(row));
-                            totalkeysWritten++;
-                        }
-                        else
+                        writer = maybeCreateWriter(cfs, compactionFileLocation, expectedBloomFilterSize, writer, Collections.singletonList(sstable));
+                        writer.append(controller.getCompactedRow(row));
+                        totalkeysWritten++;
+                    }
+                    else
+                    {
+                        cfs.invalidateCachedRow(row.getKey());
+                        if (!indexedColumns.isEmpty() || isCommutative)
                         {
-                            cfs.invalidateCachedRow(row.getKey());
-                            if (!indexedColumns.isEmpty() || isCommutative)
+                            while (row.hasNext())
                             {
-                                while (row.hasNext())
-                                {
-                                    IColumn column = row.next();
-                                    if (column instanceof CounterColumn)
-                                        renewer.maybeRenew((CounterColumn) column);
-                                    if (indexedColumns.contains(column.name()))
-                                        Table.cleanupIndexEntry(cfs, row.getKey().key, column);
-                                }
+                                IColumn column = row.next();
+                                if (column instanceof CounterColumn)
+                                    renewer.maybeRenew((CounterColumn) column);
+                                if (indexedColumns.contains(column.name()))
+                                    Table.cleanupIndexEntry(cfs, row.getKey().key, column);
                             }
                         }
                     }
                 }
-                finally
-                {
-                    scanner.close();
-                    executor.finishCompaction(ci);
-                }
             }
             finally
             {
-                cfs.getDataTracker().unmarkCompacting(Arrays.asList(sstable));
+                scanner.close();
+                executor.finishCompaction(ci);
             }
 
             List<SSTableReader> results = new ArrayList<SSTableReader>();

Modified: cassandra/trunk/src/java/org/apache/cassandra/gms/FailureDetector.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/gms/FailureDetector.java?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/gms/FailureDetector.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/gms/FailureDetector.java Mon Jun 20 20:54:24 2011
@@ -257,7 +257,7 @@ class ArrivalWindow
     }
 
     // see CASSANDRA-2597 for an explanation of the math at work here.
-    double phi(long tnow)
+    synchronized double phi(long tnow)
     {
         int size = arrivalIntervals_.size();
         double t = tnow - tLast_;

Modified: cassandra/trunk/src/java/org/apache/cassandra/gms/Gossiper.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/gms/Gossiper.java?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/gms/Gossiper.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/gms/Gossiper.java Mon Jun 20 20:54:24 2011
@@ -190,7 +190,7 @@ public class Gossiper implements IFailur
     
     public void setVersion(InetAddress address, int version)
     {
-        Integer old = versions.put(address, version);
+        versions.put(address, version);
     }
     
     public Integer getVersion(InetAddress address)
@@ -717,7 +717,6 @@ public class Gossiper implements IFailur
     {
         // don't assert here, since if the node restarts the version will go back to zero
         int oldVersion = localState.getHeartBeatState().getHeartBeatVersion();
-        Map<ApplicationState, VersionedValue> localAppStateMap = localState.getApplicationStateMap();
 
         localState.setHeartBeatState(remoteState.getHeartBeatState());
         if (logger.isTraceEnabled())

Modified: cassandra/trunk/src/java/org/apache/cassandra/io/util/FileUtils.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/util/FileUtils.java?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/io/util/FileUtils.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/io/util/FileUtils.java Mon Jun 20 20:54:24 2011
@@ -136,26 +136,13 @@ public class FileUtils
         }
     }
 
-    public static void createFile(String directory) throws IOException
-    {
-        File file = new File(directory);
-        if ( !file.exists() )
-            file.createNewFile();
-    }
-
-    public static boolean isExists(String filename) throws IOException
-    {
-        File file = new File(filename);
-        return file.exists();
-    }
-
     public static boolean delete(String file)
     {
         File f = new File(file);
         return f.delete();
     }
 
-    public static boolean delete(List<String> files) throws IOException
+    public static boolean delete(List<String> files)
     {
         boolean bVal = true;
         for ( int i = 0; i < files.size(); ++i )
@@ -172,7 +159,7 @@ public class FileUtils
         return bVal;
     }
 
-    public static void delete(File[] files) throws IOException
+    public static void delete(File[] files)
     {
         for ( File file : files )
         {

Modified: cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamInSession.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamInSession.java?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamInSession.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamInSession.java Mon Jun 20 20:54:24 2011
@@ -24,18 +24,20 @@ import java.util.*;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
+import java.util.concurrent.LinkedBlockingQueue;
 
-import org.apache.cassandra.gms.Gossiper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.cassandra.db.ColumnFamilyStore;
-import org.apache.cassandra.db.compaction.CompactionManager;
 import org.apache.cassandra.db.Table;
+import org.apache.cassandra.db.compaction.CompactionManager;
+import org.apache.cassandra.gms.Gossiper;
 import org.apache.cassandra.io.sstable.SSTableReader;
 import org.apache.cassandra.net.MessagingService;
 import org.apache.cassandra.utils.Pair;
 import org.cliffc.high_scale_lib.NonBlockingHashMap;
+import org.cliffc.high_scale_lib.NonBlockingHashSet;
 
 /** each context gets its own StreamInSession. So there may be >1 Session per host */
 public class StreamInSession
@@ -44,11 +46,11 @@ public class StreamInSession
 
     private static ConcurrentMap<Pair<InetAddress, Long>, StreamInSession> sessions = new NonBlockingHashMap<Pair<InetAddress, Long>, StreamInSession>();
 
-    private final List<PendingFile> files = new ArrayList<PendingFile>();
+    private final Set<PendingFile> files = new NonBlockingHashSet<PendingFile>();
     private final Pair<InetAddress, Long> context;
     private final Runnable callback;
     private String table;
-    private final List<Future<SSTableReader>> buildFutures = new ArrayList<Future<SSTableReader>>();
+    private final Collection<Future<SSTableReader>> buildFutures = new LinkedBlockingQueue<Future<SSTableReader>>();
     private PendingFile current;
 
     private StreamInSession(Pair<InetAddress, Long> context, Runnable callback)

Modified: cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamOut.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamOut.java?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamOut.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamOut.java Mon Jun 20 20:54:24 2011
@@ -122,15 +122,10 @@ public class StreamOut
     {
         List<PendingFile> pending = createPendingFiles(sstables, ranges, type);
 
-        if (pending.size() > 0)
-        {
-            session.addFilesToStream(pending);
-            session.begin();
-        }
-        else
-        {
-            session.close();
-        }
+        // Even if the list of pending files is empty, we need to initiate the transfer otherwise
+        // the remote end will hang in cases where this was a requested transfer.
+        session.addFilesToStream(pending);
+        session.begin();
     }
 
     // called prior to sending anything.

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=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/tools/NodeCmd.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/tools/NodeCmd.java Mon Jun 20 20:54:24 2011
@@ -450,7 +450,7 @@ public class NodeCmd
                 if (keyCacheMBean.getCapacity() > 0)
                 {
                     outs.println("\t\tKey cache capacity: " + keyCacheMBean.getCapacity());
-                    outs.println("\t\tKey cache size: " + keyCacheMBean.size());
+                    outs.println("\t\tKey cache size: " + keyCacheMBean.getSize());
                     outs.println("\t\tKey cache hit rate: " + keyCacheMBean.getRecentHitRate());
                 }
                 else
@@ -462,7 +462,7 @@ public class NodeCmd
                 if (rowCacheMBean.getCapacity() > 0)
                 {
                     outs.println("\t\tRow cache capacity: " + rowCacheMBean.getCapacity());
-                    outs.println("\t\tRow cache size: " + rowCacheMBean.size());
+                    outs.println("\t\tRow cache size: " + rowCacheMBean.getSize());
                     outs.println("\t\tRow cache hit rate: " + rowCacheMBean.getRecentHitRate());
                 }
                 else

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=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableExport.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableExport.java Mon Jun 20 20:54:24 2011
@@ -25,6 +25,7 @@ import java.nio.ByteBuffer;
 import java.util.*;
 
 import org.apache.cassandra.config.CFMetaData;
+import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.db.*;
 import org.apache.cassandra.db.marshal.AbstractType;
 import org.apache.cassandra.io.util.BufferedRandomAccessFile;
@@ -33,11 +34,11 @@ import org.apache.cassandra.service.Stor
 import org.apache.commons.cli.*;
 
 import org.apache.cassandra.config.ConfigurationException;
-import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.dht.IPartitioner;
 import org.apache.cassandra.io.sstable.*;
 import org.apache.cassandra.utils.ByteBufferUtil;
-import org.apache.cassandra.utils.Pair;
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.map.ObjectMapper;
 
 import static org.apache.cassandra.utils.ByteBufferUtil.bytesToHex;
 import static org.apache.cassandra.utils.ByteBufferUtil.hexToBytes;
@@ -47,12 +48,12 @@ import static org.apache.cassandra.utils
  */
 public class SSTableExport
 {
-    // size of the columns page
-    private static final int PAGE_SIZE = 1000;
+    private static ObjectMapper jsonMapper = new ObjectMapper();
 
     private static final String KEY_OPTION = "k";
     private static final String EXCLUDEKEY_OPTION = "x";
     private static final String ENUMERATEKEYS_OPTION = "e";
+
     private static Options options;
     private static CommandLine cmd;
     
@@ -72,42 +73,36 @@ public class SSTableExport
 
         Option optEnumerate = new Option(ENUMERATEKEYS_OPTION, false, "enumerate keys only");
         options.addOption(optEnumerate);
-    }
 
-    /**
-     * Wraps given string into quotes
-     * @param val string to quote
-     * @return quoted string
-     */
-    private static String quote(String val)
-    {
-        return String.format("\"%s\"", val);
+        // disabling auto close of the stream
+        jsonMapper.configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET, false);
     }
 
     /**
      * JSON Hash Key serializer
-     * @param val value to set as a key
-     * @return JSON Hash key
+     *
+     * @param out The output steam to write data
+     * @param value value to set as a key
      */
-    private static String asKey(String val)
+    private static void writeKey(PrintStream out, String value)
     {
-        return String.format("%s: ", quote(val));
+        writeJSON(out, value);
+        out.print(": ");
     }
 
     /**
      * Serialize columns using given column iterator
+     *
      * @param columns column iterator
      * @param out output stream
      * @param comparator columns comparator
      * @param cfMetaData Column Family metadata (to get validator)
-     * @return pair of (number of columns serialized, last column serialized)
      */
     private static void serializeColumns(Iterator<IColumn> columns, PrintStream out, AbstractType comparator, CFMetaData cfMetaData)
     {
         while (columns.hasNext())
         {
-            IColumn column = columns.next();
-            serializeColumn(column, out, comparator, cfMetaData);
+            writeJSON(out, serializeColumn(columns.next(), comparator, cfMetaData));
 
             if (columns.hasNext())
                 out.print(", ");
@@ -116,47 +111,42 @@ public class SSTableExport
 
     /**
      * Serialize a given column to the JSON format
+     *
      * @param column column presentation
-     * @param out output stream
      * @param comparator columns comparator
      * @param cfMetaData Column Family metadata (to get validator)
+     *
+     * @return column as serialized list
      */
-    private static void serializeColumn(IColumn column, PrintStream out, AbstractType comparator, CFMetaData cfMetaData)
+    private static List<Object> serializeColumn(IColumn column, AbstractType comparator, CFMetaData cfMetaData)
     {
+        ArrayList<Object> serializedColumn = new ArrayList<Object>();
+
         ByteBuffer name = ByteBufferUtil.clone(column.name());
         ByteBuffer value = ByteBufferUtil.clone(column.value());
         AbstractType validator = cfMetaData.getValueValidator(name);
 
-        out.print("[");
-        out.print(quote(comparator.getString(name)));
-        out.print(", ");
-        out.print(quote(validator.getString(value)));
-        out.print(", ");
-        out.print(column.timestamp());
+        serializedColumn.add(comparator.getString(name));
+        serializedColumn.add(validator.getString(value));
+        serializedColumn.add(column.timestamp());
 
         if (column instanceof DeletedColumn)
         {
-            out.print(", ");
-            out.print("\"d\"");
+            serializedColumn.add("d");
         }
         else if (column instanceof ExpiringColumn)
         {
-            out.print(", ");
-            out.print("\"e\"");
-            out.print(", ");
-            out.print(((ExpiringColumn) column).getTimeToLive());
-            out.print(", ");
-            out.print(column.getLocalDeletionTime());
+            serializedColumn.add("e");
+            serializedColumn.add(((ExpiringColumn) column).getTimeToLive());
+            serializedColumn.add(column.getLocalDeletionTime());
         }
         else if (column instanceof CounterColumn)
         {
-            out.print(", ");
-            out.print("\"c\"");
-            out.print(", ");
-            out.print(((CounterColumn) column).timestampOfLastDelete());
+            serializedColumn.add("c");
+            serializedColumn.add(((CounterColumn) column).timestampOfLastDelete());
         }
 
-        out.print("]");
+        return serializedColumn;
     }
 
     /**
@@ -172,7 +162,7 @@ public class SSTableExport
         CFMetaData cfMetaData = columnFamily.metadata();
         AbstractType comparator = columnFamily.getComparator();
 
-        out.print(asKey(bytesToHex(key.key)));
+        writeKey(out, bytesToHex(key.key));
         out.print(isSuperCF ? "{" : "[");
 
         if (isSuperCF)
@@ -181,12 +171,12 @@ public class SSTableExport
             {
                 IColumn column = row.next();
 
-                out.print(asKey(comparator.getString(column.name())));
+                writeKey(out, comparator.getString(column.name()));
                 out.print("{");
-                out.print(asKey("deletedAt"));
+                writeKey(out, "deletedAt");
                 out.print(column.getMarkedForDeleteAt());
                 out.print(", ");
-                out.print(asKey("subColumns"));
+                writeKey(out, "subColumns");
                 out.print("[");
                 serializeColumns(column.getSubColumns().iterator(), out, columnFamily.getSubComparator(), cfMetaData);
                 out.print("]");
@@ -202,6 +192,7 @@ public class SSTableExport
         }
 
         out.print(isSuperCF ? "}" : "]");
+
     }
 
     /**
@@ -417,4 +408,16 @@ public class SSTableExport
 
         System.exit(0);
     }
+
+    private static void writeJSON(PrintStream out, Object value)
+    {
+        try
+        {
+            jsonMapper.writeValue(out, value);
+        }
+        catch (Exception e)
+        {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
 }

Modified: cassandra/trunk/test/system/test_cql.py
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/system/test_cql.py?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/test/system/test_cql.py (original)
+++ cassandra/trunk/test/system/test_cql.py Mon Jun 20 20:54:24 2011
@@ -24,7 +24,6 @@ import sys, uuid, time
 sys.path.append(join(abspath(dirname(__file__)), '../../drivers/py'))
 
 import cql
-from cql.connection import Connection
 from __init__ import ThriftTester
 from __init__ import thrift_client     # TODO: temporary
 

Modified: cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java Mon Jun 20 20:54:24 2011
@@ -113,6 +113,12 @@ public class SchemaLoader
                                   standardCFMD(ks1, "Standard4"),
                                   standardCFMD(ks1, "StandardLong1"),
                                   standardCFMD(ks1, "StandardLong2"),
+                                  new CFMetaData(ks1,
+                                                 "ValuesWithQuotes",
+                                                 st,
+                                                 BytesType.instance,
+                                                 null)
+                                                 .defaultValidator(UTF8Type.instance),
                                   superCFMD(ks1, "Super1", LongType.instance),
                                   superCFMD(ks1, "Super2", LongType.instance),
                                   superCFMD(ks1, "Super3", LongType.instance),

Modified: cassandra/trunk/test/unit/org/apache/cassandra/locator/EC2SnitchTest.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/locator/EC2SnitchTest.java?rev=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/locator/EC2SnitchTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/locator/EC2SnitchTest.java Mon Jun 20 20:54:24 2011
@@ -1,4 +1,25 @@
 package org.apache.cassandra.locator;
+/*
+ * 
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * 
+ */
+
 
 import static org.junit.Assert.assertEquals;
 

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=1137777&r1=1137776&r2=1137777&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableExportTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableExportTest.java Mon Jun 20 20:54:24 2011
@@ -22,17 +22,15 @@ import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.PrintStream;
-import java.nio.ByteBuffer;
-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.CounterColumn;
 import org.apache.cassandra.db.ExpiringColumn;
+import org.apache.cassandra.db.Column;
 import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
-import org.apache.cassandra.dht.IPartitioner;
+import org.apache.cassandra.db.marshal.UTF8Type;
 import org.apache.cassandra.io.sstable.Descriptor;
 import org.apache.cassandra.io.sstable.SSTableReader;
 import org.apache.cassandra.io.sstable.SSTableWriter;
@@ -243,4 +241,30 @@ public class SSTableExportTest extends S
         assert ((String) colA.get(3)).equals("c");
         assert (Long) colA.get(4) == Long.MIN_VALUE;
     }
+
+    @Test
+    public void testEscapingDoubleQuotes() throws IOException
+    {
+        File tempSS = tempSSTableFile("Keyspace1", "ValuesWithQuotes");
+        ColumnFamily cfamily = ColumnFamily.create("Keyspace1", "ValuesWithQuotes");
+        SSTableWriter writer = new SSTableWriter(tempSS.getPath(), 2);
+
+        // Add rowA
+        cfamily.addColumn(null, new Column(ByteBufferUtil.bytes("data"), UTF8Type.instance.fromString("{\"foo\":\"bar\"}")));
+        writer.append(Util.dk("rowA"), cfamily);
+        cfamily.clear();
+
+        SSTableReader reader = writer.closeAndOpenReader();
+
+        // Export to JSON and verify
+        File tempJson = File.createTempFile("ValuesWithQuotes", ".json");
+        SSTableExport.export(reader, new PrintStream(tempJson.getPath()), new String[0]);
+
+        JSONObject json = (JSONObject) JSONValue.parse(new FileReader(tempJson));
+
+        JSONArray rowA = (JSONArray)json.get(asHex("rowA"));
+        JSONArray data = (JSONArray)rowA.get(0);
+        assert hexToBytes((String)data.get(0)).equals(ByteBufferUtil.bytes("data"));
+        assert data.get(1).equals("{\"foo\":\"bar\"}");
+    }
 }