Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #47 from jglick/AbortException
[JENKINS-33815] Fixing FolderComputation to properly handle AbortException
  • Loading branch information
jglick committed Mar 25, 2016
2 parents 26c075f + fa56150 commit 585f91a
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 4 deletions.
Expand Up @@ -24,11 +24,11 @@

package com.cloudbees.hudson.plugins.folder.computed;

import hudson.AbortException;
import hudson.BulkChange;
import hudson.Util;
import hudson.XmlFile;
import hudson.console.AnnotatedLargeText;
import hudson.model.AbstractItem;
import hudson.model.Actionable;
import hudson.model.BallColor;
import hudson.model.Cause;
Expand All @@ -41,7 +41,6 @@
import hudson.model.StreamBuildListener;
import hudson.model.TopLevelItem;
import hudson.model.listeners.SaveableListener;
import hudson.model.queue.SubTask;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
Expand Down Expand Up @@ -110,11 +109,16 @@ public void run() {
folder.updateChildren(listener);
_result = Result.SUCCESS;
} catch (InterruptedException x) {
LOGGER.log(Level.FINE, "recomputation of " + folder.getFullName() + " was aborted", x);
listener.getLogger().println("Aborted");
_result = Result.ABORTED;
} catch (Exception x) {
// TODO skip stack trace for AbortException
x.printStackTrace(listener.fatalError("Failed to recompute children of " + getDisplayName()));
LOGGER.log(Level.FINE, "recomputation of " + folder.getFullName() + " failed", x);
if (x instanceof AbortException) {
listener.fatalError(x.getMessage());
} else {
x.printStackTrace(listener.fatalError("Failed to recompute children of " + folder.getFullDisplayName()));
}
_result = Result.FAILURE;
} finally {
duration = System.currentTimeMillis() - timestamp;
Expand Down
Expand Up @@ -24,12 +24,14 @@
package com.cloudbees.hudson.plugins.folder.computed;

import com.cloudbees.hudson.plugins.folder.AbstractFolderDescriptor;
import hudson.AbortException;
import hudson.model.FreeStyleBuild;
import hudson.model.FreeStyleProject;
import hudson.model.ItemGroup;
import hudson.model.Result;
import hudson.model.TaskListener;
import hudson.model.TopLevelItem;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
Expand Down Expand Up @@ -82,6 +84,26 @@ public void duplicateEntries() throws Exception {
assertEquals("{A=updated in round #5, B=created in round #5, C=updated in round #5, D=created in round #5}", descriptions.toString());
}

@Test
public void abortException() throws Exception {
SampleComputedFolder d = r.jenkins.createProject(SampleComputedFolder.class, "d");
d.setDisplayName("My Folder");
d.kids.addAll(Arrays.asList("A", "B"));
d.recompute();
d.assertItemNames(1, "A", "B");
d.kids.add("Z");
d.kids.remove("A");
d.recompute();
d.assertItemNames(2, "A", "B");
FolderComputation<FreeStyleProject> computation = d.getComputation();
assertEquals(Result.FAILURE, computation.getResult());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
computation.writeWholeLogTo(baos);
String log = baos.toString();
assertTrue(log, log.contains("not adding Z"));
assertFalse(log, log.contains(SampleComputedFolder.class.getName()));
}

@Issue("JENKINS-25240")
@Test
public void runningBuild() throws Exception {
Expand Down Expand Up @@ -127,6 +149,9 @@ protected void computeChildren(ChildObserver<FreeStyleProject> observer, TaskLis
round++;
listener.getLogger().println("=== Round #" + round + " ===");
for (String kid : kids) {
if (kid.equals("Z")) {
throw new AbortException("not adding Z");
}
listener.getLogger().println("considering " + kid);
FreeStyleProject p = observer.shouldUpdate(kid);
if (p == null) {
Expand Down

0 comments on commit 585f91a

Please sign in to comment.