Author: [email protected]
Date: Fri Dec 16 16:10:14 2011
New Revision: 1854

Log:
[AMDATUCASSANDRA-141] Enhanced unit test to test with just over 100 rows, which 
reproduced the error. Fixed it by reintroducing the rowLimit for all methods 
that possibly return multiple rows. Methods that cannot return more then one 
row set a row limit of 1.

Modified:
   
trunk/amdatu-cassandra/cassandra-persistencemanager-hector/src/main/java/org/amdatu/cassandra/persistencemanager/hector/service/HectorCassandraPersistenceManagerImpl.java
   
trunk/amdatu-cassandra/cassandra-persistencemanager-hector/src/test/java/org/amdatu/cassandra/persistencemanager/hector/PersistenceManagerTest.java

Modified: 
trunk/amdatu-cassandra/cassandra-persistencemanager-hector/src/main/java/org/amdatu/cassandra/persistencemanager/hector/service/HectorCassandraPersistenceManagerImpl.java
==============================================================================
--- 
trunk/amdatu-cassandra/cassandra-persistencemanager-hector/src/main/java/org/amdatu/cassandra/persistencemanager/hector/service/HectorCassandraPersistenceManagerImpl.java
  (original)
+++ 
trunk/amdatu-cassandra/cassandra-persistencemanager-hector/src/main/java/org/amdatu/cassandra/persistencemanager/hector/service/HectorCassandraPersistenceManagerImpl.java
  Fri Dec 16 16:10:14 2011
@@ -63,6 +63,9 @@
  */
 public class HectorCassandraPersistenceManagerImpl extends 
