From: <jav...@us...> - 2012-02-14 07:44:22
|
Revision: 16587 http://dcm4che.svn.sourceforge.net/dcm4che/?rev=16587&view=rev Author: javawilli Date: 2012-02-14 07:44:13 +0000 (Tue, 14 Feb 2012) Log Message: ----------- [#DCMEE-1797] MD5CheckService aborts check and does not set any status if file is not found Modified Paths: -------------- dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/mbean/MD5CheckService.java Modified: dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/mbean/MD5CheckService.java =================================================================== --- dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/mbean/MD5CheckService.java 2012-02-13 21:40:15 UTC (rev 16586) +++ dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/mbean/MD5CheckService.java 2012-02-14 07:44:13 UTC (rev 16587) @@ -85,7 +85,7 @@ private Integer listenerID; private String timerIDCheckMD5; - + private final NotificationListener timerListener = new NotificationListener() { public void handleNotification(Notification notif, Object handback) { Calendar cal = Calendar.getInstance(); @@ -115,7 +115,7 @@ public void setSchedulerServiceName(ObjectName schedulerServiceName) { scheduler.setSchedulerServiceName(schedulerServiceName); } - + public final int getBufferSize() { return bufferSize ; } @@ -147,7 +147,7 @@ if (getState() == STARTED && oldInterval != taskInterval) { scheduler.stopScheduler(timerIDCheckMD5, listenerID, timerListener); listenerID = scheduler.startScheduler(timerIDCheckMD5, taskInterval, - timerListener); + timerListener); } } @@ -163,11 +163,11 @@ this.limitNumberOfFilesPerTask = limit; } - + /** - * Getter for maxCheckedBefore. - * <p> - * This value is used to limit check not recently checked files only. + * Getter for maxCheckedBefore. + * <p> + * This value is used to limit check not recently checked files only. * * @return ##w (in weeks), ##d (in days), ##h (in hours). */ @@ -175,16 +175,16 @@ return RetryIntervalls.formatInterval(maxCheckedBefore); } /** - * Setter for maxCheckedBefore. - * <p> - * This value is used to check not recently checked files only. + * Setter for maxCheckedBefore. + * <p> + * This value is used to check not recently checked files only. * * @param maxCheckedBefore The maxCheckedBefore to set. */ public void setMaxCheckedBefore(String maxCheckedBefore) { this.maxCheckedBefore = RetryIntervalls.parseInterval(maxCheckedBefore); } - + public String check() throws Exception { synchronized(this) { if (isRunning) { @@ -195,9 +195,9 @@ isRunning = true; } try { - if ( log.isDebugEnabled() ) log.debug("MD5 check started!"); - int corrupted = 0; - int total = 0; + if ( log.isDebugEnabled() ) log.debug("MD5 check started!"); + int corrupted = 0; + int total = 0; Timestamp before = new Timestamp( System.currentTimeMillis() - this.maxCheckedBefore ); FileDTO[] files; int limit = limitNumberOfFilesPerTask; @@ -206,56 +206,61 @@ byte[] buffer = null; for (int j = 0; j < fsdirs.length; j++) { files = fsMgt.findFilesForMD5Check(fsdirs[j].getDirectoryPath(), before, limit); - if ( log.isDebugEnabled() ) log.debug("Check MD5 for " + files.length + " files on filesystem " + fsdirs[j]); + if ( log.isDebugEnabled() ) log.debug("Check MD5 for " + files.length + " files on filesystem " + fsdirs[j]); if (files.length > 0) { - if (buffer == null) - buffer = new byte[bufferSize]; + if (buffer == null) + buffer = new byte[bufferSize]; total += files.length; for (int k = 0; k < files.length; k++) { - if ( ! doCheck(fsMgt, files[k], buffer) ) - corrupted++; + if ( ! doCheck(fsMgt, files[k], buffer) ) + corrupted++; } limit -= files.length; } } if ( corrupted > 0 ) - log.warn( corrupted + " files are corrupted!"); - return corrupted + " of "+ total + " files corrupted!"; + log.warn( corrupted + " files are corrupted!"); + return corrupted + " of "+ total + " files corrupted!"; } finally { isRunning = false; } } - + /** - * @param fsMgt - * @param fileDTO + * @param fsMgt + * @param fileDTO * @param buffer * @throws IOException * @throws NoSuchAlgorithmException * @throws FinderException - */ - private boolean doCheck(FileSystemMgt2 fsMgt, FileDTO fileDTO, byte[] buffer) - throws IOException, NoSuchAlgorithmException, FinderException { - if ( log.isDebugEnabled() ) log.debug("check md5 for file "+fileDTO ); + */ + private boolean doCheck(FileSystemMgt2 fsMgt, FileDTO fileDTO, byte[] buffer) + throws IOException, NoSuchAlgorithmException, FinderException { + if ( log.isDebugEnabled() ) log.debug("check md5 for file "+fileDTO ); char[] storedMD5 = MD5Utils.toHexChars(fileDTO.getFileMd5()); final char[] fileMD5 = new char[32]; File file = FileUtils.toFile(fileDTO.getDirectoryPath(), fileDTO .getFilePath()); - - MessageDigest digest = MessageDigest.getInstance("MD5"); - MD5Utils.md5sum(file, fileMD5, digest, buffer); - fsMgt.updateTimeOfLastMd5Check( fileDTO.getPk() ); - if (!Arrays.equals(fileMD5, storedMD5 ) ) { - fsMgt.setFileStatus( fileDTO.getPk(), FileStatus.MD5_CHECK_FAILED ); - log.warn("File (pk="+fileDTO.getPk()+") " + file - + " corrupted! MD5 of file:"+ new String(fileMD5) - +" should be "+ new String(storedMD5) ); + if (file.isFile()) { + MessageDigest digest = MessageDigest.getInstance("MD5"); + MD5Utils.md5sum(file, fileMD5, digest, buffer); + fsMgt.updateTimeOfLastMd5Check( fileDTO.getPk() ); + if (!Arrays.equals(fileMD5, storedMD5 ) ) { + fsMgt.setFileStatus( fileDTO.getPk(), FileStatus.MD5_CHECK_FAILED ); + log.warn("File (pk="+fileDTO.getPk()+") " + file + + " corrupted! MD5 of file:"+ new String(fileMD5) + +" should be "+ new String(storedMD5) ); + return false; + } + } else { + fsMgt.setFileStatus( fileDTO.getPk(), FileStatus.MD5_CHECK_FAILED ); + log.warn("File (pk="+fileDTO.getPk()+") " + file + " not found! Set Filestatus to MD5_CHECK_FAILED!"); return false; } return true; - } + } - private boolean isDisabled(int hour) { + private boolean isDisabled(int hour) { if (disabledEndHour == -1) return false; boolean sameday = disabledStartHour <= disabledEndHour; boolean inside = hour >= disabledStartHour && hour < disabledEndHour; @@ -276,12 +281,12 @@ FileSystemMgt2Home.class, FileSystemMgt2Home.JNDI_NAME)).create(); } - public String getTimerIDCheckMD5() { - return timerIDCheckMD5; - } + public String getTimerIDCheckMD5() { + return timerIDCheckMD5; + } - public void setTimerIDCheckMD5(String timerIDCheckMD5) { - this.timerIDCheckMD5 = timerIDCheckMD5; - } + public void setTimerIDCheckMD5(String timerIDCheckMD5) { + this.timerIDCheckMD5 = timerIDCheckMD5; + } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jav...@us...> - 2012-02-17 14:24:02
|
Revision: 16611 http://dcm4che.svn.sourceforge.net/dcm4che/?rev=16611&view=rev Author: javawilli Date: 2012-02-17 14:23:50 +0000 (Fri, 17 Feb 2012) Log Message: ----------- [#DCMEE-1803] MD5Sum Service rechecks "files not found" Modified Paths: -------------- dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/mbean/MD5CheckService.java Modified: dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/mbean/MD5CheckService.java =================================================================== --- dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/mbean/MD5CheckService.java 2012-02-16 15:47:33 UTC (rev 16610) +++ dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/mbean/MD5CheckService.java 2012-02-17 14:23:50 UTC (rev 16611) @@ -241,10 +241,10 @@ final char[] fileMD5 = new char[32]; File file = FileUtils.toFile(fileDTO.getDirectoryPath(), fileDTO .getFilePath()); + fsMgt.updateTimeOfLastMd5Check(fileDTO.getPk()); if (file.isFile()) { MessageDigest digest = MessageDigest.getInstance("MD5"); MD5Utils.md5sum(file, fileMD5, digest, buffer); - fsMgt.updateTimeOfLastMd5Check( fileDTO.getPk() ); if (!Arrays.equals(fileMD5, storedMD5 ) ) { fsMgt.setFileStatus( fileDTO.getPk(), FileStatus.MD5_CHECK_FAILED ); log.warn("File (pk="+fileDTO.getPk()+") " + file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jav...@us...> - 2012-02-22 08:37:51
|
Revision: 16615 http://dcm4che.svn.sourceforge.net/dcm4che/?rev=16615&view=rev Author: javawilli Date: 2012-02-22 08:37:44 +0000 (Wed, 22 Feb 2012) Log Message: ----------- [#DCMEE-1803] MD5Sum Service rechecks "files not found" add limit check to avoid unnecessary queries for checking further file systems . Modified Paths: -------------- dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/mbean/MD5CheckService.java Modified: dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/mbean/MD5CheckService.java =================================================================== --- dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/mbean/MD5CheckService.java 2012-02-21 20:22:32 UTC (rev 16614) +++ dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/mbean/MD5CheckService.java 2012-02-22 08:37:44 UTC (rev 16615) @@ -217,6 +217,8 @@ } limit -= files.length; } + if (limit < 1) + break; } if ( corrupted > 0 ) log.warn( corrupted + " files are corrupted!"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |