} catch (ActionDefinitionMarshallerException e) {
throw new SystemIntegrityException("Fail to unmarshall definition", e);
}
// Search for action executor
ActionExecutor actionExecutor = executors.get(actionIdentifier);
if (actionExecutor == null) {
throw new NullPointerException("Executor is not found for identifier " + identifier);
}
// Check: is action in progress
Boolean alreadyExists = executionTracker.putIfAbsent(scheduleExecutionId, true);
if (alreadyExists != null) {
throw new IllegalStateException("Action is already perfomed for execution=#" + scheduleExecutionId);
}
// Execute action
ActionResult actionResult;
try {
actionResult = actionExecutor.execute(actionDefinition, scheduleExecutionId, address);
if (actionResult == null) {
String message = String.format("Action result is null for execution=#[%d] and node=[%s]",
scheduleExecutionId, address);
throw new NullPointerException(message);
}