From e4630bd03b3388780af0a9d309986e54ba1e8db2 Mon Sep 17 00:00:00 2001 From: brinn <brinn> Date: Tue, 9 Oct 2007 21:57:25 +0000 Subject: [PATCH] change: log failures in directory failures always, but start with LogCategory.OPERATION and use LogCategory.NOTIFY only when sufficiently many errors have occurred SVN: 2080 --- .../utilities/DirectoryScanningTimerTask.java | 17 +- .../common/logging/LogMonitoringAppender.java | 5 + .../DirectoryScanningTimerTaskTest.java | 184 +++++++++++------- 3 files changed, 127 insertions(+), 79 deletions(-) diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTask.java b/common/source/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTask.java index da6af97a52f..9363d1fd3f7 100644 --- a/common/source/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTask.java +++ b/common/source/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTask.java @@ -175,8 +175,11 @@ public final class DirectoryScanningTimerTask extends TimerTask implements ISelf private File[] listFiles() { - final boolean logErrors = (errorCountReadingDirectory == ignoredErrorCount); // Avoid mailbox flooding. - final ISimpleLogger errorLogger = logErrors ? createSimpleErrorLogger() : null; + final boolean logNotifyError = (errorCountReadingDirectory == ignoredErrorCount); // Avoid mailbox flooding. + final boolean logOperationError = (errorCountReadingDirectory < ignoredErrorCount); + final ISimpleLogger errorLogger = + logNotifyError ? createSimpleErrorLogger(LogCategory.NOTIFY) + : (logOperationError ? createSimpleErrorLogger(LogCategory.OPERATION) : null); final File[] paths = FileUtilities.tryListFiles(sourceDirectory, filter, errorLogger); if (errorCountReadingDirectory > ignoredErrorCount && paths != null) @@ -196,13 +199,19 @@ public final class DirectoryScanningTimerTask extends TimerTask implements ISelf return (paths == null) ? new File[0] : paths; } - private ISimpleLogger createSimpleErrorLogger() + private ISimpleLogger createSimpleErrorLogger(final LogCategory category) { return new ISimpleLogger() { public void log(String message) { - notificationLog.log(Level.ERROR, message); + if (category == LogCategory.NOTIFY) + { + notificationLog.log(Level.ERROR, message); + } else + { + operationLog.log(Level.WARN, message); + } } public void log(String messageTemplate, Object... args) diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/logging/LogMonitoringAppender.java b/common/sourceTest/java/ch/systemsx/cisd/common/logging/LogMonitoringAppender.java index 4f1f3b61936..28d3c8a7ec3 100644 --- a/common/sourceTest/java/ch/systemsx/cisd/common/logging/LogMonitoringAppender.java +++ b/common/sourceTest/java/ch/systemsx/cisd/common/logging/LogMonitoringAppender.java @@ -118,4 +118,9 @@ public final class LogMonitoringAppender extends AppenderSkeleton { assert logHappened : "Following log snippet has been missed: " + messagePart; } + + public void reset() + { + logHappened = false; + } } diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTaskTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTaskTest.java index 802f22a225b..969ec93914a 100644 --- a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTaskTest.java +++ b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTaskTest.java @@ -304,16 +304,21 @@ public class DirectoryScanningTimerTaskTest { final File dir = new File(workingDirectory, "testMissingDirectory"); dir.mkdir(); - LogMonitoringAppender appender = + final LogMonitoringAppender appender = LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "Failed to get listing of directory"); - // The directory needs to exist when the scanner is created, otherwise the self-test will fail. - final DirectoryScanningTimerTask scanner = - new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler); - dir.delete(); - assert dir.exists() == false; - scanner.run(); - appender.verifyLogHasHappened(); - LogMonitoringAppender.removeAppender(appender); + try + { + // The directory needs to exist when the scanner is created, otherwise the self-test will fail. + final DirectoryScanningTimerTask scanner = + new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler); + dir.delete(); + assert dir.exists() == false; + scanner.run(); + appender.verifyLogHasHappened(); + } finally + { + LogMonitoringAppender.removeAppender(appender); + } } @Test @@ -321,19 +326,25 @@ public class DirectoryScanningTimerTaskTest { final File dir = new File(workingDirectory, "testMissingDirectory"); dir.mkdir(); - LogMonitoringAppender appender = + final LogMonitoringAppender appender = LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "Failed to get listing of directory"); - // The directory needs to exist when the scanner is created, otherwise the self-test will fail. - final DirectoryScanningTimerTask scanner = - new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler); - dir.delete(); - dir.createNewFile(); - dir.deleteOnExit(); - assert dir.isFile(); - scanner.run(); - appender.verifyLogHasHappened(); - dir.delete(); - LogMonitoringAppender.removeAppender(appender); + try + { + // The directory needs to exist when the scanner is created, otherwise the self-test will fail. + final DirectoryScanningTimerTask scanner = + new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler); + dir.delete(); + dir.createNewFile(); + dir.deleteOnExit(); + assert dir.isFile(); + scanner.run(); + appender.verifyLogHasHappened(); + dir.delete(); + } + finally + { + LogMonitoringAppender.removeAppender(appender); + } } @Test @@ -345,20 +356,25 @@ public class DirectoryScanningTimerTaskTest final File file = new File(dir, "some.file"); file.createNewFile(); file.deleteOnExit(); - LogMonitoringAppender appender1 = + final LogMonitoringAppender appender1 = LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "Failed to get listing of directory"); - LogMonitoringAppender appender2 = + final LogMonitoringAppender appender2 = LogMonitoringAppender.addAppender(LogCategory.NOTIFY, EXCEPTION_THROWING_FILE_FILTER_MESSAGE); - // The directory needs to exist when the scanner is created, otherwise the self-test will fail. - final DirectoryScanningTimerTask scanner = - new DirectoryScanningTimerTask(dir, EXCEPTION_THROWING_FILE_FILTER, mockPathHandler); - scanner.run(); - appender1.verifyLogHasHappened(); - appender2.verifyLogHasHappened(); - file.delete(); - dir.delete(); - LogMonitoringAppender.removeAppender(appender1); - LogMonitoringAppender.removeAppender(appender2); + try + { + // The directory needs to exist when the scanner is created, otherwise the self-test will fail. + final DirectoryScanningTimerTask scanner = + new DirectoryScanningTimerTask(dir, EXCEPTION_THROWING_FILE_FILTER, mockPathHandler); + scanner.run(); + appender1.verifyLogHasHappened(); + appender2.verifyLogHasHappened(); + file.delete(); + dir.delete(); + } finally + { + LogMonitoringAppender.removeAppender(appender1); + LogMonitoringAppender.removeAppender(appender2); + } } @Test @@ -366,32 +382,45 @@ public class DirectoryScanningTimerTaskTest { final File dir = new File(workingDirectory, "testSuppressLogging"); dir.mkdir(); - LogMonitoringAppender appenderError = + final LogMonitoringAppender appenderNotifyError = LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "Failed to get listing of directory"); - LogMonitoringAppender appenderOK = + final LogMonitoringAppender appenderOperationError = + LogMonitoringAppender.addAppender(LogCategory.OPERATION, "Failed to get listing of directory"); + final LogMonitoringAppender appenderOK = LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "' is available again"); - final int numberOfErrorsToIgnore = 2; - // The directory needs to exist when the scanner is created, otherwise the self-test will fail. - final DirectoryScanningTimerTask scanner = - new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler, numberOfErrorsToIgnore); - dir.delete(); - assert dir.exists() == false; - // First error -> ignored - scanner.run(); - appenderError.verifyLogHasNotHappened(); - // Second error -> ignored - scanner.run(); - appenderError.verifyLogHasNotHappened(); - // Third error -> recorded - scanner.run(); - appenderError.verifyLogHasHappened(); - dir.mkdir(); - assert dir.exists(); - // Now it is OK again and that should be logged as well - scanner.run(); - appenderOK.verifyLogHasHappened(); - LogMonitoringAppender.removeAppender(appenderError); - LogMonitoringAppender.removeAppender(appenderOK); + try + { + final int numberOfErrorsToIgnore = 2; + // The directory needs to exist when the scanner is created, otherwise the self-test will fail. + final DirectoryScanningTimerTask scanner = + new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler, numberOfErrorsToIgnore); + dir.delete(); + assert dir.exists() == false; + // First error -> ignored + scanner.run(); + appenderOperationError.verifyLogHasHappened(); + appenderNotifyError.verifyLogHasNotHappened(); + // Second error -> ignored + appenderOperationError.reset(); + scanner.run(); + appenderOperationError.verifyLogHasHappened(); + appenderNotifyError.verifyLogHasNotHappened(); + // Third error -> recorded + appenderOperationError.reset(); + scanner.run(); + appenderOperationError.verifyLogHasNotHappened(); + appenderNotifyError.verifyLogHasHappened(); + dir.mkdir(); + assert dir.exists(); + // Now it is OK again and that should be logged as well + scanner.run(); + appenderOK.verifyLogHasHappened(); + } finally + { + LogMonitoringAppender.removeAppender(appenderNotifyError); + LogMonitoringAppender.removeAppender(appenderOperationError); + LogMonitoringAppender.removeAppender(appenderOK); + } } @Test @@ -399,26 +428,31 @@ public class DirectoryScanningTimerTaskTest { final File dir = new File(workingDirectory, "testDoNotLogDirectoryAvailableWhenNoErrorWasLogged"); dir.mkdir(); - LogMonitoringAppender appender = + final LogMonitoringAppender appender = LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "' is available again."); - final int numberOfErrorsToIgnore = 2; - // The directory needs to exist when the scanner is created, otherwise the self-test will fail. - final DirectoryScanningTimerTask scanner = + try + { + final int numberOfErrorsToIgnore = 2; + // The directory needs to exist when the scanner is created, otherwise the self-test will fail. + final DirectoryScanningTimerTask scanner = new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler, numberOfErrorsToIgnore); - dir.delete(); - assert dir.exists() == false; - // First error -> ignored - scanner.run(); - appender.verifyLogHasNotHappened(); - // Second error -> ignored - scanner.run(); - appender.verifyLogHasNotHappened(); - dir.mkdir(); - assert dir.exists(); - // Now it's OK, but nothing should be logged because the error wasn't logged either. - scanner.run(); - appender.verifyLogHasNotHappened(); - LogMonitoringAppender.removeAppender(appender); + dir.delete(); + assert dir.exists() == false; + // First error -> ignored + scanner.run(); + appender.verifyLogHasNotHappened(); + // Second error -> ignored + scanner.run(); + appender.verifyLogHasNotHappened(); + dir.mkdir(); + assert dir.exists(); + // Now it's OK, but nothing should be logged because the error wasn't logged either. + scanner.run(); + appender.verifyLogHasNotHappened(); + } finally + { + LogMonitoringAppender.removeAppender(appender); + } } } -- GitLab