From 3778279edf89905a51442044b6f0a5d478e3d224 Mon Sep 17 00:00:00 2001 From: kohsuke Date: Wed, 24 Jun 2009 16:06:59 +0000 Subject: [PATCH] fixed and improved the retry logic git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@19184 71c3de6d-444a-0410-be80-ed276b4c234a --- .../main/java/hudson/model/AbstractBuild.java | 61 +++++++++---------- 1 file changed, 28 insertions(+), 33 deletions(-) diff --git a/core/src/main/java/hudson/model/AbstractBuild.java b/core/src/main/java/hudson/model/AbstractBuild.java index 251dc4f802..3cf1e0e36d 100644 --- a/core/src/main/java/hudson/model/AbstractBuild.java +++ b/core/src/main/java/hudson/model/AbstractBuild.java @@ -262,26 +262,8 @@ public abstract class AbstractBuild

,R extends Abs listener.getLogger().println(node instanceof Hudson ? Messages.AbstractBuild_BuildingOnMaster() : Messages.AbstractBuild_BuildingRemotely(builtOn)); node.getFileSystemProvisioner().prepareWorkspace(AbstractBuild.this,project.getWorkspace(),listener); - int retryCount = getProject().getScmCheckoutRetryCount(); - listener.error("Retry Count.........."+retryCount); - boolean checkoutStatus = true; - while (retryCount > 0) { - retryCount--; - listener.error("retrying.........."+retryCount); - checkoutStatus = checkout(listener); - if(checkoutStatus) - continue; - else - break; - - } - - - if(checkoutStatus) - return Result.FAILURE; - - - + + checkout(listener); if(!preBuild(listener,project.getProperties())) return Result.FAILURE; @@ -322,23 +304,36 @@ public abstract class AbstractBuild

,R extends Abs Util.createSymlink(getProject().getBuildDir(),"builds/"+getId(),"../"+name,listener); } - private boolean checkout(BuildListener listener) throws Exception { - // for historical reasons, null in the scm field means CVS, so we need to explicitly set this to something - // in case check out fails and leaves a broken changelog.xml behind. - // see http://www.nabble.com/CVSChangeLogSet.parse-yields-SAXParseExceptions-when-parsing-bad-*AccuRev*-changelog.xml-files-td22213663.html - AbstractBuild.this.scm = new NullChangeLogParser(); + private void checkout(BuildListener listener) throws Exception { + for (int retryCount=project.getScmCheckoutRetryCount(); retryCount>=0; retryCount--) { + // for historical reasons, null in the scm field means CVS, so we need to explicitly set this to something + // in case check out fails and leaves a broken changelog.xml behind. + // see http://www.nabble.com/CVSChangeLogSet.parse-yields-SAXParseExceptions-when-parsing-bad-*AccuRev*-changelog.xml-files-td22213663.html + AbstractBuild.this.scm = new NullChangeLogParser(); + + if(!project.checkout(AbstractBuild.this,launcher,listener,new File(getRootDir(),"changelog.xml"))) { + // check out failed. + if(retryCount>0) { + listener.getLogger().println("Retrying after 10 seconds"); + Thread.sleep(10000); + continue; + } else { + throw new RunnerAbortedException(); + } + } - if(!project.checkout(AbstractBuild.this,launcher,listener,new File(getRootDir(),"changelog.xml"))) - return true; + SCM scm = project.getScm(); - SCM scm = project.getScm(); + AbstractBuild.this.scm = scm.createChangeLogParser(); + AbstractBuild.this.changeSet = AbstractBuild.this.calcChangeSet(); - AbstractBuild.this.scm = scm.createChangeLogParser(); - AbstractBuild.this.changeSet = AbstractBuild.this.calcChangeSet(); + for (SCMListener l : Hudson.getInstance().getSCMListeners()) + l.onChangeLogParsed(AbstractBuild.this,listener,changeSet); + return; + } - for (SCMListener l : Hudson.getInstance().getSCMListeners()) - l.onChangeLogParsed(AbstractBuild.this,listener,changeSet); - return false; + // impossible + throw new AssertionError(); } /** -- GitLab