Repository: cassandra
Updated Branches:
  refs/heads/trunk c799a98f0 -> 6404e015f


Add CASSANDRA-9195 unit tests

patch by Branimir Lambov


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/f43efaa1
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/f43efaa1
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/f43efaa1

Branch: refs/heads/trunk
Commit: f43efaa1bdeec1057a8097fdb5ab62b4c9c19e67
Parents: 33c5913
Author: Branimir Lambov <branimir.lam...@datastax.com>
Authored: Fri May 1 19:42:50 2015 +0300
Committer: Aleksey Yeschenko <alek...@apache.org>
Committed: Fri May 1 19:44:03 2015 +0300

----------------------------------------------------------------------
 .../db/commitlog/CommitLogArchiver.java         |   2 +-
 .../db/RecoveryManagerTruncateTest.java         | 179 +++++++++++++++----
 2 files changed, 142 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/f43efaa1/src/java/org/apache/cassandra/db/commitlog/CommitLogArchiver.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/commitlog/CommitLogArchiver.java 
b/src/java/org/apache/cassandra/db/commitlog/CommitLogArchiver.java
index 602cf94..91f3179 100644
--- a/src/java/org/apache/cassandra/db/commitlog/CommitLogArchiver.java
+++ b/src/java/org/apache/cassandra/db/commitlog/CommitLogArchiver.java
@@ -56,7 +56,7 @@ public class CommitLogArchiver
     final String archiveCommand;
     final String restoreCommand;
     final String restoreDirectories;
-    public final long restorePointInTime;
+    public long restorePointInTime;
     public final TimeUnit precision;
 
     public CommitLogArchiver()

http://git-wip-us.apache.org/repos/asf/cassandra/blob/f43efaa1/test/unit/org/apache/cassandra/db/RecoveryManagerTruncateTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/RecoveryManagerTruncateTest.java 
b/test/unit/org/apache/cassandra/db/RecoveryManagerTruncateTest.java
index 1f7d388..817b8e9 100644
--- a/test/unit/org/apache/cassandra/db/RecoveryManagerTruncateTest.java
+++ b/test/unit/org/apache/cassandra/db/RecoveryManagerTruncateTest.java
@@ -19,15 +19,14 @@
 package org.apache.cassandra.db;
 
 import static org.apache.cassandra.Util.column;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.junit.Assert.*;
 
 import java.io.IOException;
+import org.junit.Test;
 
 import org.apache.cassandra.SchemaLoader;
 import org.apache.cassandra.Util;
 import org.apache.cassandra.db.commitlog.CommitLog;
