protected List<EventExecution> executeEvent(String event, Message msg) throws Exception {
        List<EventHandler> eventHandlerList;
        List<EventExecution> transientFailures = new ArrayList<>();

        try {
            eventHandlerList = metadataService.getEventHandlersForEvent(event, true);
        } catch (TransientException transientException) {
            transientFailures.add(new EventExecution(event, msg.getId()));
            return transientFailures;
        }

        Object payloadObject = getPayloadObject(msg.getPayload());
        for (EventHandler eventHandler : eventHandlerList) {
            String condition = eventHandler.getCondition();
            String evaluatorType = eventHandler.getEvaluatorType();
            // Set default to true so that if condition is not specified, it falls through
            // to process the event.
            boolean success = true;
            if (StringUtils.isNotEmpty(condition) && evaluators.get(evaluatorType) != null) {
                Object result =
                        evaluators
                                .get(evaluatorType)
                                .evaluate(condition, jsonUtils.expand(payloadObject));
                success = ScriptEvaluator.toBoolean(result);
            } else if (StringUtils.isNotEmpty(condition)) {
                LOGGER.debug("Checking condition: {} for event: {}", condition, event);
                success = ScriptEvaluator.evalBool(condition, jsonUtils.expand(payloadObject));
            }

            if (!success) {
                String id = msg.getId() + "_" + 0;
                EventExecution eventExecution = new EventExecution(id, msg.getId());
                eventExecution.setCreated(System.currentTimeMillis());
                eventExecution.setEvent(eventHandler.getEvent());
                eventExecution.setName(eventHandler.getName());
                eventExecution.setStatus(Status.SKIPPED);
                eventExecution.getOutput().put("msg", msg.getPayload());
                eventExecution.getOutput().put("condition", condition);
                executionService.addEventExecution(eventExecution);
                LOGGER.debug(
                        "Condition: {} not successful for event: {} with payload: {}",
                        condition,
                        eventHandler.getEvent(),
                        msg.getPayload());
                continue;
            }

            CompletableFuture<List<EventExecution>> future =
                    executeActionsForEventHandler(eventHandler, msg);
            future.whenComplete(
                            (result, error) ->
                                    result.forEach(
                                            eventExecution -> {
                                                if (error != null
                                                        || eventExecution.getStatus()
                                                                == Status.IN_PROGRESS) {
                                                    transientFailures.add(eventExecution);
                                                } else {
                                                    executionService.updateEventExecution(
                                                            eventExecution);
                                                }
                                            }))
                    .get();
        }
        return processTransientFailures(transientFailures);
    }
Executes all the actions configured on all the event handlers triggered by the {@link
Message} on the queue If any of the actions on an event handler fails due to a transient
failure, the execution is not persisted such that it can be retried

@return a list of {@link EventExecution} that failed due to transient failures.
core/src/main/java/com/netflix/conductor/core/events/DefaultEventProcessor.java