Skip to content
Snippets Groups Projects
Commit e4630bd0 authored by brinn's avatar brinn
Browse files

change: log failures in directory failures always, but start with...

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
parent d0e5a75f
No related branches found
No related tags found
No related merge requests found
...@@ -175,8 +175,11 @@ public final class DirectoryScanningTimerTask extends TimerTask implements ISelf ...@@ -175,8 +175,11 @@ public final class DirectoryScanningTimerTask extends TimerTask implements ISelf
private File[] listFiles() private File[] listFiles()
{ {
final boolean logErrors = (errorCountReadingDirectory == ignoredErrorCount); // Avoid mailbox flooding. final boolean logNotifyError = (errorCountReadingDirectory == ignoredErrorCount); // Avoid mailbox flooding.
final ISimpleLogger errorLogger = logErrors ? createSimpleErrorLogger() : null; 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); final File[] paths = FileUtilities.tryListFiles(sourceDirectory, filter, errorLogger);
if (errorCountReadingDirectory > ignoredErrorCount && paths != null) if (errorCountReadingDirectory > ignoredErrorCount && paths != null)
...@@ -196,13 +199,19 @@ public final class DirectoryScanningTimerTask extends TimerTask implements ISelf ...@@ -196,13 +199,19 @@ public final class DirectoryScanningTimerTask extends TimerTask implements ISelf
return (paths == null) ? new File[0] : paths; return (paths == null) ? new File[0] : paths;
} }
private ISimpleLogger createSimpleErrorLogger() private ISimpleLogger createSimpleErrorLogger(final LogCategory category)
{ {
return new ISimpleLogger() return new ISimpleLogger()
{ {
public void log(String message) 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) public void log(String messageTemplate, Object... args)
......
...@@ -118,4 +118,9 @@ public final class LogMonitoringAppender extends AppenderSkeleton ...@@ -118,4 +118,9 @@ public final class LogMonitoringAppender extends AppenderSkeleton
{ {
assert logHappened : "Following log snippet has been missed: " + messagePart; assert logHappened : "Following log snippet has been missed: " + messagePart;
} }
public void reset()
{
logHappened = false;
}
} }
...@@ -304,16 +304,21 @@ public class DirectoryScanningTimerTaskTest ...@@ -304,16 +304,21 @@ public class DirectoryScanningTimerTaskTest
{ {
final File dir = new File(workingDirectory, "testMissingDirectory"); final File dir = new File(workingDirectory, "testMissingDirectory");
dir.mkdir(); dir.mkdir();
LogMonitoringAppender appender = final LogMonitoringAppender appender =
LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "Failed to get listing of directory"); 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. try
final DirectoryScanningTimerTask scanner = {
new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler); // The directory needs to exist when the scanner is created, otherwise the self-test will fail.
dir.delete(); final DirectoryScanningTimerTask scanner =
assert dir.exists() == false; new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler);
scanner.run(); dir.delete();
appender.verifyLogHasHappened(); assert dir.exists() == false;
LogMonitoringAppender.removeAppender(appender); scanner.run();
appender.verifyLogHasHappened();
} finally
{
LogMonitoringAppender.removeAppender(appender);
}
} }
@Test @Test
...@@ -321,19 +326,25 @@ public class DirectoryScanningTimerTaskTest ...@@ -321,19 +326,25 @@ public class DirectoryScanningTimerTaskTest
{ {
final File dir = new File(workingDirectory, "testMissingDirectory"); final File dir = new File(workingDirectory, "testMissingDirectory");
dir.mkdir(); dir.mkdir();
LogMonitoringAppender appender = final LogMonitoringAppender appender =
LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "Failed to get listing of directory"); 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. try
final DirectoryScanningTimerTask scanner = {
new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler); // The directory needs to exist when the scanner is created, otherwise the self-test will fail.
dir.delete(); final DirectoryScanningTimerTask scanner =
dir.createNewFile(); new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler);
dir.deleteOnExit(); dir.delete();
assert dir.isFile(); dir.createNewFile();
scanner.run(); dir.deleteOnExit();
appender.verifyLogHasHappened(); assert dir.isFile();
dir.delete(); scanner.run();
LogMonitoringAppender.removeAppender(appender); appender.verifyLogHasHappened();
dir.delete();
}
finally
{
LogMonitoringAppender.removeAppender(appender);
}
} }
@Test @Test
...@@ -345,20 +356,25 @@ public class DirectoryScanningTimerTaskTest ...@@ -345,20 +356,25 @@ public class DirectoryScanningTimerTaskTest
final File file = new File(dir, "some.file"); final File file = new File(dir, "some.file");
file.createNewFile(); file.createNewFile();
file.deleteOnExit(); file.deleteOnExit();
LogMonitoringAppender appender1 = final LogMonitoringAppender appender1 =
LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "Failed to get listing of directory"); LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "Failed to get listing of directory");
LogMonitoringAppender appender2 = final LogMonitoringAppender appender2 =
LogMonitoringAppender.addAppender(LogCategory.NOTIFY, EXCEPTION_THROWING_FILE_FILTER_MESSAGE); 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. try
final DirectoryScanningTimerTask scanner = {
new DirectoryScanningTimerTask(dir, EXCEPTION_THROWING_FILE_FILTER, mockPathHandler); // The directory needs to exist when the scanner is created, otherwise the self-test will fail.
scanner.run(); final DirectoryScanningTimerTask scanner =
appender1.verifyLogHasHappened(); new DirectoryScanningTimerTask(dir, EXCEPTION_THROWING_FILE_FILTER, mockPathHandler);
appender2.verifyLogHasHappened(); scanner.run();
file.delete(); appender1.verifyLogHasHappened();
dir.delete(); appender2.verifyLogHasHappened();
LogMonitoringAppender.removeAppender(appender1); file.delete();
LogMonitoringAppender.removeAppender(appender2); dir.delete();
} finally
{
LogMonitoringAppender.removeAppender(appender1);
LogMonitoringAppender.removeAppender(appender2);
}
} }
@Test @Test
...@@ -366,32 +382,45 @@ public class DirectoryScanningTimerTaskTest ...@@ -366,32 +382,45 @@ public class DirectoryScanningTimerTaskTest
{ {
final File dir = new File(workingDirectory, "testSuppressLogging"); final File dir = new File(workingDirectory, "testSuppressLogging");
dir.mkdir(); dir.mkdir();
LogMonitoringAppender appenderError = final LogMonitoringAppender appenderNotifyError =
LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "Failed to get listing of directory"); 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"); LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "' is available again");
final int numberOfErrorsToIgnore = 2; try
// The directory needs to exist when the scanner is created, otherwise the self-test will fail. {
final DirectoryScanningTimerTask scanner = final int numberOfErrorsToIgnore = 2;
new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler, numberOfErrorsToIgnore); // The directory needs to exist when the scanner is created, otherwise the self-test will fail.
dir.delete(); final DirectoryScanningTimerTask scanner =
assert dir.exists() == false; new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler, numberOfErrorsToIgnore);
// First error -> ignored dir.delete();
scanner.run(); assert dir.exists() == false;
appenderError.verifyLogHasNotHappened(); // First error -> ignored
// Second error -> ignored scanner.run();
scanner.run(); appenderOperationError.verifyLogHasHappened();
appenderError.verifyLogHasNotHappened(); appenderNotifyError.verifyLogHasNotHappened();
// Third error -> recorded // Second error -> ignored
scanner.run(); appenderOperationError.reset();
appenderError.verifyLogHasHappened(); scanner.run();
dir.mkdir(); appenderOperationError.verifyLogHasHappened();
assert dir.exists(); appenderNotifyError.verifyLogHasNotHappened();
// Now it is OK again and that should be logged as well // Third error -> recorded
scanner.run(); appenderOperationError.reset();
appenderOK.verifyLogHasHappened(); scanner.run();
LogMonitoringAppender.removeAppender(appenderError); appenderOperationError.verifyLogHasNotHappened();
LogMonitoringAppender.removeAppender(appenderOK); 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 @Test
...@@ -399,26 +428,31 @@ public class DirectoryScanningTimerTaskTest ...@@ -399,26 +428,31 @@ public class DirectoryScanningTimerTaskTest
{ {
final File dir = new File(workingDirectory, "testDoNotLogDirectoryAvailableWhenNoErrorWasLogged"); final File dir = new File(workingDirectory, "testDoNotLogDirectoryAvailableWhenNoErrorWasLogged");
dir.mkdir(); dir.mkdir();
LogMonitoringAppender appender = final LogMonitoringAppender appender =
LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "' is available again."); LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "' is available again.");
final int numberOfErrorsToIgnore = 2; try
// The directory needs to exist when the scanner is created, otherwise the self-test will fail. {
final DirectoryScanningTimerTask scanner = 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); new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler, numberOfErrorsToIgnore);
dir.delete(); dir.delete();
assert dir.exists() == false; assert dir.exists() == false;
// First error -> ignored // First error -> ignored
scanner.run(); scanner.run();
appender.verifyLogHasNotHappened(); appender.verifyLogHasNotHappened();
// Second error -> ignored // Second error -> ignored
scanner.run(); scanner.run();
appender.verifyLogHasNotHappened(); appender.verifyLogHasNotHappened();
dir.mkdir(); dir.mkdir();
assert dir.exists(); assert dir.exists();
// Now it's OK, but nothing should be logged because the error wasn't logged either. // Now it's OK, but nothing should be logged because the error wasn't logged either.
scanner.run(); scanner.run();
appender.verifyLogHasNotHappened(); appender.verifyLogHasNotHappened();
LogMonitoringAppender.removeAppender(appender); } finally
{
LogMonitoringAppender.removeAppender(appender);
}
} }
} }
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