Author: jbellis
Date: Thu Aug 11 19:49:24 2011
New Revision: 1156775

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

Modified:
    cassandra/trunk/   (props changed)
    cassandra/trunk/CHANGES.txt
    cassandra/trunk/contrib/   (props changed)
    cassandra/trunk/doc/cql/CQL.textile
    
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/db/ColumnFamilyStore.java
    cassandra/trunk/src/java/org/apache/cassandra/net/MessagingService.java
    cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
    cassandra/trunk/src/java/org/apache/cassandra/thrift/ThriftValidation.java

Propchange: cassandra/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Aug 11 19:49:24 2011
@@ -1,7 +1,7 @@
 
/cassandra/branches/cassandra-0.6:922689-1052356,1052358-1053452,1053454,1053456-1131291
 /cassandra/branches/cassandra-0.7:1026516-1151306
 /cassandra/branches/cassandra-0.7.0:1053690-1055654
-/cassandra/branches/cassandra-0.8:1090934-1125013,1125019-1156264
+/cassandra/branches/cassandra-0.8:1090934-1125013,1125019-1156772
 /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=1156775&r1=1156774&r2=1156775&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Thu Aug 11 19:49:24 2011
@@ -34,15 +34,23 @@
    (CASSANDRA-2494)
 
 
+0.8.5
+ * fix NPE when encryption_options is unspecified (CASSANDRA-3007)
+ * include column name in validation failure exceptions (CASSANDRA-2849)
+ * make sure truncate clears out the commitlog so replay won't re-
+   populate with truncated data (CASSANDRA-2950)
+ * cache invalidate removes saved cache files (CASSANDRA-2325)
+
+
 0.8.4
  * include files-to-be-streamed in StreamInSession.getSources (CASSANDRA-2972)
  * use JAVA env var in cassandra-env.sh (CASSANDRA-2785, 2992)
  * avoid doing read for no-op replicate-on-write at CL=1 (CASSANDRA-2892)
  * refuse counter write for CL.ANY (CASSANDRA-2990)
  * switch back to only logging recent dropped messages (CASSANDRA-3004)
- * fix issues with parameters being escaped incorrectly in Python CQL 
(CASSANDRA-2993)
  * always deserialize RowMutation for counters (CASSANDRA-3006)
  * ignore saved replication_factor strategy_option for NTS (CASSANDRA-3011)
+ * make sure pre-truncate CL segments are discarded (CASSANDRA-2950)
 
 
 0.8.3
@@ -64,8 +72,8 @@
    (CASSANDRA-2958)
  * improved POSIX compatibility of start scripts (CASsANDRA-2965)
  * add counter support to Hadoop InputFormat (CASSANDRA-2981)
- * fix bug where dirty commit logs were removed (and avoid keeping segments
-   with no post-flush activity permanently dirty) (CASSANDRA-2829)
+ * fix bug where dirty commitlog segments were removed (and avoid keeping 
+   segments with no post-flush activity permanently dirty) (CASSANDRA-2829)
  * fix throwing exception with batch mutation of counter super columns
    (CASSANDRA-2949)
  * ignore system tables during repair (CASSANDRA-2979)
@@ -807,7 +815,7 @@
    transmitting separately (CASSANDRA-1465)
  * apply reversed flag during collation from different data sources
    (CASSANDRA-1450)
- * make failure to remove comitlog segment non-fatal (CASSANDRA-1348)
+ * make failure to remove commitlog segment non-fatal (CASSANDRA-1348)
  * correct ordering of drain operations so CL.recover is no longer 
    necessary (CASSANDRA-1408)
  * removed keyspace from describe_splits method (CASSANDRA-1425)

Propchange: cassandra/trunk/contrib/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Aug 11 19:49: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-1151306
 /cassandra/branches/cassandra-0.7.0/contrib:1053690-1055654
-/cassandra/branches/cassandra-0.8/contrib:1090934-1125013,1125019-1156264
+/cassandra/branches/cassandra-0.8/contrib:1090934-1125013,1125019-1156772
 /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/doc/cql/CQL.textile
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/doc/cql/CQL.textile?rev=1156775&r1=1156774&r2=1156775&view=diff
==============================================================================
--- cassandra/trunk/doc/cql/CQL.textile (original)
+++ cassandra/trunk/doc/cql/CQL.textile Thu Aug 11 19:49:24 2011
@@ -1,4 +1,4 @@
-h1. Cassandra Query Language (CQL) v1.1.0
+h1. Cassandra Query Language (CQL) v1.1.1
 
 h2. Table of Contents
 
@@ -84,14 +84,14 @@ h2. INSERT
 
 _Synopsis:_
 
-bc.
+bc. 
 INSERT INTO <COLUMN FAMILY> (<KEY>, <col>, <col>, ...) VALUES (<key>, <val>, 
<val>, ...) [USING CONSISTENCY <LEVEL> [AND TIMESTAMP <timestamp>] [AND TTL 
<timeToLive>]];
 
 An @INSERT@ is used to write one or more columns to a record in a Cassandra 
