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

fix: do proper logging of errors in QuietPeriodFileFilter when calling lastChanged()

SVN: 7439
parent f44c4f9b
No related branches found
No related tags found
No related merge requests found
...@@ -26,8 +26,10 @@ import org.apache.log4j.Logger; ...@@ -26,8 +26,10 @@ import org.apache.log4j.Logger;
import ch.rinn.restrictions.Private; import ch.rinn.restrictions.Private;
import ch.systemsx.cisd.common.exceptions.StatusWithResult; import ch.systemsx.cisd.common.exceptions.StatusWithResult;
import ch.systemsx.cisd.common.logging.ConditionalNotificationLogger;
import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogCategory;
import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.logging.LogFactory;
import ch.systemsx.cisd.common.logging.LogLevel;
import ch.systemsx.cisd.common.utilities.ITimeProvider; import ch.systemsx.cisd.common.utilities.ITimeProvider;
import ch.systemsx.cisd.common.utilities.StoreItem; import ch.systemsx.cisd.common.utilities.StoreItem;
import ch.systemsx.cisd.common.utilities.SystemTimeProvider; import ch.systemsx.cisd.common.utilities.SystemTimeProvider;
...@@ -49,6 +51,8 @@ import ch.systemsx.cisd.datamover.intf.ITimingParameters; ...@@ -49,6 +51,8 @@ import ch.systemsx.cisd.datamover.intf.ITimingParameters;
*/ */
public class QuietPeriodFileFilter implements IStoreItemFilter public class QuietPeriodFileFilter implements IStoreItemFilter
{ {
private static final int IGNORED_ERROR_COUNT_BEFORE_NOTIFICATION = 3;
@Private @Private
static final int CLEANUP_TO_QUIET_PERIOD_RATIO = 10; static final int CLEANUP_TO_QUIET_PERIOD_RATIO = 10;
...@@ -63,6 +67,13 @@ public class QuietPeriodFileFilter implements IStoreItemFilter ...@@ -63,6 +67,13 @@ public class QuietPeriodFileFilter implements IStoreItemFilter
private final static Logger machineLog = private final static Logger machineLog =
LogFactory.getLogger(LogCategory.MACHINE, QuietPeriodFileFilter.class); LogFactory.getLogger(LogCategory.MACHINE, QuietPeriodFileFilter.class);
private final static Logger notifyLog =
LogFactory.getLogger(LogCategory.NOTIFY, QuietPeriodFileFilter.class);
private final ConditionalNotificationLogger conditionalNotifyLog =
new ConditionalNotificationLogger(machineLog, notifyLog,
IGNORED_ERROR_COUNT_BEFORE_NOTIFICATION);
private final long quietPeriodMillis; private final long quietPeriodMillis;
private final long cleanUpPeriodMillis; private final long cleanUpPeriodMillis;
...@@ -159,12 +170,18 @@ public class QuietPeriodFileFilter implements IStoreItemFilter ...@@ -159,12 +170,18 @@ public class QuietPeriodFileFilter implements IStoreItemFilter
return false; return false;
} }
final long oldLastChanged = checkRecordOrNull.getTimeOfLastModification(); final long oldLastChanged = checkRecordOrNull.getTimeOfLastModification();
final StatusWithResult<Long> newStatus = fileStore.lastChanged(item, oldLastChanged); final StatusWithResult<Long> status = fileStore.lastChanged(item, oldLastChanged);
if (newStatus.isError()) if (status.isError())
{ {
conditionalNotifyLog.log(LogLevel.ERROR, String.format(
"Cannot obtain \"last changed\" status of item '%s' in store '%s': %s",
item, fileStore, status.tryGetErrorMessage()));
return false; return false;
} else
{
conditionalNotifyLog.reset(null);
} }
final long newLastChanged = newStatus.tryGetResult(); final long newLastChanged = status.tryGetResult();
if (newLastChanged != oldLastChanged) if (newLastChanged != oldLastChanged)
{ {
pathMap.put(item, new PathCheckRecord(now, newLastChanged)); pathMap.put(item, new PathCheckRecord(now, newLastChanged));
...@@ -202,6 +219,12 @@ public class QuietPeriodFileFilter implements IStoreItemFilter ...@@ -202,6 +219,12 @@ public class QuietPeriodFileFilter implements IStoreItemFilter
if (status.isError() == false) if (status.isError() == false)
{ {
pathMap.put(item, new PathCheckRecord(now, status.tryGetResult())); pathMap.put(item, new PathCheckRecord(now, status.tryGetResult()));
conditionalNotifyLog.reset(null);
} else
{
conditionalNotifyLog.log(LogLevel.ERROR, String.format(
"Cannot obtain \"last changed\" status of item '%s' in store '%s': %s",
item, fileStore, status.tryGetErrorMessage()));
} }
} }
......
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