Updated Branches:
  refs/heads/trunk 3bef1ccac -> e37ca25cf

back up new sstables before creating a new View (which makes the new one 
eligible for compaction)

patch by jbellis, reviewed by marcuse for CASSANDRA-5410


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

Branch: refs/heads/trunk
Commit: 8a422179c0a0a50e4d4b2e9274cbaf7259e90b2a
Parents: 698fc44
Author: Marcus Eriksson <marc...@spotify.com>
Authored: Thu Apr 4 23:38:00 2013 +0200
Committer: Marcus Eriksson <marc...@spotify.com>
Committed: Thu Apr 4 23:38:00 2013 +0200

----------------------------------------------------------------------
 CHANGES.txt                                       |    1 +
 src/java/org/apache/cassandra/db/DataTracker.java |   21 ++++++----------
 2 files changed, 9 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/8a422179/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 047bf93..8bcde57 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -29,6 +29,7 @@
  * cqlsh: Print maps ordered by key, sort sets (CASSANDRA-5413)
  * Add null syntax support in CQL3 for inserts (CASSANDRA-3783)
  * Allow unauthenticated set_keyspace() calls (CASSANDRA-5423)
+ * Fix potential incremental backups race (CASSANDRA-5410)
 Merged from 1.1:
  * cli: Quote ks and cf names in schema output when needed (CASSANDRA-5052)
  * Fix bad default for min/max timestamp in SSTableMetadata (CASSANDRA-5372)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8a422179/src/java/org/apache/cassandra/db/DataTracker.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/DataTracker.java 
b/src/java/org/apache/cassandra/db/DataTracker.java
index b6bcebd..adbe037 100644
--- a/src/java/org/apache/cassandra/db/DataTracker.java
+++ b/src/java/org/apache/cassandra/db/DataTracker.java
@@ -35,7 +35,6 @@ import org.apache.cassandra.notifications.INotification;
 import org.apache.cassandra.notifications.INotificationConsumer;
 import org.apache.cassandra.notifications.SSTableAddedNotification;
 import org.apache.cassandra.notifications.SSTableListChangedNotification;
-import org.apache.cassandra.service.StorageService;
 import org.apache.cassandra.utils.Interval;
 import org.apache.cassandra.utils.IntervalTree;
 
@@ -139,6 +138,10 @@ public class DataTracker
             return;
         }
 
+        // back up before creating a new View (which makes the new one 
eligible for compaction)
+        if (sstable != null)
+            maybeIncrementallyBackup(sstable);
+
         View currentView, newView;
         do
         {
@@ -151,24 +154,16 @@ public class DataTracker
         {
             addNewSSTablesSize(Arrays.asList(sstable));
             notifyAdded(sstable);
-            incrementallyBackup(sstable);
         }
     }
 
-    public void incrementallyBackup(final SSTableReader sstable)
+    public void maybeIncrementallyBackup(final SSTableReader sstable)
     {
         if (!DatabaseDescriptor.isIncrementalBackupsEnabled())
             return;
 
-        Runnable runnable = new Runnable()
-        {
-            public void run()
-            {
-                File backupsDir = 
Directories.getBackupsDirectory(sstable.descriptor);
-                sstable.createLinks(FileUtils.getCanonicalPath(backupsDir));
-            }
-        };
-        StorageService.tasks.execute(runnable);
+        File backupsDir = Directories.getBackupsDirectory(sstable.descriptor);
+        sstable.createLinks(FileUtils.getCanonicalPath(backupsDir));
     }
 
     /**
@@ -239,7 +234,7 @@ public class DataTracker
         replace(Collections.<SSTableReader>emptyList(), sstables);
         for (SSTableReader sstable : sstables)
         {
-            incrementallyBackup(sstable);
+            maybeIncrementallyBackup(sstable);
             notifyAdded(sstable);
         }
     }

Reply via email to