Author: jbellis
Date: Sat Dec 26 00:22:15 2009
New Revision: 893907
URL: http://svn.apache.org/viewvc?rev=893907&view=rev
Log:
extract thriftifyColumnFamily and apply to getSlice and get_slice_range. patch
by jbellis; reviewed by Jonathan Hseu for CASSANDRA-649
Modified:
incubator/cassandra/branches/cassandra-0.5/CHANGES.txt
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/service/CassandraServer.java
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/service/StorageProxy.java
incubator/cassandra/branches/cassandra-0.5/test/system/test_server.py
Modified: incubator/cassandra/branches/cassandra-0.5/CHANGES.txt
URL:
http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.5/CHANGES.txt?rev=893907&r1=893906&r2=893907&view=diff
==============================================================================
--- incubator/cassandra/branches/cassandra-0.5/CHANGES.txt (original)
+++ incubator/cassandra/branches/cassandra-0.5/CHANGES.txt Sat Dec 26 00:22:15
2009
@@ -1,5 +1,6 @@
0.5.0 RC2
- * fix bugs in converting get_slice_range results to Thrift (CASSANDRA-647)
+ * fix bugs in converting get_slice_range results to Thrift
+ (CASSANDRA-647, CASSANDRA-649)
0.5.0 RC1
Modified:
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/service/CassandraServer.java
URL:
http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/service/CassandraServer.java?rev=893907&r1=893906&r2=893907&view=diff
==============================================================================
---
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/service/CassandraServer.java
(original)
+++
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/service/CassandraServer.java
Sat Dec 26 00:22:15 2009
@@ -169,39 +169,38 @@
private Map<String, List<ColumnOrSuperColumn>> getSlice(List<ReadCommand>
commands, int consistency_level)
throws InvalidRequestException, UnavailableException, TimedOutException
{
- Map<String, ColumnFamily> cfamilies = readColumnFamily(commands,
consistency_level);
+ Map<String, ColumnFamily> columnFamilies = readColumnFamily(commands,
consistency_level);
Map<String, List<ColumnOrSuperColumn>> columnFamiliesMap = new
HashMap<String, List<ColumnOrSuperColumn>>();
for (ReadCommand command: commands)
{
- ColumnFamily cfamily = cfamilies.get(command.key);
+ ColumnFamily cf = columnFamilies.get(command.key);
boolean reverseOrder = command instanceof SliceFromReadCommand &&
((SliceFromReadCommand)command).reversed;
-
- if (cfamily == null || cfamily.getColumnsMap().size() == 0)
- {
- columnFamiliesMap.put(command.key, EMPTY_COLUMNS);
- continue;
- }
- if (command.queryPath.superColumnName != null)
- {
- IColumn column =
cfamily.getColumnsMap().values().iterator().next();
- Collection<IColumn> subcolumns = column.getSubColumns();
- if (subcolumns == null || subcolumns.isEmpty())
- {
- columnFamiliesMap.put(command.key, EMPTY_COLUMNS);
- continue;
- }
- columnFamiliesMap.put(command.key,
thriftifyColumns(subcolumns, reverseOrder));
- continue;
- }
- if (cfamily.isSuper())
- columnFamiliesMap.put(command.key,
thriftifySuperColumns(cfamily.getSortedColumns(), reverseOrder));
- else
- columnFamiliesMap.put(command.key,
thriftifyColumns(cfamily.getSortedColumns(), reverseOrder));
+ List<ColumnOrSuperColumn> thriftifiedColumns =
thriftifyColumnFamily(cf, command.queryPath.superColumnName != null,
reverseOrder);
+ columnFamiliesMap.put(command.key, thriftifiedColumns);
}
return columnFamiliesMap;
}
+ private List<ColumnOrSuperColumn> thriftifyColumnFamily(ColumnFamily cf,
boolean subcolumnsOnly, boolean reverseOrder)
+ {
+ if (cf == null || cf.getColumnsMap().size() == 0)
+ return EMPTY_COLUMNS;
+ if (subcolumnsOnly)
+ {
+ IColumn column = cf.getColumnsMap().values().iterator().next();
+ Collection<IColumn> subcolumns = column.getSubColumns();
+ if (subcolumns == null || subcolumns.isEmpty())
+ return EMPTY_COLUMNS;
+ else
+ return thriftifyColumns(subcolumns, reverseOrder);
+ }
+ if (cf.isSuper())
+ return thriftifySuperColumns(cf.getSortedColumns(), reverseOrder);
+ else
+ return thriftifyColumns(cf.getSortedColumns(), reverseOrder);
+ }
+
public List<ColumnOrSuperColumn> get_slice(String keyspace, String key,
ColumnParent column_parent, SlicePredicate predicate, int consistency_level)
throws InvalidRequestException, UnavailableException, TimedOutException
{
@@ -566,7 +565,7 @@
throw new InvalidRequestException("maxRows must be positive");
}
- List<Pair<String,Collection<IColumn>>> rows;
+ List<Pair<String, ColumnFamily>> rows;
try
{
DecoratedKey startKey =
StorageService.getPartitioner().decorateKey(start_key);
@@ -581,14 +580,9 @@
List<KeySlice> keySlices = new ArrayList<KeySlice>(rows.size());
boolean reversed = predicate.slice_range != null &&
predicate.slice_range.reversed;
- for (Pair<String, Collection<IColumn>> row : rows)
+ for (Pair<String, ColumnFamily> row : rows)
{
- Collection<IColumn> columns = row.right;
- List<ColumnOrSuperColumn> thriftifiedColumns;
- if (DatabaseDescriptor.getColumnFamilyType(keyspace,
column_parent.column_family).equals("Standard"))
- thriftifiedColumns = thriftifyColumns(columns, reversed);
- else
- thriftifiedColumns = thriftifySuperColumns(columns, reversed);
+ List<ColumnOrSuperColumn> thriftifiedColumns =
thriftifyColumnFamily(row.right, column_parent.super_column != null, reversed);
keySlices.add(new KeySlice(row.left, thriftifiedColumns));
}
Modified:
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/service/StorageProxy.java
URL:
http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/service/StorageProxy.java?rev=893907&r1=893906&r2=893907&view=diff
==============================================================================
---
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/service/StorageProxy.java
(original)
+++
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/service/StorageProxy.java
Sat Dec 26 00:22:15 2009
@@ -512,7 +512,7 @@
return rows;
}
- static List<Pair<String, Collection<IColumn>>>
getRangeSlice(RangeSliceCommand command, int consistency_level) throws
IOException, UnavailableException, TimedOutException
+ static List<Pair<String, ColumnFamily>> getRangeSlice(RangeSliceCommand
command, int consistency_level) throws IOException, UnavailableException,
TimedOutException
{
long startTime = System.currentTimeMillis();
TokenMetadata tokenMetadata =
StorageService.instance().getTokenMetadata();
@@ -577,18 +577,17 @@
}
while (!endPoint.equals(startEndpoint));
- List<Pair<String, Collection<IColumn>>> results = new
ArrayList<Pair<String, Collection<IColumn>>>(rows.size());
+ List<Pair<String, ColumnFamily>> results = new ArrayList<Pair<String,
ColumnFamily>>(rows.size());
for (Map.Entry<String, ColumnFamily> entry : rows.entrySet())
{
ColumnFamily cf = entry.getValue();
- Collection<IColumn> columns = (cf == null) ?
Collections.<IColumn>emptyList() : cf.getSortedColumns();
- results.add(new Pair<String, Collection<IColumn>>(entry.getKey(),
columns));
+ results.add(new Pair<String, ColumnFamily>(entry.getKey(), cf));
}
- Collections.sort(results, new Comparator<Pair<String,
Collection<IColumn>>>()
+ Collections.sort(results, new Comparator<Pair<String, ColumnFamily>>()
{
- public int compare(Pair<String, Collection<IColumn>> o1,
Pair<String, Collection<IColumn>> o2)
+ public int compare(Pair<String, ColumnFamily> o1, Pair<String,
ColumnFamily> o2)
{
- return keyComparator.compare(o1.left, o2.left);
+ return keyComparator.compare(o1.left, o2.left);
}
});
rangeStats.add(System.currentTimeMillis() - startTime);
Modified: incubator/cassandra/branches/cassandra-0.5/test/system/test_server.py
URL:
http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.5/test/system/test_server.py?rev=893907&r1=893906&r2=893907&view=diff
==============================================================================
--- incubator/cassandra/branches/cassandra-0.5/test/system/test_server.py
(original)
+++ incubator/cassandra/branches/cassandra-0.5/test/system/test_server.py Sat
Dec 26 00:22:15 2009
@@ -533,9 +533,8 @@
cp = ColumnParent('Super3', 'sc1')
result = client.get_range_slice("Keyspace2", cp,
SlicePredicate(column_names=['col1', 'col3']), 'key2', 'key4', 5,
ConsistencyLevel.ONE)
assert len(result) == 3
- sc = result[0].columns[0].super_column
- assert sc.columns[0].name == 'col1'
- assert sc.columns[1].name == 'col3'
+ assert result[0].columns[0].column.name == 'col1'
+ assert result[0].columns[1].column.name == 'col3'
cp = ColumnParent('Super3')
result = client.get_range_slice("Keyspace2", cp,
SlicePredicate(column_names=['sc1']), 'key2', 'key4', 5, ConsistencyLevel.ONE)