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)


Reply via email to