-import org.junit.Test;
 import org.apache.cassandra.utils.ByteBufferUtil;
 
 /**
@@ -35,46 +34,150 @@ import org.apache.cassandra.utils.ByteBufferUtil;
  */
 public class RecoveryManagerTruncateTest extends SchemaLoader
 {
-       @Test
-       public void testTruncate() throws IOException
-       {
-               Keyspace keyspace = Keyspace.open("Keyspace1");
-               ColumnFamilyStore cfs = 
keyspace.getColumnFamilyStore("Standard1");
+    @Test
+    public void testTruncate() throws IOException
+    {
+        Keyspace keyspace = Keyspace.open("Keyspace1");
+        ColumnFamilyStore cfs = keyspace.getColumnFamilyStore("Standard1");
 
-               Mutation rm;
-               ColumnFamily cf;
+        Mutation rm;
+        ColumnFamily cf;
 
-               // add a single cell
+        // add a single cell
         cf = ArrayBackedSortedColumns.factory.create("Keyspace1", "Standard1");
-               cf.addColumn(column("col1", "val1", 1L));
+        cf.addColumn(column("col1", "val1", 1L));
         rm = new Mutation("Keyspace1", ByteBufferUtil.bytes("keymulti"), cf);
-               rm.apply();
+        rm.apply();
+        long time = System.currentTimeMillis();
 
-               // Make sure data was written
-               assertNotNull(getFromTable(keyspace, "Standard1", "keymulti", 
"col1"));
+        // Make sure data was written
+        assertNotNull(getFromTable(keyspace, "Standard1", "keymulti", "col1"));
 
-               // and now truncate it
-               cfs.truncateBlocking();
+        // and now truncate it
+        cfs.truncateBlocking();
         CommitLog.instance.resetUnsafe();
-               CommitLog.instance.recover();
-
-               // and validate truncation.
-               assertNull(getFromTable(keyspace, "Standard1", "keymulti", 
"col1"));
-       }
-
-       private Cell getFromTable(Keyspace keyspace, String cfName, String 
keyName, String columnName)
-       {
-               ColumnFamily cf;
-               ColumnFamilyStore cfStore = 
keyspace.getColumnFamilyStore(cfName);
-               if (cfStore == null)
-               {
-                       return null;
-               }
-               cf = cfStore.getColumnFamily(Util.namesQueryFilter(cfStore, 
Util.dk(keyName), columnName));
-               if (cf == null)
-               {
-                       return null;
-               }
-               return cf.getColumn(Util.cellname(columnName));
-       }
+        CommitLog.instance.recover();
+
+        // and validate truncation.
+        assertNull(getFromTable(keyspace, "Standard1", "keymulti", "col1"));
+        assertTrue(SystemKeyspace.getTruncatedAt(cfs.metadata.cfId) > time);
+    }
+
+    @Test
+    public void testTruncatePointInTime() throws IOException
+    {
+        Keyspace keyspace = Keyspace.open("Keyspace1");
+        ColumnFamilyStore cfs = keyspace.getColumnFamilyStore("Standard1");
+
+        Mutation rm;
+        ColumnFamily cf;
+
+        // add a single cell
+        cf = ArrayBackedSortedColumns.factory.create("Keyspace1", "Standard1");
+        cf.addColumn(column("col2", "val1", 1L));
+        rm = new Mutation("Keyspace1", ByteBufferUtil.bytes("keymulti"), cf);
+        rm.apply();
+
+        // Make sure data was written
+        long time = System.currentTimeMillis();
+        assertNotNull(getFromTable(keyspace, "Standard1", "keymulti", "col2"));
+
+        // and now truncate it
+        cfs.truncateBlocking();
+
+        // verify truncation
+        assertNull(getFromTable(keyspace, "Standard1", "keymulti", "col2"));
+
+        try
+        {
+            // Restore to point in time.
+            CommitLog.instance.archiver.restorePointInTime = time;
+            CommitLog.instance.resetUnsafe();
+            CommitLog.instance.recover();
+        }
+        finally
+        {
+            CommitLog.instance.archiver.restorePointInTime = Long.MAX_VALUE;
+        }
+
+        // Validate pre-truncation data was restored.
+        assertNotNull(getFromTable(keyspace, "Standard1", "keymulti", "col2"));
+        // And that we don't have a truncation record after restore time.
+        assertFalse(SystemKeyspace.getTruncatedAt(cfs.metadata.cfId) > time);
+    }
+
+    @Test
+    public void testTruncatePointInTimeReplayList() throws IOException
+    {
+        Keyspace keyspace = Keyspace.open("Keyspace1");
+        ColumnFamilyStore cfs1 = keyspace.getColumnFamilyStore("Standard1");
+        ColumnFamilyStore cfs2 = keyspace.getColumnFamilyStore("Standard2");
+
+        Mutation rm;
+        ColumnFamily cf;
+
+        // add a single cell
+        cf = ArrayBackedSortedColumns.factory.create("Keyspace1", "Standard1");
+        cf.addColumn(column("col3", "val1", 1L));
+        rm = new Mutation("Keyspace1", ByteBufferUtil.bytes("keymulti"), cf);
+        rm.apply();
+
+        // add a single cell
+        cf = ArrayBackedSortedColumns.factory.create("Keyspace1", "Standard2");
+        cf.addColumn(column("col4", "val1", 1L));
+        rm = new Mutation("Keyspace1", ByteBufferUtil.bytes("keymulti"), cf);
+        rm.apply();
+
+        // Make sure data was written
+        long time = System.currentTimeMillis();
+        assertNotNull(getFromTable(keyspace, "Standard1", "keymulti", "col3"));
+        assertNotNull(getFromTable(keyspace, "Standard2", "keymulti", "col4"));
+
+        // and now truncate it
+        cfs1.truncateBlocking();
+        cfs2.truncateBlocking();
+
+        // verify truncation
+        assertNull(getFromTable(keyspace, "Standard1", "keymulti", "col3"));
+        assertNull(getFromTable(keyspace, "Standard2", "keymulti", "col4"));
+
+        try
+        {
+            // Restore to point in time.
+            CommitLog.instance.archiver.restorePointInTime = time;
+            System.setProperty("cassandra.replayList", "Keyspace1.Standard1");
+            CommitLog.instance.resetUnsafe();
+            CommitLog.instance.recover();
+        }
+        finally
+        {
+            CommitLog.instance.archiver.restorePointInTime = Long.MAX_VALUE;
+            System.clearProperty("cassandra.replayList");
+        }
+
+        // Validate pre-truncation data was restored.
+        assertNotNull(getFromTable(keyspace, "Standard1", "keymulti", "col3"));
+        // But only on the replayed table.
+        assertNull(getFromTable(keyspace, "Standard2", "keymulti", "col4"));
+
+        // And that we have the correct truncation records.
+        assertFalse(SystemKeyspace.getTruncatedAt(cfs1.metadata.cfId) > time);
+        assertTrue(SystemKeyspace.getTruncatedAt(cfs2.metadata.cfId) > time);
+    }
+
+    private Cell getFromTable(Keyspace keyspace, String cfName, String 
keyName, String columnName)
+    {
+        ColumnFamily cf;
+        ColumnFamilyStore cfStore = keyspace.getColumnFamilyStore(cfName);
+        if (cfStore == null)
+        {
+            return null;
+        }
+        cf = cfStore.getColumnFamily(Util.namesQueryFilter(cfStore, 
Util.dk(keyName), columnName));
+        if (cf == null)
+        {
+            return null;
+        }
+        return cf.getColumn(Util.cellname(columnName));
+    }
 }

Reply via email to