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 2010/01/30 01:10:57 UTC
svn commit: r904687 - in /incubator/cassandra/trunk: ./ src/java/org/
src/java/org/apache/cassandra/io/ src/java/org/apache/cassandra/thrift/
test/system/ test/unit/org/ test/unit/org/apache/cassandra/db/
Author: jbellis
Date: Sat Jan 30 00:10:56 2010
New Revision: 904687
URL: http://svn.apache.org/viewvc?rev=904687&view=rev
Log:
merge from 0.5
Modified:
incubator/cassandra/trunk/ (props changed)
incubator/cassandra/trunk/src/java/org/ (props changed)
incubator/cassandra/trunk/src/java/org/apache/cassandra/io/Streaming.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
incubator/cassandra/trunk/test/system/test_server.py
incubator/cassandra/trunk/test/unit/org/ (props changed)
incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveSuperColumnTest.java
Propchange: incubator/cassandra/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Jan 30 00:10:56 2010
@@ -1,3 +1,4 @@
/incubator/cassandra/branches/cassandra-0.3:774578-796573
/incubator/cassandra/branches/cassandra-0.4:810145-834239,834349-834350
-/incubator/cassandra/branches/cassandra-0.5:888872-903502
+/incubator/cassandra/branches/cassandra-0.5:888872-904679
+/incubator/cassandra/trunk:749219-888871
Propchange: incubator/cassandra/trunk/src/java/org/
('svn:mergeinfo' removed)
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/io/Streaming.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/io/Streaming.java?rev=904687&r1=904686&r2=904687&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/io/Streaming.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/io/Streaming.java Sat Jan 30 00:10:56 2010
@@ -173,11 +173,12 @@
StreamInitiateMessage biMsg = StreamInitiateMessage.serializer().deserialize(new DataInputStream(bufIn));
StreamContextManager.StreamContext[] streamContexts = biMsg.getStreamContext();
- if (streamContexts.length == 0 && StorageService.instance.isBootstrapMode())
+ if (streamContexts.length == 0)
{
if (logger.isDebugEnabled())
logger.debug("no data needed from " + message.getFrom());
- StorageService.instance.removeBootstrapSource(message.getFrom(), new String(message.getHeader(Streaming.TABLE_NAME)));
+ if (StorageService.instance.isBootstrapMode())
+ StorageService.instance.removeBootstrapSource(message.getFrom(), new String(message.getHeader(Streaming.TABLE_NAME)));
return;
}
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java?rev=904687&r1=904686&r2=904687&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java Sat Jan 30 00:10:56 2010
@@ -276,41 +276,6 @@
return column;
}
- /** no values will be mapped to keys with no data */
- private Map<String, Collection<IColumn>> multigetColumns(List<ReadCommand> commands, ConsistencyLevel consistency_level)
- throws InvalidRequestException, UnavailableException, TimedOutException
- {
- Map<String, ColumnFamily> cfamilies = readColumnFamily(commands, consistency_level);
- Map<String, Collection<IColumn>> columnFamiliesMap = new HashMap<String, Collection<IColumn>>();
-
- for (ReadCommand command: commands)
- {
- ColumnFamily cfamily = cfamilies.get(command.key);
- if (cfamily == null)
- continue;
-
- Collection<IColumn> columns = null;
- if (command.queryPath.superColumnName != null)
- {
- IColumn column = cfamily.getColumn(command.queryPath.superColumnName);
- if (column != null)
- {
- columns = column.getSubColumns();
- }
- }
- else
- {
- columns = cfamily.getSortedColumns();
- }
-
- if (columns != null && columns.size() != 0)
- {
- columnFamiliesMap.put(command.key, columns);
- }
- }
- return columnFamiliesMap;
- }
-
/** always returns a ColumnOrSuperColumn for each key, even if there is no data for it */
public Map<String, ColumnOrSuperColumn> multiget(String table, List<String> keys, ColumnPath column_path, ConsistencyLevel consistency_level)
throws InvalidRequestException, UnavailableException, TimedOutException
@@ -338,36 +303,20 @@
}
Map<String, ColumnOrSuperColumn> columnFamiliesMap = new HashMap<String, ColumnOrSuperColumn>();
- Map<String, Collection<IColumn>> columnsMap = multigetColumns(commands, consistency_level);
+ Map<String, ColumnFamily> cfamilies = readColumnFamily(commands, consistency_level);
for (ReadCommand command: commands)
{
- ColumnOrSuperColumn columnorsupercolumn;
-
- Collection<IColumn> columns = columnsMap.get(command.key);
- if (columns == null)
+ ColumnFamily cf = cfamilies.get(command.key);
+ if (cf == null)
{
- columnorsupercolumn = new ColumnOrSuperColumn();
+ columnFamiliesMap.put(command.key, new ColumnOrSuperColumn());
}
else
{
- assert columns.size() == 1;
- IColumn column = columns.iterator().next();
-
-
- if (column.isMarkedForDelete())
- {
- columnorsupercolumn = new ColumnOrSuperColumn();
- }
- else
- {
- columnorsupercolumn = column instanceof org.apache.cassandra.db.Column
- ? createColumnOrSuperColumn_Column(new Column(column.name(), column.value(), column.timestamp()))
- : createColumnOrSuperColumn_SuperColumn(new SuperColumn(column.name(), thriftifySubColumns(column.getSubColumns())));
- }
-
+ List<ColumnOrSuperColumn> tcolumns = thriftifyColumnFamily(cf, command.queryPath.superColumnName != null, false);
+ columnFamiliesMap.put(command.key, tcolumns.size() > 0 ? tcolumns.iterator().next() : new ColumnOrSuperColumn());
}
- columnFamiliesMap.put(command.key, columnorsupercolumn);
}
return columnFamiliesMap;
@@ -381,44 +330,9 @@
checkLoginDone();
- return multigetCountInternal(table, Arrays.asList(key), column_parent, consistency_level).get(key);
- }
-
- private Map<String, Integer> multigetCountInternal(String table, List<String> keys, ColumnParent column_parent, ConsistencyLevel consistency_level)
- throws InvalidRequestException, UnavailableException, TimedOutException
- {
- // validateColumnParent assumes we require simple columns; g_c_c is the only
- // one of the columnParent-taking apis that can also work at the SC level.
- // so we roll a one-off validator here.
- String cfType = ThriftValidation.validateColumnFamily(table, column_parent.column_family);
- if (cfType.equals("Standard") && column_parent.super_column != null)
- {
- throw new InvalidRequestException("columnfamily alone is required for standard CF " + column_parent.column_family);
- }
-
- List<ReadCommand> commands = new ArrayList<ReadCommand>();
- for (String key: keys)
- {
- ThriftValidation.validateKey(key);
- commands.add(new SliceFromReadCommand(table, key, column_parent, ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, true, Integer.MAX_VALUE));
- }
-
- Map<String, Integer> columnFamiliesMap = new HashMap<String, Integer>();
- Map<String, Collection<IColumn>> columnsMap = multigetColumns(commands, consistency_level);
-
- for (ReadCommand command: commands)
- {
- Collection<IColumn> columns = columnsMap.get(command.key);
- if(columns == null)
- {
- columnFamiliesMap.put(command.key, 0);
- }
- else
- {
- columnFamiliesMap.put(command.key, columns.size());
- }
- }
- return columnFamiliesMap;
+ SliceRange range = new SliceRange(ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, false, Integer.MAX_VALUE);
+ SlicePredicate predicate = new SlicePredicate().setSlice_range(range);
+ return get_slice(table, key, column_parent, predicate, consistency_level).size();
}
public void insert(String table, String key, ColumnPath column_path, byte[] value, long timestamp, ConsistencyLevel consistency_level)
Modified: incubator/cassandra/trunk/test/system/test_server.py
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/test/system/test_server.py?rev=904687&r1=904686&r2=904687&view=diff
==============================================================================
--- incubator/cassandra/trunk/test/system/test_server.py (original)
+++ incubator/cassandra/trunk/test/system/test_server.py Sat Jan 30 00:10:56 2010
@@ -675,6 +675,18 @@
assert columns == [Column(_i64(5), 'value5', 6)], columns
+ def test_super_cf_resurrect_subcolumn(self):
+ key = 'vijay'
+ client.insert('Keyspace1', key, ColumnPath('Super1', 'sc1', _i64(4)), 'value4', 0, ConsistencyLevel.ONE)
+
+ client.remove('Keyspace1', key, ColumnPath('Super1', 'sc1'), 1, ConsistencyLevel.ONE)
+
+ client.insert('Keyspace1', key, ColumnPath('Super1', 'sc1', _i64(4)), 'value4', 2, ConsistencyLevel.ONE)
+
+ result = client.get('Keyspace1', key, ColumnPath('Super1', 'sc1'), ConsistencyLevel.ONE)
+ assert result.super_column.columns is not None, result.super_column
+
+
def test_empty_range(self):
assert client.get_range_slice('Keyspace1', ColumnParent('Standard1'), SlicePredicate(column_names=['c1', 'c1']), '', '', 1000, ConsistencyLevel.ONE) == []
_insert_simple()
Propchange: incubator/cassandra/trunk/test/unit/org/
('svn:mergeinfo' removed)
Modified: incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveSuperColumnTest.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveSuperColumnTest.java?rev=904687&r1=904686&r2=904687&view=diff
==============================================================================
--- incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveSuperColumnTest.java (original)
+++ incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveSuperColumnTest.java Sat Jan 30 00:10:56 2010
@@ -158,4 +158,33 @@
assert subColumns.iterator().next().timestamp() == 2;
}
+ @Test
+ public void testRemoveSuperColumnResurrection() throws IOException, ExecutionException, InterruptedException
+ {
+ ColumnFamilyStore store = Table.open("Keyspace1").getColumnFamilyStore("Super2");
+ RowMutation rm;
+ String key = "keyC";
+
+ // add data
+ rm = new RowMutation("Keyspace1", key);
+ addMutation(rm, "Super2", "SC1", 1, "val1", 0);
+ rm.apply();
+
+ // remove
+ rm = new RowMutation("Keyspace1", key);
+ rm.delete(new QueryPath("Super2", "SC1".getBytes()), 1);
+ rm.apply();
+ assertNull(store.getColumnFamily(new NamesQueryFilter(key, new QueryPath("Super2"), "SC1".getBytes()), Integer.MAX_VALUE));
+
+ // resurrect
+ rm = new RowMutation("Keyspace1", key);
+ addMutation(rm, "Super2", "SC1", 1, "val2", 2);
+ rm.apply();
+
+ // validate
+ ColumnFamily resolved = store.getColumnFamily(new NamesQueryFilter(key, new QueryPath("Super2"), "SC1".getBytes()), Integer.MAX_VALUE);
+ Collection<IColumn> subColumns = resolved.getSortedColumns().iterator().next().getSubColumns();
+ assert subColumns.size() == 1;
+ assert subColumns.iterator().next().timestamp() == 2;
+ }
}