Author: slebresne
Date: Mon Aug 1 14:47:04 2011
New Revision: 1152808
URL: http://svn.apache.org/viewvc?rev=1152808&view=rev
Log:
Merge from 0.8
Modified:
cassandra/trunk/ (props changed)
cassandra/trunk/CHANGES.txt
cassandra/trunk/contrib/ (props changed)
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/AbstractColumnContainer.java
cassandra/trunk/src/java/org/apache/cassandra/db/CounterMutation.java
cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java
cassandra/trunk/src/java/org/apache/cassandra/db/SuperColumn.java
cassandra/trunk/test/unit/org/apache/cassandra/db/CounterMutationTest.java
Propchange: cassandra/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Aug 1 14:47:04 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-1152110,1152265,1152793
+/cassandra/branches/cassandra-0.8:1090934-1125013,1125019-1152110,1152265,1152793,1152795
/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=1152808&r1=1152807&r2=1152808&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Mon Aug 1 14:47:04 2011
@@ -41,6 +41,8 @@
* speedup bytes to hex conversions dramatically (CASSANDRA-2850)
* fix bug where dirty commit logs were removed (and avoid keeping segment
with no post-flush activity permanently dirty) (CASSANDRA-2829)
+ * fix throwing exception with batch mutation of counter super columns
+ (CASSANDRA-2949)
0.8.2
Propchange: cassandra/trunk/contrib/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Aug 1 14:47:04 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-1152110,1152265,1152793
+/cassandra/branches/cassandra-0.8/contrib:1090934-1125013,1125019-1152110,1152265,1152793,1152795
/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
Propchange:
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Aug 1 14:47:04 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-1152110,1152265,1152793
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1090934-1125013,1125019-1152110,1152265,1152793,1152795
/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 Aug 1 14:47:04 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-1152110,1152265,1152793
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1090934-1125013,1125019-1152110,1152265,1152793,1152795
/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 Aug 1 14:47:04 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-1152110,1152265,1152793
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1090934-1125013,1125019-1152110,1152265,1152793,1152795
/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 Aug 1 14:47:04 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-1152110,1152265,1152793
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1090934-1125013,1125019-1152110,1152265,1152793,1152795
/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 Aug 1 14:47:04 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-1152110,1152265,1152793
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1090934-1125013,1125019-1152110,1152265,1152793,1152795
/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/AbstractColumnContainer.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/AbstractColumnContainer.java?rev=1152808&r1=1152807&r2=1152808&view=diff
==============================================================================
---
cassandra/trunk/src/java/org/apache/cassandra/db/AbstractColumnContainer.java
(original)
+++
cassandra/trunk/src/java/org/apache/cassandra/db/AbstractColumnContainer.java
Mon Aug 1 14:47:04 2011
@@ -173,6 +173,43 @@ public abstract class AbstractColumnCont
columns.remove(columnName);
}
+ public void retainAll(AbstractColumnContainer container)
+ {
+ Iterator<IColumn> iter = iterator();
+ Iterator<IColumn> toRetain = container.iterator();
+ IColumn current = iter.hasNext() ? iter.next() : null;
+ IColumn retain = toRetain.hasNext() ? toRetain.next() : null;
+ AbstractType comparator = getComparator();
+ while (current != null && retain != null)
+ {
+ int c = comparator.compare(current.name(), retain.name());
+ if (c == 0)
+ {
+ if (current instanceof SuperColumn)
+ {
+ assert retain instanceof SuperColumn;
+ ((SuperColumn)current).retainAll((SuperColumn)retain);
+ }
+ current = iter.hasNext() ? iter.next() : null;
+ retain = toRetain.hasNext() ? toRetain.next() : null;
+ }
+ else if (c < 0)
+ {
+ iter.remove();
+ current = iter.hasNext() ? iter.next() : null;
+ }
+ else // c > 0
+ {
+ retain = toRetain.hasNext() ? toRetain.next() : null;
+ }
+ }
+ while (current != null)
+ {
+ iter.remove();
+ current = iter.hasNext() ? iter.next() : null;
+ }
+ }
+
public int getColumnCount()
{
return columns.size();
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/CounterMutation.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/CounterMutation.java?rev=1152808&r1=1152807&r2=1152808&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/CounterMutation.java
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/CounterMutation.java Mon
Aug 1 14:47:04 2011
@@ -117,37 +117,18 @@ public class CounterMutation implements
continue;
row = mergeOldShards(readCommand.table, row);
- replicationMutation.add(row.cf);
+ ColumnFamily cf = row.cf;
+ if (cf.isSuper())
+ cf.retainAll(rowMutation.getColumnFamily(cf.metadata().cfId));
+ replicationMutation.add(cf);
}
return replicationMutation;
}
private void addReadCommandFromColumnFamily(String table, ByteBuffer key,
ColumnFamily columnFamily, List<ReadCommand> commands)
{
- // CF type: regular
- if (!columnFamily.isSuper())
- {
- QueryPath queryPath = new
QueryPath(columnFamily.metadata().cfName);
- commands.add(new SliceByNamesReadCommand(table, key, queryPath,
columnFamily.getColumnNames()));
- }
- else
- {
- // CF type: super
- for (IColumn superColumn : columnFamily.getSortedColumns())
- {
- QueryPath queryPath = new
QueryPath(columnFamily.metadata().cfName, superColumn.name());
-
- // construct set of sub-column names
- Collection<IColumn> subColumns = superColumn.getSubColumns();
- Collection<ByteBuffer> subColNames = new
HashSet<ByteBuffer>(subColumns.size());
- for (IColumn subCol : subColumns)
- {
- subColNames.add(subCol.name());
- }
-
- commands.add(new SliceByNamesReadCommand(table, key,
queryPath, subColNames));
- }
- }
+ QueryPath queryPath = new QueryPath(columnFamily.metadata().cfName);
+ commands.add(new SliceByNamesReadCommand(table, key, queryPath,
columnFamily.getColumnNames()));
}
private Row mergeOldShards(String table, Row row) throws IOException
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java?rev=1152808&r1=1152807&r2=1152808&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java Mon Aug
1 14:47:04 2011
@@ -97,6 +97,11 @@ public class RowMutation implements IMut
return modifications_.values();
}
+ public ColumnFamily getColumnFamily(Integer cfId)
+ {
+ return modifications_.get(cfId);
+ }
+
/**
* Returns mutation representing a Hints to be sent to <code>address</code>
* as soon as it becomes available.
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/SuperColumn.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/SuperColumn.java?rev=1152808&r1=1152807&r2=1152808&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/SuperColumn.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/SuperColumn.java Mon Aug
1 14:47:04 2011
@@ -25,6 +25,7 @@ import java.nio.ByteBuffer;
import java.security.MessageDigest;
import java.util.Collection;
import java.util.Comparator;
+import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentSkipListMap;
Modified:
cassandra/trunk/test/unit/org/apache/cassandra/db/CounterMutationTest.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/CounterMutationTest.java?rev=1152808&r1=1152807&r2=1152808&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/CounterMutationTest.java
(original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/CounterMutationTest.java
Mon Aug 1 14:47:04 2011
@@ -26,6 +26,7 @@ import org.apache.cassandra.CleanupHelpe
import org.apache.cassandra.thrift.*;
import org.apache.cassandra.utils.*;
import static org.apache.cassandra.db.context.CounterContext.ContextState;
+import static org.apache.cassandra.utils.ByteBufferUtil.bytes;
public class CounterMutationTest extends CleanupHelper
{
@@ -72,5 +73,39 @@ public class CounterMutationTest extends
assert s.getNodeId().equals(id2);
assert s.getCount() == 5;
}
+
+ @Test
+ public void testMutateSuperColumns() throws IOException
+ {
+ RowMutation rm;
+ CounterMutation cm;
+
+ rm = new RowMutation("Keyspace1", bytes("key1"));
+ rm.addCounter(new QueryPath("SuperCounter1", bytes("sc1"),
bytes("Column1")), 1);
+ rm.addCounter(new QueryPath("SuperCounter1", bytes("sc2"),
bytes("Column1")), 1);
+ cm = new CounterMutation(rm, ConsistencyLevel.ONE);
+ cm.apply();
+
+ rm = new RowMutation("Keyspace1", bytes("key1"));
+ rm.addCounter(new QueryPath("SuperCounter1", bytes("sc1"),
bytes("Column2")), 1);
+ rm.addCounter(new QueryPath("SuperCounter1", bytes("sc2"),
bytes("Column2")), 1);
+ cm = new CounterMutation(rm, ConsistencyLevel.ONE);
+ cm.apply();
+
+ RowMutation reprm = cm.makeReplicationMutation();
+ ColumnFamily cf = reprm.getColumnFamilies().iterator().next();
+
+ assert cf.getColumnCount() == 2;
+
+ IColumn sc1 = cf.getColumn(bytes("sc1"));
+ assert sc1 != null && sc1 instanceof SuperColumn;
+ assert sc1.getSubColumns().size() == 1;
+ assert sc1.getSubColumn(bytes("Column2")) != null;
+
+ IColumn sc2 = cf.getColumn(bytes("sc2"));
+ assert sc2 != null && sc2 instanceof SuperColumn;
+ assert sc2.getSubColumns().size() == 1;
+ assert sc2.getSubColumn(bytes("Column2")) != null;
+ }
}