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