-
Bug
-
Resolution: Unresolved
-
Blocker
-
None
Using build step to trigger other jobs and wait could cause the dead lock.
Below presudo code of JobA:
pipeline { stages { stage('test') { build job: "JobB", wait: true } } }
Here is the the example of use case problems:
- Let assume we have 2 executors
- JobA buildnumber#1 running (holding 1st executor) try trigger JobB.#1
- JobA buildnumber#2 also already running (holding 2nd executor) try trigger JobB.#2
The problem: we have a dead block. JobB.1 and JobB.2 are both wait for JobA.1 or JobA.2 finished for obtain executor(s). But JobA.1 and JobA.2 are waiting for JobB.1 and JobB.2 to finished.
Suggested solution: When a Job waiting for other jobs, it would be better to temporary release the executor, and obtain it back when it wait condition satisfy.
We are often in this situation. It's very annoying . It cannot be a solution to increase the number of executors beyond the recommended level to avoid the problem.