column family. No results are returned. 
 
-@INSERT@ works exactly like @UPDATE@ so for information about Column Family 
and Consistency Level arguments please take at the @UPDATE@ section.
+Unlike SQL, the semantics of @INSERT@ and @UPDATE@ are identical, in either 
case a record is created if none existed before, and updated when it does.  For 
information on modifiers and types, see the "@UPDATE@":#update section below.
 
-h2. UPDATE
+h2(#update). UPDATE
 
 _Synopsis:_
 
@@ -137,6 +137,14 @@ UPDATE ... SET name1 = value1, name2 = v
 
 Rows are created or updated by supplying column names and values in term 
assignment format. Multiple columns can be set by separating the name/value 
pairs using commas.  Each update statement requires exactly one key to be 
specified using a WHERE clause and the @KEY@ keyword or key alias.
 
+h3. Updating Counter Columns
+
+bc. 
+UPDATE ... SET name1 = name1 + <value> ...
+UPDATE ... SET name1 = name1 - <value> ...
+
+Counter columns can be incremented or decremented by an arbitrary numeric 
value though the assignment of an expression that adds or substracts the value.
+
 h2. DELETE
 
 _Synopsis:_
@@ -258,6 +266,7 @@ It is possible to assign columns a type 
 |varint|Arbitrary-precision integer|
 |int|8-byte long (same as bigint)|
 |bigint|8-byte long|
+|counter|Counter column, (8-byte long)|
 
 _Note: In addition to the recognized types listed above, it is also possible 
to supply a string containing the name of a class (a sub-class of 
@AbstractType@), either fully qualified, or relative to the 
@org.apache.cassandra.db.marshal@ package._
 
@@ -364,6 +373,10 @@ Versioning of the CQL language adheres t
 h1. Changes
 
 pre. 
+Wed, 10 Aug 2011 11:22:00 -0500 - Eric Evans
+ * Improved INSERT vs. UPDATE wording.
+ * Documented counter column incr/descr.
+
 Sat, 01 Jun 2011 15:58:00 -0600 - Pavel Yaskevich
  * Updated to support ALTER (CASSANDRA-1709)
 

Propchange: 
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Aug 11 19:49: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-1151306
 
/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-1156264
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1090934-1125013,1125019-1156772
 
/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 Thu Aug 11 19:49: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-1151306
 
/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-1156264
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1090934-1125013,1125019-1156772
 
/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 Thu Aug 11 19:49: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-1151306
 
/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-1156264
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1090934-1125013,1125019-1156772
 
/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 Thu Aug 11 19:49: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-1151306
 
/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-1156264
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1090934-1125013,1125019-1156772
 
/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 Thu Aug 11 19:49: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-1151306
 
/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-1156264
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1090934-1125013,1125019-1156772
 
/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/db/ColumnFamilyStore.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1156775&r1=1156774&r2=1156775&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Thu 
Aug 11 19:49:24 2011
@@ -1461,11 +1461,15 @@ public class ColumnFamilyStore implement
     public void invalidateRowCache()
     {
         rowCache.clear();
+        if (rowCache.getCachePath().exists())
+            rowCache.getCachePath().delete();
     }
 
     public void invalidateKeyCache()
     {
         keyCache.clear();
+        if (keyCache.getCachePath().exists())
+            keyCache.getCachePath().delete();
     }
 
     public int getRowCacheCapacity()
@@ -1590,16 +1594,10 @@ public class ColumnFamilyStore implement
         // time.  So to guarantee that all segments can be cleaned out, we need
         // "waitForActiveFlushes" after the new segment has been created.
         CommitLog.instance.forceNewSegment();
-        waitForActiveFlushes();
-        List<Future<?>> futures = new ArrayList<Future<?>>();
         ReplayPosition position = CommitLog.instance.getContext();
         for (ColumnFamilyStore cfs : ColumnFamilyStore.all())
-        {
-            Future<?> f = cfs.forceFlush();
-            if (f != null)
-                futures.add(f);
-        }
-        FBUtilities.waitOnFutures(futures);
+            cfs.forceFlush();
+        waitForActiveFlushes();
         // if everything was clean, flush won't have called discard
         CommitLog.instance.discardCompletedSegments(metadata.cfId, position);
 
@@ -1896,10 +1894,8 @@ public class ColumnFamilyStore implement
         return data.getMemtablesPendingFlush();
     }
 
-    @Override
     public List<String> getBuiltIndexes()
     {
        return indexManager.getBuiltIndexes();
     }
-
 }

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=1156775&r1=1156774&r2=1156775&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/net/MessagingService.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/net/MessagingService.java Thu 
Aug 11 19:49:24 2011
@@ -402,7 +402,8 @@ public final class MessagingService impl
     public void stream(StreamHeader header, InetAddress to)
     {
         /* Streaming asynchronously on streamExector_ threads. */
-        if (DatabaseDescriptor.getEncryptionOptions().internode_encryption == 
EncryptionOptions.InternodeEncryption.all)
+        EncryptionOptions encryption = 
DatabaseDescriptor.getEncryptionOptions();
+        if (encryption != null && encryption.internode_encryption == 
EncryptionOptions.InternodeEncryption.all)
             streamExecutor_.execute(new SSLFileStreamTask(header, to));
         else
             streamExecutor_.execute(new FileStreamTask(header, to));

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=1156775&r1=1156774&r2=1156775&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java 
Thu Aug 11 19:49:24 2011
@@ -497,7 +497,7 @@ public class CassandraServer implements 
             throw new InvalidRequestException("missing mandatory super column 
name for super CF " + column_parent.column_family);
         }
         ThriftValidation.validateColumnNames(metadata, column_parent, 
Arrays.asList(column.name));
-        ThriftValidation.validateColumnData(metadata, column);
+        ThriftValidation.validateColumnData(metadata, column, 
column_parent.super_column != null);
 
         RowMutation rm = new RowMutation(state().getKeyspace(), key);
         try

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=1156775&r1=1156774&r2=1156775&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/thrift/ThriftValidation.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/thrift/ThriftValidation.java 
Thu Aug 11 19:49:24 2011
@@ -23,6 +23,9 @@ package org.apache.cassandra.thrift;
 import java.nio.ByteBuffer;
 import java.util.*;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.apache.cassandra.config.*;
 import org.apache.cassandra.db.*;
 import org.apache.cassandra.db.marshal.AbstractType;
@@ -51,6 +54,8 @@ import org.apache.cassandra.utils.FBUtil
  */
 public class ThriftValidation
 {
+    private static Logger logger = 
LoggerFactory.getLogger(ThriftValidation.class);
+
     public static void validateKey(CFMetaData metadata, ByteBuffer key) throws 
InvalidRequestException
     {
         if (key == null || key.remaining() == 0)
@@ -285,7 +290,7 @@ public class ThriftValidation
 
             validateTtl(cosc.column);
             validateColumnPath(metadata, new 
ColumnPath(metadata.cfName).setSuper_column((ByteBuffer)null).setColumn(cosc.column.name));
-            validateColumnData(metadata, cosc.column);
+            validateColumnData(metadata, cosc.column, false);
         }
 
         if (cosc.super_column != null)
@@ -296,7 +301,7 @@ public class ThriftValidation
             for (Column c : cosc.super_column.columns)
             {
                 validateColumnPath(metadata, new 
ColumnPath(metadata.cfName).setSuper_column(cosc.super_column.name).setColumn(c.name));
-                validateColumnData(metadata, c);
+                validateColumnData(metadata, c, true);
             }
         }
 
@@ -396,9 +401,9 @@ public class ThriftValidation
     }
 
     /**
-     * Validates the data part of the column (everything in the Column object 
but the name)
+     * Validates the data part of the column (everything in the Column object 
but the name, which is assumed to be valid)
      */
-    public static void validateColumnData(CFMetaData metadata, Column column) 
throws InvalidRequestException
+    public static void validateColumnData(CFMetaData metadata, Column column, 
boolean isSubColumn) throws InvalidRequestException
     {
         validateTtl(column);
         if (!column.isSetValue())
@@ -413,15 +418,29 @@ public class ThriftValidation
         }
         catch (MarshalException me)
         {
-            throw new InvalidRequestException(String.format("[%s][%s][%s] = 
[%s] failed validation (%s)",
+            if (logger.isDebugEnabled())
+                logger.debug("rejecting invalid value " + 
ByteBufferUtil.bytesToHex(summarize(column.value)));
+            throw new InvalidRequestException(String.format("(%s) [%s][%s][%s] 
failed validation",
+                                                            me.getMessage(),
                                                             metadata.ksName,
                                                             metadata.cfName,
-                                                            
ByteBufferUtil.bytesToHex(column.name),
-                                                            
ByteBufferUtil.bytesToHex(column.value),
-                                                            me.getMessage()));
+                                                            (isSubColumn ? 
metadata.subcolumnComparator : metadata.comparator).getString(column.name)));
         }
     }
 
+    /**
+     * Return, at most, the first 64K of the buffer. This avoids very large 
column values being
+     * logged in their entirety.
+     */
+    private static ByteBuffer summarize(ByteBuffer buffer)
+    {
+        int MAX = Short.MAX_VALUE;
+        if (buffer.remaining() <= MAX)
+            return buffer;
+        return (ByteBuffer) buffer.slice().limit(buffer.position() + MAX);
+    }
+
+
     public static void validatePredicate(CFMetaData metadata, ColumnParent 
column_parent, SlicePredicate predicate)
             throws InvalidRequestException
     {


Reply via email to