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 2009/03/31 23:36:59 UTC
svn commit: r760665 - in /incubator/cassandra/trunk:
src/org/apache/cassandra/db/Memtable.java
src/org/apache/cassandra/db/MemtableManager.java
test/org/apache/cassandra/db/ColumnFamilyStoreTest.java
Author: jbellis
Date: Tue Mar 31 21:36:59 2009
New Revision: 760665
URL: http://svn.apache.org/viewvc?rev=760665&view=rev
Log:
more thorough ColumnFamilyStoreTest, trying to reproduce a report that deletion markers are being deserialized incorrectly
Modified:
incubator/cassandra/trunk/src/org/apache/cassandra/db/Memtable.java
incubator/cassandra/trunk/src/org/apache/cassandra/db/MemtableManager.java
incubator/cassandra/trunk/test/org/apache/cassandra/db/ColumnFamilyStoreTest.java
Modified: incubator/cassandra/trunk/src/org/apache/cassandra/db/Memtable.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/org/apache/cassandra/db/Memtable.java?rev=760665&r1=760664&r2=760665&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/org/apache/cassandra/db/Memtable.java (original)
+++ incubator/cassandra/trunk/src/org/apache/cassandra/db/Memtable.java Tue Mar 31 21:36:59 2009
@@ -262,6 +262,7 @@
/*
* This version is used to switch memtable and force flush.
+ * Flushing is still done in a separate executor -- forceFlush does not block.
*/
public void forceflush(ColumnFamilyStore cfStore) throws IOException
{
Modified: incubator/cassandra/trunk/src/org/apache/cassandra/db/MemtableManager.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/org/apache/cassandra/db/MemtableManager.java?rev=760665&r1=760664&r2=760665&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/org/apache/cassandra/db/MemtableManager.java (original)
+++ incubator/cassandra/trunk/src/org/apache/cassandra/db/MemtableManager.java Tue Mar 31 21:36:59 2009
@@ -93,7 +93,7 @@
}
private Map<String, List<Memtable>> history_ = new HashMap<String, List<Memtable>>();
- private ExecutorService flusher_ = new DebuggableThreadPoolExecutor( 1,
+ ExecutorService flusher_ = new DebuggableThreadPoolExecutor( 1,
1,
Integer.MAX_VALUE,
TimeUnit.SECONDS,
Modified: incubator/cassandra/trunk/test/org/apache/cassandra/db/ColumnFamilyStoreTest.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/test/org/apache/cassandra/db/ColumnFamilyStoreTest.java?rev=760665&r1=760664&r2=760665&view=diff
==============================================================================
--- incubator/cassandra/trunk/test/org/apache/cassandra/db/ColumnFamilyStoreTest.java (original)
+++ incubator/cassandra/trunk/test/org/apache/cassandra/db/ColumnFamilyStoreTest.java Tue Mar 31 21:36:59 2009
@@ -7,18 +7,27 @@
import java.util.Collection;
import java.util.List;
import java.util.Random;
+import java.util.Arrays;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.Future;
+import java.util.concurrent.ExecutionException;
public class ColumnFamilyStoreTest extends ServerTest {
- @Test
- public void testMain() throws IOException, ColumnFamilyNotDefinedException {
- Table table = Table.open("Table1");
+ static byte[] bytes1, bytes2;
+ static {
Random random = new Random();
- byte[] bytes1 = new byte[1024];
- byte[] bytes2 = new byte[1024];
+ bytes1 = new byte[1024];
+ bytes2 = new byte[128];
random.nextBytes(bytes1);
random.nextBytes(bytes2);
+ }
+
+ @Test
+ public void testMain() throws IOException, ColumnFamilyNotDefinedException, ExecutionException, InterruptedException
+ {
+ Table table = Table.open("Table1");
- for (int i = 800; i < 1000; ++i)
+ for (int i = 900; i < 1000; ++i)
{
String key = Integer.toString(i);
RowMutation rm;
@@ -29,7 +38,7 @@
rm.add("Standard1:" + "Column-" + j, bytes, j);
rm.apply();
- for ( int k = 0; k < 8; ++k )
+ for ( int k = 0; k < 4; ++k )
{
bytes = (j + k) % 2 == 0 ? bytes1 : bytes2;
rm = new RowMutation("Table1", key);
@@ -39,19 +48,51 @@
}
}
- for ( int i = 800; i < 1000; ++i )
+ validateBytes(table);
+ table.getColumnFamilyStore("Standard1").forceFlush();
+ table.getColumnFamilyStore("Super1").forceFlush();
+
+ // wait for flush to finish
+ Future f = MemtableManager.instance().flusher_.submit(new Runnable()
+ {
+ public void run() {}
+ });
+ f.get();
+
+ validateBytes(table);
+ }
+
+ private void validateBytes(Table table)
+ throws ColumnFamilyNotDefinedException, IOException
+ {
+ for ( int i = 900; i < 1000; ++i )
{
String key = Integer.toString(i);
- // TODO actually test results
- ColumnFamily cf = table.get(key, "Super1:SuperColumn-1");
+ ColumnFamily cf;
+
+ cf = table.get(key, "Standard1");
+ Collection<IColumn> columns = cf.getAllColumns();
+ for (IColumn column : columns)
+ {
+ int j = Integer.valueOf(column.name().split("-")[1]);
+ byte[] bytes = j % 2 == 0 ? bytes1 : bytes2;
+ assert Arrays.equals(bytes, column.value());
+ }
+
+ cf = table.get(key, "Super1");
assert cf != null;
Collection<IColumn> superColumns = cf.getAllColumns();
- for ( IColumn superColumn : superColumns )
+ assert superColumns.size() == 8;
+ for (IColumn superColumn : superColumns)
{
+ int j = Integer.valueOf(superColumn.name().split("-")[1]);
Collection<IColumn> subColumns = superColumn.getSubColumns();
- for ( IColumn subColumn : subColumns )
+ assert subColumns.size() == 4;
+ for (IColumn subColumn : subColumns)
{
- //System.out.println(subColumn);
+ int k = Integer.valueOf(subColumn.name().split("-")[1]);
+ byte[] bytes = (j + k) % 2 == 0 ? bytes1 : bytes2;
+ assert Arrays.equals(bytes, subColumn.value());
}
}
}