Skip to content

Commit cd48bb9

Browse files
authored
Merge pull request #535 from jglick/CpsStepContext.completed
Never print warnings from `CpsStepContext.completed`, but use `addSuppressed`
2 parents 71dd22b + de95488 commit cd48bb9

File tree

1 file changed

+16
-22
lines changed

1 file changed

+16
-22
lines changed

src/main/java/org/jenkinsci/plugins/workflow/cps/CpsStepContext.java

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import com.google.common.util.concurrent.SettableFuture;
3131
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
3232
import groovy.lang.Closure;
33-
import hudson.Main;
3433
import hudson.model.Descriptor;
3534
import hudson.model.Result;
3635
import hudson.util.DaemonThreadFactory;
@@ -66,6 +65,7 @@
6665
import java.util.function.Function;
6766
import java.util.logging.Level;
6867
import java.util.logging.Logger;
68+
import java.util.stream.Stream;
6969
import jenkins.model.CauseOfInterruption;
7070
import jenkins.util.ContextResettingExecutorService;
7171
import org.codehaus.groovy.runtime.InvokerInvocationException;
@@ -328,39 +328,33 @@ private void completed(@NonNull Outcome newOutcome) {
328328
whenOutcomeDelivered = new Throwable();
329329
} else {
330330
Throwable failure = newOutcome.getAbnormal();
331-
Level level;
332-
if (Main.isUnitTest) {
333-
if (failure instanceof FlowInterruptedException && ((FlowInterruptedException) failure).getCauses().stream().anyMatch(BodyFailed.class::isInstance)) {
334-
// Very common and generally uninteresting.
335-
level = Level.FINE;
336-
} else {
337-
// Possibly a minor bug.
338-
level = Level.INFO;
339-
}
340-
} else {
341-
// Typically harmless; do not alarm users.
342-
level = Level.FINE;
343-
}
344-
if (LOGGER.isLoggable(level)) {
345-
LOGGER.log(level, "already completed " + this, new IllegalStateException("delivered here"));
331+
Throwable earlierFailure = outcome.getAbnormal();
332+
if (LOGGER.isLoggable(Level.FINE)) {
333+
LOGGER.log(Level.FINE, "already completed " + this, new IllegalStateException("delivered here"));
346334
if (failure != null) {
347-
LOGGER.log(level, "new failure", failure);
335+
LOGGER.log(Level.FINE, "new failure", failure);
348336
} else {
349-
LOGGER.log(level, "new success: {0}", outcome.getNormal());
337+
LOGGER.log(Level.FINE, "new success: {0}", outcome.getNormal());
350338
}
351339
if (whenOutcomeDelivered != null) {
352-
LOGGER.log(level, "previously delivered here", whenOutcomeDelivered);
340+
LOGGER.log(Level.FINE, "previously delivered here", whenOutcomeDelivered);
353341
}
354-
Throwable earlierFailure = outcome.getAbnormal();
355342
if (earlierFailure != null) {
356-
LOGGER.log(level, "earlier failure", earlierFailure);
343+
LOGGER.log(Level.FINE, "earlier failure", earlierFailure);
357344
} else {
358-
LOGGER.log(level, "earlier success: {0}", outcome.getNormal());
345+
LOGGER.log(Level.FINE, "earlier success: {0}", outcome.getNormal());
359346
}
360347
}
348+
if (failure != null && earlierFailure != null && !refersTo(failure, earlierFailure)) {
349+
earlierFailure.addSuppressed(failure);
350+
}
361351
}
362352
}
363353

354+
private static boolean refersTo(Throwable t1, Throwable t2) {
355+
return t1 == t2 || t1.getCause() != null && refersTo(t1.getCause(), t2) || Stream.of(t1.getSuppressed()).anyMatch(t3 -> refersTo(t3, t2));
356+
}
357+
364358
/**
365359
* When this step context has completed execution (successful or otherwise), plan the next action.
366360
*/

0 commit comments

Comments
 (0)