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
{