Skip to content
Snippets Groups Projects
Commit 0629ce1b authored by ribeaudc's avatar ribeaudc
Browse files

change: - Try to use 'IFileStore' instead of 'FileStore' when possible.

SVN: 6149
parent d4ee6557
No related branches found
No related tags found
No related merge requests found
Showing
with 81 additions and 77 deletions
......@@ -32,7 +32,6 @@ import ch.systemsx.cisd.common.utilities.TimerHelper;
import ch.systemsx.cisd.common.utilities.TriggeringTimerTask;
import ch.systemsx.cisd.datamover.filesystem.FileStoreFactory;
import ch.systemsx.cisd.datamover.filesystem.RemoteMonitoredMoverFactory;
import ch.systemsx.cisd.datamover.filesystem.intf.FileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IFileSysOperationsFactory;
import ch.systemsx.cisd.datamover.utils.LocalBufferDirs;
......@@ -68,26 +67,26 @@ public class DataMover
*
* @return object which can be used to terminate the process and all its threads
*/
public static final ITerminable start(Parameters parameters, IFileSysOperationsFactory factory)
public static final ITerminable start(final Parameters parameters, final IFileSysOperationsFactory factory)
{
return start(parameters, factory, createLocalBufferDirs(parameters));
}
private static LocalBufferDirs createLocalBufferDirs(Parameters parameters)
private static LocalBufferDirs createLocalBufferDirs(final Parameters parameters)
{
return new LocalBufferDirs(parameters.getBufferDirectoryPath(), LOCAL_COPY_IN_PROGRESS_DIR,
LOCAL_COPY_COMPLETE_DIR, LOCAL_READY_TO_MOVE_DIR, LOCAL_TEMP_DIR);
}
/** Allows to specify buffer directories. Exposed for testing purposes. */
public static final ITerminable start(Parameters parameters, IFileSysOperationsFactory factory,
LocalBufferDirs localBufferDirs)
public static final ITerminable start(final Parameters parameters, final IFileSysOperationsFactory factory,
final LocalBufferDirs localBufferDirs)
{
return new DataMover(parameters, factory, localBufferDirs).start();
}
private DataMover(Parameters parameters, IFileSysOperationsFactory factory,
LocalBufferDirs bufferDirs)
private DataMover(final Parameters parameters, final IFileSysOperationsFactory factory,
final LocalBufferDirs bufferDirs)
{
this.parameters = parameters;
this.factory = factory;
......@@ -154,7 +153,7 @@ public class DataMover
private final DataMoverProcess createOutgoingMovingProcess()
{
final FileStore outgoingStore = parameters.getOutgoingStore(factory);
final IFileStore outgoingStore = parameters.getOutgoingStore(factory);
final File readyToMoveDir = bufferDirs.getReadyToMoveDir();
final IFileStore readyToMoveStore =
FileStoreFactory.createLocal(readyToMoveDir, "ready-to-move", factory);
......@@ -170,7 +169,7 @@ public class DataMover
return new DataMoverProcess(outgoingMovingTask, "Final Destination Mover");
}
private IStoreHandler createRemotePathMover(IFileStore source, FileStore destination)
private IStoreHandler createRemotePathMover(final IFileStore source, final IFileStore destination)
{
return RemoteMonitoredMoverFactory.create(source, destination, parameters);
}
......@@ -182,7 +181,7 @@ public class DataMover
public boolean terminate()
{
boolean ok = true;
for (ITerminable terminable : terminables)
for (final ITerminable terminable : terminables)
{
ok = ok && terminable.terminate();
}
......
......@@ -35,7 +35,6 @@ import ch.systemsx.cisd.common.utilities.StoreItem;
import ch.systemsx.cisd.datamover.common.MarkerFile;
import ch.systemsx.cisd.datamover.filesystem.FileStoreFactory;
import ch.systemsx.cisd.datamover.filesystem.RemoteMonitoredMoverFactory;
import ch.systemsx.cisd.datamover.filesystem.intf.FileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IExtendedFileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IFileSysOperationsFactory;
......@@ -117,7 +116,7 @@ public class IncomingProcessor implements IRecoverableTimerTaskFactory
}
return filterBank;
}
public TimerTask createRecoverableTimerTask()
{
return new IncomingProcessorRecoveryTask();
......@@ -127,8 +126,9 @@ public class IncomingProcessor implements IRecoverableTimerTaskFactory
{
final IStoreHandler pathHandler = createIncomingMovingPathHandler();
final DirectoryScanningTimerTask movingTask =
new DirectoryScanningTimerTask(new FileScannedStore(incomingStore,
storeItemFilter), bufferDirs.getCopyInProgressDir(), pathHandler,
new DirectoryScanningTimerTask(
new FileScannedStore(incomingStore, storeItemFilter), bufferDirs
.getCopyInProgressDir(), pathHandler,
NUMBER_OF_ERRORS_IN_LISTING_IGNORED);
return new DataMoverProcess(movingTask, "Mover of Incoming Data", this);
}
......@@ -216,7 +216,7 @@ public class IncomingProcessor implements IRecoverableTimerTaskFactory
}
private IStoreHandler createRemotePathMover(final IFileStore sourceDirectory,
final FileStore destinationDirectory)
final IFileStore destinationDirectory)
{
return RemoteMonitoredMoverFactory
.create(sourceDirectory, destinationDirectory, parameters);
......
......@@ -45,7 +45,7 @@ import ch.systemsx.cisd.common.utilities.IExitHandler;
import ch.systemsx.cisd.common.utilities.PropertyUtils;
import ch.systemsx.cisd.common.utilities.SystemExit;
import ch.systemsx.cisd.datamover.filesystem.FileStoreFactory;
import ch.systemsx.cisd.datamover.filesystem.intf.FileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IFileSysOperationsFactory;
import ch.systemsx.cisd.datamover.intf.IFileSysParameters;
import ch.systemsx.cisd.datamover.intf.ITimingParameters;
......@@ -605,7 +605,7 @@ public final class Parameters implements ITimingParameters, IFileSysParameters
/**
* @return The store to monitor for new files and directories to move to the buffer.
*/
public final FileStore getIncomingStore(final IFileSysOperationsFactory factory)
public final IFileStore getIncomingStore(final IFileSysOperationsFactory factory)
{
return FileStoreFactory.createStore(incomingDirectory, INCOMING_KIND_DESC, incomingHost,
treatIncomingAsRemote, factory);
......@@ -622,7 +622,7 @@ public final class Parameters implements ITimingParameters, IFileSysParameters
/**
* @return The store to copy the data to.
*/
public final FileStore getOutgoingStore(final IFileSysOperationsFactory factory)
public final IFileStore getOutgoingStore(final IFileSysOperationsFactory factory)
{
return FileStoreFactory.createStore(outgoingDirectory, OUTGOING_KIND_DESC, outgoingHost,
true, factory);
......
......@@ -20,6 +20,7 @@ import java.io.File;
import ch.systemsx.cisd.common.highwatermark.FileWithHighwaterMark;
import ch.systemsx.cisd.datamover.filesystem.intf.FileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IFileSysOperationsFactory;
import ch.systemsx.cisd.datamover.filesystem.store.FileStoreLocal;
import ch.systemsx.cisd.datamover.filesystem.store.FileStoreRemote;
......@@ -30,8 +31,6 @@ import ch.systemsx.cisd.datamover.filesystem.store.FileStoreRemoteMounted;
*
* @author Tomasz Pylak
*/
// TODO 2008-05-13, Christian Ribeaud: This factory should return IFileStore and not the concrete
// class FileStore.
public final class FileStoreFactory
{
private FileStoreFactory()
......@@ -42,7 +41,7 @@ public final class FileStoreFactory
/**
* use when file store is on a local host.
*/
public static final FileStore createLocal(final FileWithHighwaterMark path, final String kind,
public static final IFileStore createLocal(final FileWithHighwaterMark path, final String kind,
final IFileSysOperationsFactory factory)
{
return new FileStoreLocal(path, kind, factory);
......@@ -51,14 +50,14 @@ public final class FileStoreFactory
/**
* use when file store is on a local host.
*/
public static final FileStore createLocal(final File readyToMoveDir, final String string,
public static final IFileStore createLocal(final File readyToMoveDir, final String string,
final IFileSysOperationsFactory factory)
{
return createLocal(new FileWithHighwaterMark(readyToMoveDir), string, factory);
}
/** use when file store is on a remote share mounted on local host */
public static final FileStore createRemoteShare(final FileWithHighwaterMark path,
public static final IFileStore createRemoteShare(final FileWithHighwaterMark path,
final String kind, final IFileSysOperationsFactory factory)
{
return new FileStoreRemoteMounted(path, kind, factory);
......@@ -69,7 +68,7 @@ public final class FileStoreFactory
*
* @param factory
*/
public static final FileStore createRemoteHost(final FileWithHighwaterMark path,
public static final IFileStore createRemoteHost(final FileWithHighwaterMark path,
final String host, final String kind, final IFileSysOperationsFactory factory)
{
return new FileStoreRemote(path, host, kind, factory);
......@@ -80,7 +79,7 @@ public final class FileStoreFactory
*
* @param factory
*/
public static final FileStore createRemoteHost(final File path, final String host,
public static final IFileStore createRemoteHost(final File path, final String host,
final String kind, final IFileSysOperationsFactory factory)
{
return createRemoteHost(new FileWithHighwaterMark(path), host, kind, factory);
......@@ -89,7 +88,7 @@ public final class FileStoreFactory
/**
* Returns the most convenient <code>IFileStore</code> implementation with given <var>values</var>.
*/
public final static FileStore createStore(final File path, final String kind,
public final static IFileStore createStore(final File path, final String kind,
final String hostOrNull, final boolean isRemote, final IFileSysOperationsFactory factory)
{
return createStore(new FileWithHighwaterMark(path), kind, hostOrNull, isRemote, factory);
......@@ -98,7 +97,7 @@ public final class FileStoreFactory
/**
* Returns the most convenient <code>IFileStore</code> implementation with given <var>values</var>.
*/
public final static FileStore createStore(final FileWithHighwaterMark path, final String kind,
public final static IFileStore createStore(final FileWithHighwaterMark path, final String kind,
final String hostOrNull, final boolean isRemote, final IFileSysOperationsFactory factory)
{
if (hostOrNull != null)
......
......@@ -17,7 +17,6 @@
package ch.systemsx.cisd.datamover.filesystem;
import ch.systemsx.cisd.common.utilities.IStoreHandler;
import ch.systemsx.cisd.datamover.filesystem.intf.FileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IStoreCopier;
import ch.systemsx.cisd.datamover.filesystem.remote.CopyActivityMonitor;
......@@ -43,7 +42,7 @@ public final class RemoteMonitoredMoverFactory
* @param parameters The timing parameters used for monitoring and reporting stall situations.
*/
public static final IStoreHandler create(final IFileStore sourceDirectory,
final FileStore destinationDirectory, final ITimingParameters parameters)
final IFileStore destinationDirectory, final ITimingParameters parameters)
{
final IStoreCopier copier = sourceDirectory.getCopier(destinationDirectory);
final CopyActivityMonitor monitor =
......
......@@ -78,12 +78,6 @@ public abstract class FileStore implements IFileStore
}
}
public final StoreItemLocation getStoreItemLocation(StoreItem item)
{
return new StoreItemLocation(hostOrNull, StoreItem.asFile(getPath(), item)
.getAbsolutePath());
}
protected final File getPath()
{
return fileWithHighwaterMark.getFile();
......@@ -106,13 +100,13 @@ public abstract class FileStore implements IFileStore
// does not take into account the fact, that the destination cannot be overwritten and must be
// deleted beforehand
protected final IStoreCopier constructStoreCopier(final FileStore destinationDirectory,
protected final IStoreCopier constructStoreCopier(final IFileStore destinationDirectory,
final boolean requiresDeletionBeforeCreation)
{
final IPathCopier copier = factory.getCopier(requiresDeletionBeforeCreation);
final String srcHostOrNull = hostOrNull;
final String destHostOrNull = destinationDirectory.hostOrNull;
final File destPath = destinationDirectory.getPath();
final String destHostOrNull = ((FileStore) destinationDirectory).hostOrNull;
final File destPath = ((FileStore) destinationDirectory).getPath();
return new IStoreCopier()
{
public Status copy(final StoreItem item)
......@@ -141,6 +135,12 @@ public abstract class FileStore implements IFileStore
};
}
public final StoreItemLocation getStoreItemLocation(final StoreItem item)
{
return new StoreItemLocation(hostOrNull, StoreItem.asFile(getPath(), item)
.getAbsolutePath());
}
/**
* Returns <code>true</code>, if the file store resides on a remote computer and
* <code>false</code> otherwise.
......@@ -148,6 +148,7 @@ public abstract class FileStore implements IFileStore
* Note that even if this method returns <code>true</code> paths on this file system might be
* reached via local file system operation, if the remote file system is provided as a remote
* share and mounted via NFS or CIFS.
* </p>
*/
public final boolean isRemote()
{
......
......@@ -106,7 +106,7 @@ public interface IFileStore extends ISelfTestable
* must be readable and writable. Copier will override the destination item if it
* already exists.
*/
public IStoreCopier getCopier(FileStore destinationDirectory);
public IStoreCopier getCopier(IFileStore destinationDirectory);
// returned description should give the user the idea about file location. You should not use
// the result for
......
......@@ -19,21 +19,22 @@ package ch.systemsx.cisd.datamover.filesystem.intf;
import ch.systemsx.cisd.common.utilities.StoreItem;
/**
* Bean for the location of a {@link StoreItem} on a local or remote file system.
*
* Bean for the location of a {@link StoreItem} on a local or remote file system.
*
* @author Franz-Josef Elmer
*/
public class StoreItemLocation
public final class StoreItemLocation
{
private final String host;
private final String absolutePath;
/**
* Creates a new instance for the specified host and absolute path.
*
*
* @param hostOrNull If not <code>null</code> the file is on a remote file system.
*/
public StoreItemLocation(String hostOrNull, String absolutePath)
public StoreItemLocation(final String hostOrNull, final String absolutePath)
{
if (absolutePath == null)
{
......
......@@ -106,7 +106,7 @@ public class FileStoreLocal extends FileStore implements IExtendedFileStore
return FileUtilities.checkDirectoryFullyAccessible(getPath(), getDescription());
}
public final IStoreCopier getCopier(final FileStore destinationDirectory)
public final IStoreCopier getCopier(final IFileStore destinationDirectory)
{
boolean requiresDeletion = false;
final IStoreCopier simpleCopier =
......
......@@ -33,6 +33,7 @@ import ch.systemsx.cisd.common.logging.LogFactory;
import ch.systemsx.cisd.common.utilities.StoreItem;
import ch.systemsx.cisd.datamover.filesystem.intf.FileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IExtendedFileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IFileSysOperationsFactory;
import ch.systemsx.cisd.datamover.filesystem.intf.IStoreCopier;
......@@ -97,7 +98,7 @@ public class FileStoreRemote extends FileStore
return factory.getCopier(false).existsRemotely(getPath(), tryGetHost());
}
public final IStoreCopier getCopier(final FileStore destinationDirectory)
public final IStoreCopier getCopier(final IFileStore destinationDirectory)
{
final boolean requiresDeletion = false;
return constructStoreCopier(destinationDirectory, requiresDeletion);
......
......@@ -25,6 +25,7 @@ import ch.systemsx.cisd.common.logging.ISimpleLogger;
import ch.systemsx.cisd.common.utilities.StoreItem;
import ch.systemsx.cisd.datamover.filesystem.intf.FileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IExtendedFileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IFileSysOperationsFactory;
import ch.systemsx.cisd.datamover.filesystem.intf.IStoreCopier;
......@@ -56,7 +57,7 @@ public final class FileStoreRemoteMounted extends FileStore
return null;
}
public final IStoreCopier getCopier(final FileStore destinationDirectory)
public final IStoreCopier getCopier(final IFileStore destinationDirectory)
{
final boolean requiresDeletion = false;
return constructStoreCopier(destinationDirectory, requiresDeletion);
......
......@@ -31,8 +31,6 @@ import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.StoreItemLocation;
/**
*
*
* @author Franz-Josef Elmer
*/
public class DataCompletedFilter implements IStoreItemFilter
......@@ -40,13 +38,17 @@ public class DataCompletedFilter implements IStoreItemFilter
private static final class Status extends AbstractHashable
{
static final Status NULL = new Status();
private final boolean ok;
private final boolean run;
private final boolean terminated;
private final int exitValue;
private final boolean blocked;
private Status()
{
ok = true;
......@@ -56,7 +58,7 @@ public class DataCompletedFilter implements IStoreItemFilter
exitValue = Integer.MAX_VALUE;
}
Status(ProcessResult processResult)
Status(final ProcessResult processResult)
{
ok = processResult.isOK();
run = processResult.isRun();
......@@ -64,7 +66,7 @@ public class DataCompletedFilter implements IStoreItemFilter
blocked = processResult.hasBlocked();
exitValue = processResult.exitValue();
}
public final boolean isOk()
{
return ok;
......@@ -90,7 +92,7 @@ public class DataCompletedFilter implements IStoreItemFilter
return blocked;
}
}
private static final Logger operationLog =
LogFactory.getLogger(LogCategory.OPERATION, DataCompletedFilter.class);
......@@ -99,15 +101,17 @@ public class DataCompletedFilter implements IStoreItemFilter
private final static Logger notificationLog =
LogFactory.getLogger(LogCategory.NOTIFY, DataCompletedFilter.class);
private final IFileStore fileStore;
private final String dataCompletedScript;
private final long dataCompletedScriptTimeout;
private Status lastStatus = Status.NULL;
public DataCompletedFilter(IFileStore fileStore, String dataCompletedScript,
long dataCompletedScriptTimeout)
private Status lastStatus = Status.NULL;
public DataCompletedFilter(final IFileStore fileStore, final String dataCompletedScript,
final long dataCompletedScriptTimeout)
{
if (dataCompletedScript == null)
{
......@@ -121,18 +125,18 @@ public class DataCompletedFilter implements IStoreItemFilter
}
this.fileStore = fileStore;
}
public boolean accept(StoreItem item)
public boolean accept(final StoreItem item)
{
List<String> commandLine = createCommand(item);
ProcessResult result =
final List<String> commandLine = createCommand(item);
final ProcessResult result =
ProcessExecutionHelper.run(commandLine, dataCompletedScriptTimeout, operationLog,
machineLog);
Status status = new Status(result);
boolean ok = status.isOk();
final Status status = new Status(result);
final boolean ok = status.isOk();
if (status.equals(lastStatus) == false)
{
String message =
final String message =
"Processing status of data completed script has changed to " + status
+ ". Command line: " + commandLine;
if (ok)
......@@ -151,14 +155,14 @@ public class DataCompletedFilter implements IStoreItemFilter
return ok;
}
private List<String> createCommand(StoreItem item)
private List<String> createCommand(final StoreItem item)
{
StoreItemLocation storeItemLocation = fileStore.getStoreItemLocation(item);
List<String> command = new ArrayList<String>();
final StoreItemLocation storeItemLocation = fileStore.getStoreItemLocation(item);
final List<String> command = new ArrayList<String>();
command.add("sh");
command.add(dataCompletedScript);
command.add(storeItemLocation.getAbsolutePath());
String host = storeItemLocation.getHost();
final String host = storeItemLocation.getHost();
if (host != null)
{
command.add(host);
......
......@@ -29,7 +29,6 @@ import ch.systemsx.cisd.common.exceptions.Status;
import ch.systemsx.cisd.common.logging.LogInitializer;
import ch.systemsx.cisd.common.utilities.FileUtilities;
import ch.systemsx.cisd.datamover.filesystem.FileStoreFactory;
import ch.systemsx.cisd.datamover.filesystem.intf.FileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IPathCopier;
import ch.systemsx.cisd.datamover.testhelper.FileOperationsUtil;
......@@ -49,7 +48,7 @@ public class SelfTestTest
private static final File incomingDirectory = new File(workingDirectory, "local/incoming");
private static final FileStore incomingStore = createLocalStore(incomingDirectory, "incoming");
private static final IFileStore incomingStore = createLocalStore(incomingDirectory, "incoming");
private static final File bufferDirectory = new File(workingDirectory, "local/buffer");
......@@ -138,7 +137,7 @@ public class SelfTestTest
public void testHappyCaseWithRemoteHost()
{
final String outgoingHost = "some_remote_host";
final FileStore remoteHostOutgoingStore =
final IFileStore remoteHostOutgoingStore =
createRemoteStore(outgoingDirectory, outgoingHost, "outgoing");
SelfTest.check(mockCopier, remoteHostOutgoingStore);
}
......@@ -161,18 +160,18 @@ public class SelfTestTest
public void testNonExistentPaths()
{
final File nonExistentIncomingDirectory = new File(workingDirectory, "data");
final FileStore nonExistentIncomingStore =
final IFileStore nonExistentIncomingStore =
createLocalStore(nonExistentIncomingDirectory, "incoming");
SelfTest.check(mockCopier, nonExistentIncomingStore, bufferStore, outgoingStore);
}
private FileStore createRemoteStore(File path, String host, String description)
private final IFileStore createRemoteStore(File path, String host, String description)
{
return FileStoreFactory.createRemoteHost(path, host, description, FileOperationsUtil
.createTestFatory());
}
private static FileStore createLocalStore(File path, String description)
private final static IFileStore createLocalStore(File path, String description)
{
return FileStoreFactory.createLocal(path, description, FileOperationsUtil
.createTestFatory());
......
......@@ -206,7 +206,7 @@ public class CopyActivityMonitorTest
return localImpl.tryAsExtended();
}
public IStoreCopier getCopier(FileStore destinationDirectory)
public IStoreCopier getCopier(IFileStore destinationDirectory)
{
return localImpl.getCopier(destinationDirectory);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment