From 43bb42d346e858eeb62a49209e206d17fb53c021 Mon Sep 17 00:00:00 2001 From: Noah Levitt Date: Wed, 28 Aug 2013 11:22:37 -0700 Subject: [PATCH] BdbModule#doCheckpoint - support forgetting all but latest checkpoint --- .../main/java/org/archive/bdb/BdbModule.java | 17 ++++++++++++++++- .../org/archive/checkpointing/Checkpoint.java | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/commons/src/main/java/org/archive/bdb/BdbModule.java b/commons/src/main/java/org/archive/bdb/BdbModule.java index 1ca6312c..88e39721 100644 --- a/commons/src/main/java/org/archive/bdb/BdbModule.java +++ b/commons/src/main/java/org/archive/bdb/BdbModule.java @@ -22,6 +22,7 @@ package org.archive.bdb; import java.io.Closeable; import java.io.File; import java.io.FileFilter; +import java.io.FilenameFilter; import java.io.IOException; import java.io.ObjectOutputStream; import java.io.Serializable; @@ -46,6 +47,7 @@ import org.archive.util.FilesystemLinkMaker; import org.archive.util.IdentityCacheable; import org.archive.util.ObjectIdentityBdbManualCache; import org.archive.util.ObjectIdentityCache; +import org.archive.util.TextUtils; import org.archive.util.bdbje.EnhancedEnvironment; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.annotation.Autowired; @@ -440,7 +442,7 @@ public class BdbModule implements Lifecycle, Checkpointable, Closeable, Disposab public void startCheckpoint(Checkpoint checkpointInProgress) {} - public void doCheckpoint(Checkpoint checkpointInProgress) throws IOException { + public void doCheckpoint(final Checkpoint checkpointInProgress) throws IOException { // First sync objectCaches for (@SuppressWarnings("rawtypes") ObjectIdentityCache oic : oiCaches.values()) { oic.sync(); @@ -499,6 +501,19 @@ public class BdbModule implements Lifecycle, Checkpointable, Closeable, Disposab } catch (DatabaseException e) { throw new IOException(e); } + + if (checkpointInProgress.getForgetAllButLatest()) { + File[] oldEnvCpDirs = dir.getFile().listFiles(new FilenameFilter() { + @Override + public boolean accept(File dir, String name) { + return !name.equals(checkpointInProgress.getName()) + && TextUtils.matches("cp\\d{5}-\\d{14}", name); + } + }); + for (File d: oldEnvCpDirs) { + FileUtils.deleteDirectory(d); + } + } } @SuppressWarnings("unchecked") diff --git a/commons/src/main/java/org/archive/checkpointing/Checkpoint.java b/commons/src/main/java/org/archive/checkpointing/Checkpoint.java index 31fe1602..671f84e3 100644 --- a/commons/src/main/java/org/archive/checkpointing/Checkpoint.java +++ b/commons/src/main/java/org/archive/checkpointing/Checkpoint.java @@ -174,7 +174,7 @@ public class Checkpoint implements InitializingBean { return (new File(checkpointDirectory,Checkpoint.VALIDITY_STAMP_FILENAME)).exists(); } - private boolean forgetAllButLatest = false; + protected boolean forgetAllButLatest = false; public void setForgetAllButLatest(boolean b) { this.forgetAllButLatest = b; }