CassandraPersistenceManagerBaseImpl implements
     HectorCassandraPersistenceManager {
+    // Maximum amount of rows to retrieve in queries
+    protected static final int ROW_LIMIT = 100000;
+    
     public void start() {
         super.start();
 
@@ -219,7 +222,7 @@
         List<String> rowKeys = new ArrayList<String>();
         if (isSuperColumnFamily(columnFamilyName)) {
             Iterator<SuperRow<String, String, String, ByteBuffer>> iter =
-                getSuperRows(columnFamilyName, null, ByteBuffer.class, 1, 
column, superColumn);
+                getSuperRows(columnFamilyName, null, ByteBuffer.class, 
ROW_LIMIT, 1, column, superColumn);
             while (iter.hasNext()) {
                 SuperRow<String, String, String, ByteBuffer> row = iter.next();
                 int scSize = row.getSuperSlice().getSuperColumns().size();
@@ -233,7 +236,7 @@
             }
         }
         else {
-            Iterator<Row<String, String, ByteBuffer>> iter = 
getRows(columnFamilyName, ByteBuffer.class, 1, column);
+            Iterator<Row<String, String, ByteBuffer>> iter = 
getRows(columnFamilyName, ByteBuffer.class, ROW_LIMIT, 1, column);
             while (iter.hasNext()) {
                 Row<String, String, ByteBuffer> row = iter.next();
                 int scSize = row.getColumnSlice().getColumns().size();
@@ -411,7 +414,7 @@
         validateRowKey(rowKey);
 
         Iterator<SuperRow<String, String, String, T>> superRows =
-            getSuperRows(columnFamily, rowKey, clazz, COLUMN_LIMIT, null, 
null);
+            getSuperRows(columnFamily, rowKey, clazz, 1, COLUMN_LIMIT, null, 
null);
         if (superRows.hasNext()) {
             return superRows.next();
         }
@@ -428,7 +431,7 @@
         validateSuperColumn(superColumn);
 
         Iterator<SuperRow<String, String, String, T>> superRows =
-            getSuperRows(columnFamilyName, rowKey, clazz, COLUMN_LIMIT, null, 
superColumn);
+            getSuperRows(columnFamilyName, rowKey, clazz, 1, COLUMN_LIMIT, 
null, superColumn);
         if (superRows.hasNext()) {
             return superRows.next();
         }
@@ -442,7 +445,7 @@
         // Validate input arguments
         validateCF(columnFamilyName);
 
-        return getSuperRows(columnFamilyName, null, clazz, COLUMN_LIMIT, null, 
null);
+        return getSuperRows(columnFamilyName, null, clazz, ROW_LIMIT, 
COLUMN_LIMIT, null, null);
     }
 
     public <T> Iterator<SuperRow<String, String, String, T>> 
getSuperRows(String columnFamilyName, String superColumn,
@@ -451,14 +454,14 @@
         validateCF(columnFamilyName);
         validateSuperColumn(superColumn);
 
-        return getSuperRows(columnFamilyName, null, clazz, COLUMN_LIMIT, null, 
superColumn);
+        return getSuperRows(columnFamilyName, null, clazz, ROW_LIMIT, 
COLUMN_LIMIT, null, superColumn);
     }
 
     public <T> Iterator<Row<String, String, T>> getRows(final String 
columnFamilyName, final Class<T> clazz) {
         // Validate input arguments
         validateCF(columnFamilyName);
 
-        return getRows(columnFamilyName, clazz, COLUMN_LIMIT, null);
+        return getRows(columnFamilyName, clazz, ROW_LIMIT, COLUMN_LIMIT, null);
     }
 
     private <T extends Object> T internalGetValue(final String 
columnFamilyName, final String rowKey,
@@ -552,7 +555,7 @@
     }
 
     private <T> Iterator<SuperRow<String, String, String, T>> 
getSuperRows(final String columnFamilyName,
-        final String rowKey, final Class<T> clazz, final int colLimit, final 
String column, final String superColumn) {
+        final String rowKey, final Class<T> clazz, final int rowLimit, final 
int colLimit, final String column, final String superColumn) {
         StringSerializer serializer = StringSerializer.get();
         Serializer<T> valueSerializer = getSerializer(clazz);
         RangeSuperSlicesQuery<String, String, String, T> rangeSlicesQuery =
@@ -560,6 +563,7 @@
                 .createRangeSuperSlicesQuery(getHectorKeyspace(), serializer, 
serializer, serializer, valueSerializer)
                 .setColumnFamily(columnFamilyName)
                 .setKeys(null, null)
+                .setRowCount(rowLimit)
                 .setRange(superColumn, superColumn, false, colLimit);
         if (rowKey != null) {
             rangeSlicesQuery.setKeys(rowKey, rowKey);
@@ -578,13 +582,14 @@
     }
 
     private <T> Iterator<Row<String, String, T>> getRows(final String 
columnFamilyName, final Class<T> clazz,
-        final int colLimit, final String column) {
+        final int rowLimit, final int colLimit, final String column) {
         StringSerializer serializer = StringSerializer.get();
         Serializer<T> valueSerializer = getSerializer(clazz);
         RangeSlicesQuery<String, String, T> rangeSlicesQuery =
             HFactory.createRangeSlicesQuery(getHectorKeyspace(), serializer, 
serializer, valueSerializer)
                 .setColumnFamily(columnFamilyName)
                 .setKeys(null, null)
+                .setRowCount(rowLimit)
                 .setRange(column, column, false, colLimit);
         if (column != null) {
             rangeSlicesQuery.setColumnNames(column);

Modified: 
trunk/amdatu-cassandra/cassandra-persistencemanager-hector/src/test/java/org/amdatu/cassandra/persistencemanager/hector/PersistenceManagerTest.java
==============================================================================
--- 
trunk/amdatu-cassandra/cassandra-persistencemanager-hector/src/test/java/org/amdatu/cassandra/persistencemanager/hector/PersistenceManagerTest.java
 (original)
+++ 
trunk/amdatu-cassandra/cassandra-persistencemanager-hector/src/test/java/org/amdatu/cassandra/persistencemanager/hector/PersistenceManagerTest.java
 Fri Dec 16 16:10:14 2011
@@ -38,7 +38,8 @@
     private static final String TEST_SUPER_CF = "PMUnitTestSuperColumnFamily";
     private static final String TEST_STANDARD_CF = 
"PMUnitTestStandardColumnFamily";
     private static final String TEST_SUPERCOLUMN = "PMUnitTestSuperColumn";
-    private static final String TEST_COLUMN = "PMUnitTestColumn";
+    private static final String TEST_COLUMN = "PMUnitTestColumn";
+    private static final int NR_TEST_ROWS = 105;
 
     @BeforeClass
     public static void setup() throws Exception {
@@ -150,8 +151,8 @@
         // Step 1 - verify that ColumnFamilies exist
         Assert.assertTrue(m_hectorPM.exists(cf));
 
-        // Step 2 - Insert 100 rows
-        for (int i = 1; i <= 100; i++) {
+        // Step 2 - Insert NR_TEST_ROWS rows
+        for (int i = 1; i <= NR_TEST_ROWS; i++) {
             String rowKey = "row_" + i;
             byte[] value = ("value_" + i).getBytes("UTF-8");
             m_hectorPM.setValue(cf, rowKey, superColumn, TEST_COLUMN, value);
@@ -167,7 +168,7 @@
             }
 
         }
-        LOG.info("1000 rows added to CF '" + cf + "'");
+        LOG.info(NR_TEST_ROWS + " rows added to CF '" + cf + "'");
         // Step 3 - test working of getColumns, getRows, getSuperColumns and 
getSuperRows
         if (isSuper) {
             Iterator<SuperRow<String, String, String, String>> rows = 
m_hectorPM.getSuperRows(cf, String.class);
@@ -202,14 +203,14 @@
             }
         }
 
-        // Step 4 - Test if 1000 row keys are returned
-        Assert.assertEquals(100, m_hectorPM.getRowKeys(cf).size());
+        // Step 4 - Test if NR_TEST_ROWS row keys are returned
+        Assert.assertEquals(NR_TEST_ROWS, m_hectorPM.getRowKeys(cf).size());
         if (isSuper) {
-            Assert.assertEquals(100, m_hectorPM.getRowKeys(cf, null, 
TEST_SUPERCOLUMN).size());
-            Assert.assertEquals(100, m_hectorPM.getRowKeys(cf, TEST_COLUMN, 
TEST_SUPERCOLUMN).size());
+            Assert.assertEquals(NR_TEST_ROWS, m_hectorPM.getRowKeys(cf, null, 
TEST_SUPERCOLUMN).size());
+            Assert.assertEquals(NR_TEST_ROWS, m_hectorPM.getRowKeys(cf, 
TEST_COLUMN, TEST_SUPERCOLUMN).size());
         }
         else {
-            Assert.assertEquals(100, m_hectorPM.getRowKeys(cf, TEST_COLUMN, 
null).size());
+            Assert.assertEquals(NR_TEST_ROWS, m_hectorPM.getRowKeys(cf, 
TEST_COLUMN, null).size());
         }
 
         // Step 5 - Delete 5 columns
@@ -223,7 +224,8 @@
                 m_hectorPM.deleteColumn(cf, "row_" + i, null, TEST_COLUMN);
                 Assert.assertFalse(m_hectorPM.exists(cf, rowKey, null, 
TEST_COLUMN));
             }
-        }
+        }
+        LOG.info("5 columns deleted from CF '" + cf + "'");
 
         // Step 6 - Delete 5 rows
         for (int i = 6; i <= 10; i++) {
@@ -231,8 +233,11 @@
             Assert.assertFalse(m_hectorPM.exists(cf, "row_" + i));
             Assert.assertFalse(m_hectorPM.exists(cf, "row_" + i, superColumn, 
TEST_COLUMN));
         }
-        LOG.info("5 rows deleted from CF '" + cf + "'");
-        Assert.assertTrue(m_hectorPM.getRowKeys(cf).size() == 90);
+        LOG.info("5 rows deleted from CF '" + cf + "'");
+        
+        // Now 10 rows should be deleted since we also removed 5 columns, 
which was the only column
+        // in these rows.
+        Assert.assertEquals(NR_TEST_ROWS-10, m_hectorPM.getRowKeys(cf).size());
     }
 
     private void assertEqual(final byte[] ba1, final byte[] ba2) {
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits

Reply via email to