From: <jav...@us...> - 2011-09-26 15:08:10
|
Revision: 16006 http://dcm4che.svn.sourceforge.net/dcm4che/?rev=16006&view=rev Author: javawilli Date: 2011-09-26 15:07:58 +0000 (Mon, 26 Sep 2011) Log Message: ----------- [#DCMEE-1714] HSM FileBased/Dicey Module: Check if destination filesystem is mounted Modified Paths: -------------- dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-hsm-diceyfile-module-xmbean.xml dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-hsm-file-module-xmbean.xml dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/hsm/module/HSMFileBasedModule.java dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/hsm/module/dicey/DiceyFSModule.java Modified: dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-hsm-diceyfile-module-xmbean.xml =================================================================== --- dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-hsm-diceyfile-module-xmbean.xml 2011-09-26 14:45:43 UTC (rev 16005) +++ dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-hsm-diceyfile-module-xmbean.xml 2011-09-26 15:07:58 UTC (rev 16006) @@ -122,6 +122,17 @@ </descriptors> </attribute> + <attribute access="read-write" getMethod="getMountFailedCheckFile" + setMethod="setMountFailedCheckFile"> + <description><![CDATA[If the specified file exists in the root of an filesystem, this signals a failed mount.]]> + </description> + <name>MountFailedCheckFile</name> + <type>java.lang.String</type> + <descriptors> + <value value="NO_MOUNT" /> + </descriptors> + </attribute> + <attribute access="read-write" getMethod="getFileCopyServiceName" setMethod="setFileCopyServiceName"> Modified: dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-hsm-file-module-xmbean.xml =================================================================== --- dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-hsm-file-module-xmbean.xml 2011-09-26 14:45:43 UTC (rev 16005) +++ dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-hsm-file-module-xmbean.xml 2011-09-26 15:07:58 UTC (rev 16006) @@ -96,6 +96,17 @@ </descriptors> </attribute> + <attribute access="read-write" getMethod="getMountFailedCheckFile" + setMethod="setMountFailedCheckFile"> + <description><![CDATA[If the specified file exists in the root of an filesystem, this signals a failed mount.]]> + </description> + <name>MountFailedCheckFile</name> + <type>java.lang.String</type> + <descriptors> + <value value="NO_MOUNT" /> + </descriptors> + </attribute> + <attribute access="read-write" getMethod="getFileCopyServiceName" setMethod="setFileCopyServiceName"> Modified: dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/hsm/module/HSMFileBasedModule.java =================================================================== --- dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/hsm/module/HSMFileBasedModule.java 2011-09-26 14:45:43 UTC (rev 16005) +++ dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/hsm/module/HSMFileBasedModule.java 2011-09-26 15:07:58 UTC (rev 16006) @@ -151,7 +151,7 @@ this.mountFailedCheckFile = mountFailedCheckFile; } - private void checkMount(String fsID) throws HSMException { + protected void checkMount(String fsID) throws HSMException { File nomount = new File(stripTarIdentifier(fsID), mountFailedCheckFile); if (nomount.exists()) { log.warn("Mount on " + fsID + " seems broken! mountFailedCheckFile file exists:" + mountFailedCheckFile); Modified: dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/hsm/module/dicey/DiceyFSModule.java =================================================================== --- dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/hsm/module/dicey/DiceyFSModule.java 2011-09-26 14:45:43 UTC (rev 16005) +++ dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/hsm/module/dicey/DiceyFSModule.java 2011-09-26 15:07:58 UTC (rev 16006) @@ -34,31 +34,55 @@ public final void setReadTimeout(int to) { this.readTimeout = to; } - + @Override - public File fetchHSMFile(String fsID, String filePath) throws HSMException { - if (absIncomingDir.mkdirs()) { - log.info("M-WRITE "+absIncomingDir); + protected void checkMount(final String fsID) throws HSMException { + final Boolean[] notMounted = new Boolean[]{null}; + Thread t = new Thread() { + public void run() { + notMounted[0] = new File(stripTarIdentifier(fsID), getMountFailedCheckFile()).exists(); } - File tarFile; - File fileToFetch; - try { - tarFile = File.createTempFile("hsm_", ".tar", absIncomingDir); - } catch (IOException x) { - throw new HSMException("Failed to create temp file in "+absIncomingDir, x); - } - if (fsID.startsWith("tar:")) - fsID=fsID.substring(4); - fileToFetch = FileUtils.toFile(fsID, filePath); - try { - FileIOTimeOut.copy(fileToFetch, tarFile, readTimeout) ; - } catch (IOException x) { - throw new HSMException("Failed to retrieve "+fileToFetch, x); - } - return tarFile; + }; + t.start(); + try { + t.join(readTimeout*1000); + } catch (InterruptedException e) { + log.warn("checkMount thread interrupted!", e); + } + if (notMounted[0] == null) { + t.interrupt(); + log.warn("Accessibility of " + fsID + " seems broken! Timeout during mount check!"); + throw new HSMException("Filesystem accessibility broken! fsID:"+fsID); + } else if (notMounted[0]) { + log.warn("Mount on " + fsID + " seems broken! mountFailedCheckFile file exists:" + getMountFailedCheckFile()); + throw new HSMException("Filesystem not mounted! fsID:"+fsID); + } } + @Override + public File fetchHSMFile(String fsID, String filePath) throws HSMException { + checkMount(fsID); + if (absIncomingDir.mkdirs()) { + log.info("M-WRITE "+absIncomingDir); + } + File tarFile; + File fileToFetch; + try { + tarFile = File.createTempFile("hsm_", ".tar", absIncomingDir); + } catch (IOException x) { + throw new HSMException("Failed to create temp file in "+absIncomingDir, x); + } + fileToFetch = FileUtils.toFile(stripTarIdentifier(fsID), filePath); + try { + FileIOTimeOut.copy(fileToFetch, tarFile, readTimeout) ; + } catch (IOException x) { + throw new HSMException("Failed to retrieve "+fileToFetch, x); + } + return tarFile; + } + + @Override public void fetchHSMFileFinished(String fsID, String filePath, File file) throws HSMException { log.info("M-DELETE " + file); if (!file.delete()) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |