@Override public void handle(Throwable cause) { ExecutionErrorContext errorContext = new ExecutionErrorContext(cause, lastExecutedNode, lastExecutedTask, firstExecutedNode); for (ExecutionErrorFilter filter : filters) { if (filter.accept(errorContext)) { ExecutionError error = filter.filter(errorContext); logger.debug("Filter {} returned {} for {}", filter, error, cause); if (error != null) { try { storage.store(error); logger.debug("Error event {} stored successfully in {}", error, storage); } catch (Throwable e) { logger.warn("Could not persist execution error {} due to {}", error, e.getMessage()); logger.debug("Stack trace ", e); } } else { logger.debug("Filter {} accepted error {} but didn't produce results (error should be ignored)", filter, cause); } return; } } // in case it ended up here - meaning not filters dealt with it, simply log the error logger.error("Unexpected error during processing ", cause); }
public ExecutionErrorManagerImpl(ExecutionErrorStorage storage) { ServiceLoader<ExecutionErrorFilter> discoveredFilters = ServiceLoader.load(ExecutionErrorFilter.class); discoveredFilters.forEach(filter -> filters.add(filter)); filters.sort((ExecutionErrorFilter f1, ExecutionErrorFilter f2) -> { return f1.getPriority().compareTo(f2.getPriority()); }); logger.debug("Error handling filters {}", this.filters); this.storage = storage; logger.debug("Execution error storage {}", this.storage); }
@Override public void handle(Throwable cause) { ExecutionErrorContext errorContext = new ExecutionErrorContext(cause, lastExecutedNode, lastExecutedTask, firstExecutedNode); for (ExecutionErrorFilter filter : filters) { if (filter.accept(errorContext)) { ExecutionError error = filter.filter(errorContext); logger.debug("Filter {} returned {} for {}", filter, error, cause); if (error != null) { try { storage.store(error); logger.debug("Error event {} stored successfully in {}", error, storage); } catch (Throwable e) { logger.warn("Could not persist execution error {} due to {}", error, e.getMessage()); logger.debug("Stack trace ", e); } } else { logger.debug("Filter {} accepted error {} but didn't produce results (error should be ignored)", filter, cause); } return; } } // in case it ended up here - meaning not filters dealt with it, simply log the error logger.error("Unexpected error during processing ", cause); }
public ExecutionErrorManagerImpl(ExecutionErrorStorage storage) { ServiceLoader<ExecutionErrorFilter> discoveredFilters = ServiceLoader.load(ExecutionErrorFilter.class); discoveredFilters.forEach(filter -> filters.add(filter)); filters.sort((ExecutionErrorFilter f1, ExecutionErrorFilter f2) -> { return f1.getPriority().compareTo(f2.getPriority()); }); logger.debug("Error handling filters {}", this.filters); this.storage = storage; logger.debug("Execution error storage {}", this.storage); }