EffectorUtils rethrows PropagatedRuntimeExceptions where possible Rather than wrapping in more PropagatedRuntimeExceptions
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/5031d4f4 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/5031d4f4 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/5031d4f4 Branch: refs/heads/master Commit: 5031d4f49ace3468db842b82297cd7cef679ad15 Parents: 7519476 Author: Sam Corbett <[email protected]> Authored: Thu May 14 19:47:34 2015 +0100 Committer: Sam Corbett <[email protected]> Committed: Fri May 29 14:38:52 2015 +0100 ---------------------------------------------------------------------- .../brooklyn/management/internal/EffectorUtils.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5031d4f4/core/src/main/java/brooklyn/management/internal/EffectorUtils.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/management/internal/EffectorUtils.java b/core/src/main/java/brooklyn/management/internal/EffectorUtils.java index c14b98c..556ca23 100644 --- a/core/src/main/java/brooklyn/management/internal/EffectorUtils.java +++ b/core/src/main/java/brooklyn/management/internal/EffectorUtils.java @@ -259,8 +259,16 @@ public class EffectorUtils { } public static void handleEffectorException(Entity entity, Effector<?> effector, Throwable throwable) { - log.warn("Error invoking "+effector.getName()+" at "+entity+": "+Exceptions.collapseText(throwable)); - throw new PropagatedRuntimeException("Error invoking "+effector.getName()+" at "+entity, throwable); + String message = "Error invoking " + effector.getName() + " at " + entity; + // Avoid throwing a PropagatedRuntimeException that just repeats the last PropagatedRuntimeException. + if (throwable instanceof PropagatedRuntimeException && + throwable.getMessage() != null && + throwable.getMessage().startsWith(message)) { + throw PropagatedRuntimeException.class.cast(throwable); + } else { + log.warn(message + ": " + Exceptions.collapseText(throwable)); + throw new PropagatedRuntimeException(message, throwable); + } } public static <T> Task<T> invokeEffectorAsync(Entity entity, Effector<T> eff, Map<String,?> parameters) {
