From a2ddbd1d294a30547526aafa89fa8cd00e4e8495 Mon Sep 17 00:00:00 2001 From: ribeaudc <ribeaudc> Date: Thu, 15 May 2008 18:23:14 +0000 Subject: [PATCH] [DMV-12] change: - 'HighwaterMarkWatcher' should take its path from destination file store. SVN: 6081 --- .../datamover/filesystem/intf/FileStore.java | 13 ++++++++----- .../datamover/filesystem/intf/IFileStore.java | 11 +++++++---- .../filesystem/remote/RemotePathMover.java | 17 +++++++++-------- .../filesystem/store/FileStoreLocal.java | 17 +++++++++++++---- .../filesystem/store/FileStoreRemote.java | 19 ++++++++++++------- 5 files changed, 49 insertions(+), 28 deletions(-) diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/intf/FileStore.java b/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/intf/FileStore.java index ccc2ea76ec3..965eb8b69aa 100644 --- a/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/intf/FileStore.java +++ b/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/intf/FileStore.java @@ -28,6 +28,7 @@ import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; import ch.systemsx.cisd.common.exceptions.Status; import ch.systemsx.cisd.common.highwatermark.FileWithHighwaterMark; import ch.systemsx.cisd.common.highwatermark.HighwaterMarkSelfTestable; +import ch.systemsx.cisd.common.highwatermark.HighwaterMarkWatcher; import ch.systemsx.cisd.common.utilities.StoreItem; import ch.systemsx.cisd.datamover.filesystem.remote.RemotePathMover; @@ -49,12 +50,12 @@ public abstract class FileStore implements IFileStore protected final IFileSysOperationsFactory factory; - protected FileStore(final FileWithHighwaterMark path, final String hostOrNull, + protected FileStore(final FileWithHighwaterMark fileWithHighwaterMark, final String hostOrNull, final boolean remote, final String kind, final IFileSysOperationsFactory factory) { - assert path != null; + assert fileWithHighwaterMark != null; assert kind != null; - this.fileWithHighwaterMark = path; + this.fileWithHighwaterMark = fileWithHighwaterMark; this.kind = kind; this.hostOrNull = hostOrNull; this.remote = remote; @@ -79,7 +80,8 @@ public abstract class FileStore implements IFileStore public final StoreItemLocation getStoreItemLocation(StoreItem item) { - return new StoreItemLocation(hostOrNull, StoreItem.asFile(getPath(), item).getAbsolutePath()); + return new StoreItemLocation(hostOrNull, StoreItem.asFile(getPath(), item) + .getAbsolutePath()); } protected final File getPath() @@ -172,7 +174,8 @@ public abstract class FileStore implements IFileStore { throw new ConfigurationFailureException(errorMessage); } - new HighwaterMarkSelfTestable(fileWithHighwaterMark.getFile(), getHighwaterMarkWatcher()) + final HighwaterMarkWatcher highwaterMarkWatcher = getHighwaterMarkWatcher(); + new HighwaterMarkSelfTestable(fileWithHighwaterMark.getFile(), highwaterMarkWatcher) .check(); } diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/intf/IFileStore.java b/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/intf/IFileStore.java index 0546ae8a954..8b60e1e1ea0 100644 --- a/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/intf/IFileStore.java +++ b/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/intf/IFileStore.java @@ -41,15 +41,15 @@ public interface IFileStore extends ISelfTestable * share and mounted via NFS or CIFS. */ public boolean isRemote(); - + /** * Returns the location of the specified store item. */ public StoreItemLocation getStoreItemLocation(StoreItem item); /** - * Returns <code>true</code> if this file store is the parent directory of - * the specified file store. + * Returns <code>true</code> if this file store is the parent directory of the specified file + * store. */ public boolean isParentDirectory(IFileStore child); @@ -120,12 +120,15 @@ public interface IFileStore extends ISelfTestable /** * Returns this file store as an extended file store if possible. * - * @return <code>null</code> if this file store can not be returned as an extended file store. + * @return <code>null</code> if this file store can not be returned as an extended file store. */ public IExtendedFileStore tryAsExtended(); /** * Returns the <code>HighwaterMarkWatcher</code> for this implementation. + * <p> + * Note that we expect the path to be set in the returned <code>HighwaterMarkWatcher</code>. + * </p> */ public HighwaterMarkWatcher getHighwaterMarkWatcher(); } \ No newline at end of file diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/remote/RemotePathMover.java b/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/remote/RemotePathMover.java index fd878162771..c3ad6090e19 100644 --- a/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/remote/RemotePathMover.java +++ b/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/remote/RemotePathMover.java @@ -22,6 +22,7 @@ import org.apache.log4j.Logger; import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException; import ch.systemsx.cisd.common.exceptions.Status; import ch.systemsx.cisd.common.exceptions.StatusFlag; +import ch.systemsx.cisd.common.highwatermark.HighwaterMarkWatcher; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.utilities.IStoreHandler; @@ -291,9 +292,13 @@ public final class RemotePathMover implements IStoreHandler // IStoreHandler // - public final boolean mayHandle(StoreItem item) + public final boolean mayHandle(final StoreItem item) { - return true; + final HighwaterMarkWatcher highwaterMarkWatcher = + destinationDirectory.getHighwaterMarkWatcher(); + assert highwaterMarkWatcher.getPath() != null : "Remote path not set"; + highwaterMarkWatcher.run(); + return highwaterMarkWatcher.isBelow() == false; } public final void handle(final StoreItem item) @@ -304,11 +309,8 @@ public final class RemotePathMover implements IStoreHandler // finish the job. if (operationLog.isInfoEnabled()) { - operationLog - .info(String - .format( - "Detected recovery situation: '%s' has been interrupted in deletion phase, finishing up.", - getSrcPath(item))); + operationLog.info(String.format("Detected recovery situation: '%s' has been " + + "interrupted in deletion phase, finishing up.", getSrcPath(item))); } removeAndMark(item); return; @@ -371,7 +373,6 @@ public final class RemotePathMover implements IStoreHandler // here. } } while (true); - notificationLog.error(String.format(MOVING_PATH_TO_REMOTE_FAILED_TEMPLATE, getSrcPath(item), destinationDirectory)); } diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/store/FileStoreLocal.java b/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/store/FileStoreLocal.java index a4cc889c499..aadfe1d2372 100644 --- a/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/store/FileStoreLocal.java +++ b/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/store/FileStoreLocal.java @@ -54,13 +54,22 @@ public class FileStoreLocal extends FileStore implements IExtendedFileStore private final HighwaterMarkWatcher highwaterMarkWatcher; - public FileStoreLocal(final FileWithHighwaterMark file, final String desription, - final IFileSysOperationsFactory factory) + public FileStoreLocal(final FileWithHighwaterMark highwaterMarkWatcher, + final String desription, final IFileSysOperationsFactory factory) { - super(file, null, false, desription, factory); + super(highwaterMarkWatcher, null, false, desription, factory); this.remover = factory.getRemover(); this.mover = factory.getMover(); - this.highwaterMarkWatcher = new HighwaterMarkWatcher(file.getHighwaterMark()); + this.highwaterMarkWatcher = createHighwaterMarkWatcher(highwaterMarkWatcher); + } + + private final static HighwaterMarkWatcher createHighwaterMarkWatcher( + final FileWithHighwaterMark fileWithHighwaterMark) + { + final HighwaterMarkWatcher highwaterMarkWatcher = + new HighwaterMarkWatcher(fileWithHighwaterMark.getHighwaterMark()); + highwaterMarkWatcher.setPath(fileWithHighwaterMark.getFile()); + return highwaterMarkWatcher; } public final Status delete(final StoreItem item) diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/store/FileStoreRemote.java b/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/store/FileStoreRemote.java index 84781c0800d..2789c72fbd1 100644 --- a/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/store/FileStoreRemote.java +++ b/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/store/FileStoreRemote.java @@ -48,16 +48,17 @@ public class FileStoreRemote extends FileStore private final HighwaterMarkWatcher highwaterMarkWatcher; - public FileStoreRemote(final FileWithHighwaterMark path, final String host, final String kind, - final IFileSysOperationsFactory factory) + public FileStoreRemote(final FileWithHighwaterMark fileWithHighwaterMark, final String host, + final String kind, final IFileSysOperationsFactory factory) { - super(path, host, true, kind, factory); + super(fileWithHighwaterMark, host, true, kind, factory); assert host != null : "Unspecified host"; - highwaterMarkWatcher = createHighwaterMarkWatcher(path.getHighwaterMark(), host); + highwaterMarkWatcher = createHighwaterMarkWatcher(fileWithHighwaterMark, host, factory); } - private final HighwaterMarkWatcher createHighwaterMarkWatcher(final long highwaterMark, - final String host) + private final static HighwaterMarkWatcher createHighwaterMarkWatcher( + final FileWithHighwaterMark fileWithHighwaterMark, final String host, + final IFileSysOperationsFactory factory) { final File sshExecutable = factory.tryFindSshExecutable(); final IFreeSpaceProvider freeSpaceProvider; @@ -70,7 +71,11 @@ public class FileStoreRemote extends FileStore + "('ssh' executable not found)."); freeSpaceProvider = AlwaysAboveFreeSpaceProvider.INSTANCE; } - return new HighwaterMarkWatcher(highwaterMark, freeSpaceProvider); + final HighwaterMarkWatcher highwaterMarkWatcher = + new HighwaterMarkWatcher(fileWithHighwaterMark.getHighwaterMark(), + freeSpaceProvider); + highwaterMarkWatcher.setPath(fileWithHighwaterMark.getFile()); + return highwaterMarkWatcher; } // -- GitLab