Archive any commitlog segments present at startup patch by Sam Tunnicliffe; reviewed by bes and jbellis for CASSANDRA-6904
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/7bff1835 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/7bff1835 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/7bff1835 Branch: refs/heads/cassandra-2.1 Commit: 7bff18357e1e9227c13016b1c5b5e1a71db4f811 Parents: aa7794c Author: Jonathan Ellis <[email protected]> Authored: Tue Sep 30 14:08:16 2014 -0500 Committer: Jonathan Ellis <[email protected]> Committed: Tue Sep 30 14:08:16 2014 -0500 ---------------------------------------------------------------------- CHANGES.txt | 4 ++++ .../apache/cassandra/db/commitlog/CommitLog.java | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/7bff1835/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 5902d75..6f59a29 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +2.0.12: + * Archive any commitlog segments present at startup (CASSANDRA-6904) + + 2.0.11: * Ignore fat clients when checking for endpoint collision (CASSANDRA-7939) * CrcCheckChance should adjust based on live CFMetadata not http://git-wip-us.apache.org/repos/asf/cassandra/blob/7bff1835/src/java/org/apache/cassandra/db/commitlog/CommitLog.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/commitlog/CommitLog.java b/src/java/org/apache/cassandra/db/commitlog/CommitLog.java index 4bab83f..0e2f5bf 100644 --- a/src/java/org/apache/cassandra/db/commitlog/CommitLog.java +++ b/src/java/org/apache/cassandra/db/commitlog/CommitLog.java @@ -106,9 +106,7 @@ public class CommitLog implements CommitLogMBean */ public int recover() throws IOException { - archiver.maybeRestoreArchive(); - - File[] files = new File(DatabaseDescriptor.getCommitLogLocation()).listFiles(new FilenameFilter() + FilenameFilter unmanagedFilesFilter = new FilenameFilter() { public boolean accept(File dir, String name) { @@ -117,8 +115,19 @@ public class CommitLog implements CommitLogMBean // ahead and allow writes before recover(), and just skip active segments when we do. return CommitLogDescriptor.isValid(name) && !instance.allocator.manages(name); } - }); + }; + + // submit all existing files in the commit log dir for archiving prior to recovery - CASSANDRA-6904 + for (File file : new File(DatabaseDescriptor.getCommitLogLocation()).listFiles(unmanagedFilesFilter)) + { + archiver.maybeArchive(file.getPath(), file.getName()); + archiver.maybeWaitForArchiving(file.getName()); + } + + assert archiver.archivePending.isEmpty() : "Not all commit log archive tasks were completed before restore"; + archiver.maybeRestoreArchive(); + File[] files = new File(DatabaseDescriptor.getCommitLogLocation()).listFiles(unmanagedFilesFilter); int replayed = 0; if (files.length == 0) {
