X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=dsl%2Fkernel-lttng-modules.seed.groovy;h=723b5e042765d1a6c2aea00f1c5d56f464db61a7;hb=530fc31519c09c0c610d7248ecdd458dc4f8b093;hp=86bf76d4e41fe37c78979ea725ad218d0b5e6c61;hpb=5254a1ac01da7ba4cc04cd156f14fe560b9310fb;p=lttng-ci.git diff --git a/dsl/kernel-lttng-modules.seed.groovy b/dsl/kernel-lttng-modules.seed.groovy index 86bf76d..723b5e0 100644 --- a/dsl/kernel-lttng-modules.seed.groovy +++ b/dsl/kernel-lttng-modules.seed.groovy @@ -258,14 +258,16 @@ import java.util.Random Random random = new Random() def jobs = hudson.model.Hudson.instance.items def fail = false -def jobStartWith = "dsl-kernel-" +def jobStartWithKernel = "KERNELPREFIX" +def jobStartWithModule = "MODULEPREFIX" def toBuild = [] def counter = 0 +def limitQueue = 4 def anotherBuild jobs.each { job -> def jobName = job.getName() - if (jobName.startsWith(jobStartWith)) { + if (jobName.startsWith(jobStartWithKernel)) { counter = counter + 1 def lastBuild = job.getLastBuild() if (lastBuild == null || lastBuild.result != Result.SUCCESS) { @@ -289,17 +291,25 @@ hudson.model.Hudson.instance.nodes.each { node -> println "Nb of live kernel enabled build node "+ kernelEnabledNode def ongoingBuild = [] -def q = jenkins.model.Jenkins.getInstance().getQueue() - +def q = jenkins.model.Jenkins.getInstance().getQueue() while (toBuild.size() != 0) { - if(ongoingBuild.size() <= (kernelEnabledNode.intdiv(2))) { + // Throttle the build with both the number of current parent task and queued + // task.Look for both kernel and downstream module from previous kernel. + def queuedTask = q.getItems().findAll { + it.task.name.startsWith(jobStartWithKernel) || + it.task.name.startsWith(jobStartWithModule) + } + + if ((ongoingBuild.size() <= kernelEnabledNode.intdiv(2)) && (queuedTask.size() < limitQueue)) { def job = toBuild.pop() ongoingBuild.push(job.scheduleBuild2(0)) - println "\\t trigering" + HyperlinkNote.encodeTo('/' + job.url, job.fullDisplayName) - println "Debug: currenlty queued task" + q.getItems().size() + println "\\t trigering " + HyperlinkNote.encodeTo('/' + job.url, job.fullDisplayName) } else { - Thread.sleep(random.nextInt(120000)) + println "Currently " + ongoingBuild.size() + " build currently on execution. Limit: " + kernelEnabledNode.intdiv(2) + println "Currently " + queuedTask.findAll{it.task.name.startsWith(jobStartWithModule)}.size() + " module jobs are queued. Limit: " + limitQueue + println "Currently " + queuedTask.findAll{it.task.name.startsWith(jobStartWithKernel)}.size() + " kernel jobs are queued. Limit: " + limitQueue + Thread.sleep(random.nextInt(60000)) ongoingBuild.removeAll{ it.isCancelled() || it.isDone() } } } @@ -356,6 +366,9 @@ if (fail){ throw new AbortException("Some job failed") } """ + + dslTriggerKernel = dslTriggerKernel.replaceAll("KERNELPREFIX", kernelPrefix) + dslTriggerKernel = dslTriggerKernel.replaceAll("MODULEPREFIX", modulesPrefix) if (isJenkinsInstance) { freeStyleJob("dsl-trigger-kernel") { steps { @@ -367,9 +380,10 @@ if (fail){ } modulesBranches.each { branch -> + dslTriggerModule = dslTriggerModule.replaceAll("JOBPREFIX",modulesPrefix + separator + branch + separator) freeStyleJob("dsl-trigger-module-${branch}") { steps { - systemGroovyCommand(dslTriggerModule.replaceAll("JOBPREFIX",modulesPrefix + separator + branch + separator)) + systemGroovyCommand(dslTriggerModule) } triggers { scm('@daily')