From 899fb6f404bbb54bfc0bdb4386c67e36152f2423 Mon Sep 17 00:00:00 2001 From: gojomo Date: Tue, 13 Jul 2010 01:19:10 +0000 Subject: [PATCH] [HER-1800] H3: Incomplete checkpoint listed in combo box * CheckpointService.java (getAvailableCheckpointDirectories) return List, filtered to leave out directories without a 'valid' stamp; log WARNING to _out so that the attentive operator can manually clean-up/investigate --- .../crawler/framework/CheckpointService.java | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/engine/src/main/java/org/archive/crawler/framework/CheckpointService.java b/engine/src/main/java/org/archive/crawler/framework/CheckpointService.java index 9c517545..9cad8684 100644 --- a/engine/src/main/java/org/archive/crawler/framework/CheckpointService.java +++ b/engine/src/main/java/org/archive/crawler/framework/CheckpointService.java @@ -21,6 +21,10 @@ package org.archive.crawler.framework; import java.io.File; import java.io.FileFilter; import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; import java.util.Map; import java.util.Timer; import java.util.TimerTask; @@ -261,7 +265,7 @@ public class CheckpointService implements Lifecycle, ApplicationContextAware { * @param e Exception checkpoint failed on. */ protected void checkpointFailed(Exception e) { - LOGGER.log(Level.WARNING, " Checkpoint failed", e); + LOGGER.log(Level.SEVERE, " Checkpoint failed", e); } protected void checkpointFailed(final String message) { @@ -273,16 +277,33 @@ public class CheckpointService implements Lifecycle, ApplicationContextAware { return false; } return (getAvailableCheckpointDirectories() != null - && getAvailableCheckpointDirectories().length > 0); + && getAvailableCheckpointDirectories().size() > 0); } + /** + * Returns a list of available, valid (contains 'valid' file) + * checkpoint directories, as File instances, with the more + * recently-written appearing first. + * + * @return List of valid checkpoint directory File instances + */ @SuppressWarnings("unchecked") - public File[] getAvailableCheckpointDirectories() { + public List getAvailableCheckpointDirectories() { File[] dirs = getCheckpointsDir().getFile().listFiles((FileFilter)FileFilterUtils.directoryFileFilter()); - if (dirs != null) { - Arrays.sort(dirs, LastModifiedFileComparator.LASTMODIFIED_REVERSE); + if (dirs == null) { + return Collections.EMPTY_LIST; } - return dirs; + Arrays.sort(dirs, LastModifiedFileComparator.LASTMODIFIED_REVERSE); + LinkedList dirsList = new LinkedList(Arrays.asList(dirs)); + Iterator iter = dirsList.iterator(); + while(iter.hasNext()) { + File cpDir = iter.next(); + if(! (new File(cpDir,Checkpoint.VALIDITY_STAMP_FILENAME)).exists()) { + LOGGER.warning("checkpoint '"+cpDir+"' missing validity stamp file; ignoring"); + iter.remove(); + } + } + return dirsList; } /**