You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by al...@apache.org on 2015/05/01 18:43:35 UTC
cassandra git commit: Add CASSANDRA-9195 unit tests
Repository: cassandra
Updated Branches:
refs/heads/cassandra-2.1 33c59132f -> f43efaa1b
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/cassandra-2.1
Commit: f43efaa1bdeec1057a8097fdb5ab62b4c9c19e67
Parents: 33c5913
Author: Branimir Lambov <br...@datastax.com>
Authored: Fri May 1 19:42:50 2015 +0300
Committer: Aleksey Yeschenko <al...@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));
+ }
}