From d741f23d33f975988591ca72b76d3870212dff06 Mon Sep 17 00:00:00 2001 From: kohsuke Date: Sat, 14 Feb 2009 17:37:05 +0000 Subject: [PATCH] - allowing InterruptedException in more places. - hooking up FileSystemProvisioner git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@15345 71c3de6d-444a-0410-be80-ed276b4c234a --- .../main/java/hudson/FileSystemProvisioner.java | 16 ++-------------- .../java/hudson/matrix/LinkedLogRotator.java | 2 +- core/src/main/java/hudson/maven/MavenModule.java | 2 +- .../main/java/hudson/maven/MavenModuleSet.java | 2 +- .../main/java/hudson/model/AbstractBuild.java | 2 ++ .../src/main/java/hudson/model/AbstractItem.java | 13 +++++++++---- .../main/java/hudson/model/AbstractProject.java | 5 ++++- core/src/main/java/hudson/model/Job.java | 4 ++-- core/src/main/java/hudson/model/Node.java | 6 ++++++ core/src/main/java/hudson/model/Run.java | 5 +++-- core/src/main/java/hudson/scm/SCM.java | 2 +- core/src/main/java/hudson/tasks/LogRotator.java | 2 +- 12 files changed, 33 insertions(+), 28 deletions(-) diff --git a/core/src/main/java/hudson/FileSystemProvisioner.java b/core/src/main/java/hudson/FileSystemProvisioner.java index 364ba4ecf0..f2b773ed9a 100644 --- a/core/src/main/java/hudson/FileSystemProvisioner.java +++ b/core/src/main/java/hudson/FileSystemProvisioner.java @@ -30,7 +30,6 @@ import hudson.model.Computer; import hudson.model.Describable; import hudson.model.Job; import hudson.model.TaskListener; -import hudson.model.Node; import hudson.model.listeners.RunListener; import hudson.util.DescriptorList; import hudson.scm.SCM; @@ -140,7 +139,7 @@ public abstract class FileSystemProvisioner implements ExtensionPoint, Describab * When a project is deleted, this method is called to undo the effect of * {@link #prepareWorkspace(AbstractBuild, FilePath, TaskListener)}. */ - public abstract void discardWorkspace(AbstractProject project, TaskListener listener) throws IOException, InterruptedException; + public abstract void discardWorkspace(AbstractProject project) throws IOException, InterruptedException; // public abstract void moveWorkspace(AbstractProject project, File oldWorkspace, File newWorkspace) throws IOException; @@ -167,15 +166,6 @@ public abstract class FileSystemProvisioner implements ExtensionPoint, Describab public abstract FileSystemProvisionerDescriptor getDescriptor(); - /** - * TODO: eventually move this to {@link Node} since it needs to be configurable - * per node, but as of now kept here to avoid interfering with the production code. - */ - public static FileSystemProvisioner get(Node node) { - return DEFAULT; - } - - /** * A list of available file system provider types. */ @@ -194,11 +184,9 @@ public abstract class FileSystemProvisioner implements ExtensionPoint, Describab private Default() {} public void prepareWorkspace(AbstractBuild build, FilePath ws, TaskListener listener) throws IOException, InterruptedException { - ws.mkdirs(); } - public void discardWorkspace(AbstractProject project, TaskListener listener) throws IOException, InterruptedException { - project.getWorkspace().deleteRecursive(); + public void discardWorkspace(AbstractProject project) throws IOException, InterruptedException { } /** diff --git a/core/src/main/java/hudson/matrix/LinkedLogRotator.java b/core/src/main/java/hudson/matrix/LinkedLogRotator.java index f91c7d6668..8aa421e9cb 100644 --- a/core/src/main/java/hudson/matrix/LinkedLogRotator.java +++ b/core/src/main/java/hudson/matrix/LinkedLogRotator.java @@ -45,7 +45,7 @@ final class LinkedLogRotator extends LogRotator { } @Override - public void perform(Job _job) throws IOException { + public void perform(Job _job) throws IOException, InterruptedException { // copy it to the array because we'll be deleting builds as we go. MatrixConfiguration job = (MatrixConfiguration) _job; diff --git a/core/src/main/java/hudson/maven/MavenModule.java b/core/src/main/java/hudson/maven/MavenModule.java index 030690cd03..f88cc348f5 100644 --- a/core/src/main/java/hudson/maven/MavenModule.java +++ b/core/src/main/java/hudson/maven/MavenModule.java @@ -421,7 +421,7 @@ public final class MavenModule extends AbstractMavenProject,R extends Abs if(node instanceof Slave) listener.getLogger().println(Messages.AbstractBuild_BuildingRemotely(node.getNodeName())); + node.getFileSystemProvisioner().prepareWorkspace(AbstractBuild.this,project.getWorkspace(),listener); + if(checkout(listener)) return Result.FAILURE; diff --git a/core/src/main/java/hudson/model/AbstractItem.java b/core/src/main/java/hudson/model/AbstractItem.java index e94ab4669f..fe31ca5b8c 100644 --- a/core/src/main/java/hudson/model/AbstractItem.java +++ b/core/src/main/java/hudson/model/AbstractItem.java @@ -255,7 +255,7 @@ public abstract class AbstractItem extends Actionable implements Item, HttpDelet /** * Deletes this item. */ - public void doDoDelete( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException { + public void doDoDelete( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException, InterruptedException { checkPermission(DELETE); if(!"POST".equals(req.getMethod())) { rsp.setStatus(SC_BAD_REQUEST); @@ -267,13 +267,18 @@ public abstract class AbstractItem extends Actionable implements Item, HttpDelet } public void delete( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException { - doDoDelete(req,rsp); + try { + doDoDelete(req,rsp); + } catch (InterruptedException e) { + // TODO: allow this in Stapler + throw new ServletException(e); + } } /** * Deletes this item. */ - public synchronized void delete() throws IOException { + public synchronized void delete() throws IOException, InterruptedException { performDelete(); if(this instanceof TopLevelItem) @@ -285,7 +290,7 @@ public abstract class AbstractItem extends Actionable implements Item, HttpDelet /** * Does the real job of deleting the item. */ - protected void performDelete() throws IOException { + protected void performDelete() throws IOException, InterruptedException { Util.deleteRecursive(getRootDir()); } diff --git a/core/src/main/java/hudson/model/AbstractProject.java b/core/src/main/java/hudson/model/AbstractProject.java index cf71b0b44e..29c359be24 100644 --- a/core/src/main/java/hudson/model/AbstractProject.java +++ b/core/src/main/java/hudson/model/AbstractProject.java @@ -198,12 +198,15 @@ public abstract class AbstractProject

,R extends A updateTransientActions(); } - protected void performDelete() throws IOException { + protected void performDelete() throws IOException, InterruptedException { // prevent a new build while a delete operation is in progress makeDisabled(true); FilePath ws = getWorkspace(); if(ws!=null) getScm().processWorkspaceBeforeDeletion(this, ws,getLastBuiltOn()); + + getLastBuiltOn().getFileSystemProvisioner().discardWorkspace(this); + super.performDelete(); } diff --git a/core/src/main/java/hudson/model/Job.java b/core/src/main/java/hudson/model/Job.java index 1816726ff9..8801a782af 100644 --- a/core/src/main/java/hudson/model/Job.java +++ b/core/src/main/java/hudson/model/Job.java @@ -173,7 +173,7 @@ public abstract class Job, RunT extends Run, RunT extends Run,RunT extends Run,RunT extends Run, ExtensionPoint { * * @since 1.246 */ - public boolean processWorkspaceBeforeDeletion(AbstractProject project, FilePath workspace, Node node) { + public boolean processWorkspaceBeforeDeletion(AbstractProject project, FilePath workspace, Node node) throws IOException, InterruptedException { return true; } diff --git a/core/src/main/java/hudson/tasks/LogRotator.java b/core/src/main/java/hudson/tasks/LogRotator.java index b7797a6297..d6286348ec 100644 --- a/core/src/main/java/hudson/tasks/LogRotator.java +++ b/core/src/main/java/hudson/tasks/LogRotator.java @@ -75,7 +75,7 @@ public class LogRotator implements Describable { this.numToKeep = numToKeep; } - public void perform(Job job) throws IOException { + public void perform(Job job) throws IOException, InterruptedException { // keep the last successful build regardless of the status Run lsb = job.getLastSuccessfulBuild();