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());
                 }
             }
         }