Skip to content

Commit

Permalink
Fixed double removal of already executed triggers.
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Mar 6, 2017
1 parent 7a50399 commit 82421c2
Showing 1 changed file with 9 additions and 5 deletions.
Expand Up @@ -188,8 +188,7 @@ private void fireTriggers(AbstractScannerResultHandler<ObjectType> handler, Pris
LOGGER.warn("Trigger without a timestamp in {}", object);
} else {
if (isHot(handler, timestamp)) {
fireTrigger(trigger, object, workerTask, coordinatorTask, result);
removeTrigger(object, trigger.asPrismContainerValue(), workerTask, triggerContainer.getDefinition());
fireTrigger(trigger, object, triggerContainer.getDefinition(), workerTask, coordinatorTask, result);
} else {
LOGGER.trace("Trigger {} is not hot (timestamp={}, thisScanTimestamp={}, lastScanTimestamp={})",
trigger, timestamp, handler.getThisScanTimestamp(), handler.getLastScanTimestamp());
Expand Down Expand Up @@ -217,18 +216,22 @@ private boolean isHot(AbstractScannerResultHandler<ObjectType> handler, XMLGrego
return handler.getLastScanTimestamp() == null || handler.getLastScanTimestamp().compare(timestamp) == DatatypeConstants.LESSER;
}

private void fireTrigger(TriggerType trigger, PrismObject<ObjectType> object, Task workerTask, Task coordinatorTask, OperationResult result) {
private void fireTrigger(TriggerType trigger, PrismObject<ObjectType> object,
PrismContainerDefinition<TriggerType> triggerContainerDefinition,
Task workerTask, Task coordinatorTask, OperationResult result) {
String handlerUri = trigger.getHandlerUri();
if (handlerUri == null) {
LOGGER.warn("Trigger without handler URI in {}", object);
return;
}
LOGGER.debug("Firing trigger {} in {}: id={}", handlerUri, object, trigger.getId());
if (triggerAlreadySeen(coordinatorTask, handlerUri, object.getOid()+":"+trigger.getId())) {
LOGGER.debug("Handler {} already executed for {}:{}", handlerUri, ObjectTypeUtil.toShortString(object), trigger.getId());
return;
}
TriggerHandler handler = triggerHandlerRegistry.getHandler(handlerUri);
if (handler == null) {
LOGGER.warn("No registered trigger handler for URI {} in {}", handlerUri, trigger);
} else if (triggerAlreadySeen(coordinatorTask, handlerUri, object.getOid()+":"+trigger.getId())) {
LOGGER.trace("Handler {} already executed for {}:{}", handlerUri, ObjectTypeUtil.toShortString(object), trigger.getId());
} else {
try {
handler.handle(object, trigger, workerTask, result);
Expand All @@ -239,6 +242,7 @@ private void fireTrigger(TriggerType trigger, PrismObject<ObjectType> object, Ta
result.recordPartialError(e);
}
}
removeTrigger(object, trigger.asPrismContainerValue(), workerTask, triggerContainerDefinition);
}

private void removeTrigger(PrismObject<ObjectType> object, PrismContainerValue<TriggerType> triggerCVal, Task task,
Expand Down

0 comments on commit 82421c2

Please sign in to comment.