jenkinsci / ghprb-plugin

github pull requests builder plugin for Jenkins
https://plugins.jenkins.io/ghprb/
MIT License
507 stars 612 forks source link

Worker nodes aren't started when pipeline requests to run parallel parts on same node #824

Open tm-slavik57 opened 3 years ago

tm-slavik57 commented 3 years ago

Version report

Jenkins and plugins versions report:

Jenkins: 2.319
OS: Linux - 4.14.198-152.320.amzn2.x86_64
---
ace-editor:1.1
active-directory:2.25
analysis-model-api:10.6.0
ansicolor:1.0.0
ant:1.12
antisamy-markup-formatter:2.4
apache-httpcomponents-client-4-api:4.5.13-1.0
artifact-manager-s3:1.16
artifactory:3.13.2
authentication-tokens:1.4
aws-credentials:1.32
aws-global-configuration:1.7
aws-java-sdk:1.12.101-300.vc09c7be9cb57
aws-java-sdk-cloudformation:1.12.101-300.vc09c7be9cb57
aws-java-sdk-codebuild:1.12.101-300.vc09c7be9cb57
aws-java-sdk-ec2:1.12.101-300.vc09c7be9cb57
aws-java-sdk-ecr:1.12.101-300.vc09c7be9cb57
aws-java-sdk-ecs:1.12.101-300.vc09c7be9cb57
aws-java-sdk-elasticbeanstalk:1.12.101-300.vc09c7be9cb57
aws-java-sdk-iam:1.12.101-300.vc09c7be9cb57
aws-java-sdk-logs:1.12.101-300.vc09c7be9cb57
aws-java-sdk-minimal:1.12.101-300.vc09c7be9cb57
aws-java-sdk-ssm:1.12.101-300.vc09c7be9cb57
blueocean:1.24.6
blueocean-autofavorite:1.2.4
blueocean-bitbucket-pipeline:1.24.6
blueocean-commons:1.25.1
blueocean-config:1.25.1
blueocean-core-js:1.25.1
blueocean-dashboard:1.25.1
blueocean-display-url:2.4.1
blueocean-events:1.24.6
blueocean-git-pipeline:1.24.6
blueocean-github-pipeline:1.24.6
blueocean-i18n:1.25.1
blueocean-jwt:1.25.1
blueocean-personalization:1.25.1
blueocean-pipeline-api-impl:1.24.6
blueocean-pipeline-editor:1.24.6
blueocean-pipeline-scm-api:1.25.1
blueocean-rest:1.25.1
blueocean-rest-impl:1.25.1
blueocean-web:1.25.1
bootstrap4-api:4.6.0-3
bootstrap5-api:5.1.3-3
bouncycastle-api:2.25
branch-api:2.7.0
build-monitor-plugin:1.13+build.202110011223
build-name-setter:2.2.0
build-timeout:1.20
build-token-root:1.7
caffeine-api:2.9.2-29.v717aac953ff3
checks-api:1.7.2
cloudbees-bitbucket-branch-source:2.9.11
cloudbees-folder:6.16
command-launcher:1.6
conditional-buildstep:1.4.1
config-file-provider:3.8.1
copyartifact:1.46.2
credentials:2.6.2
credentials-binding:1.27
data-tables-api:1.11.3-4
display-url-api:2.3.5
docker-commons:1.17
docker-workflow:1.26
dtkit-api:3.0.0
durable-task:493.v195aefbb0ff2
ec2:1.66
echarts-api:5.2.2-1
email-ext:2.84
external-monitor-job:1.7
favorite:2.3.3
file-parameters:146.v7d35212829d0
font-awesome-api:5.15.4-3
forensics-api:1.6.0
ghprb:1.42.2
git:4.10.0
git-client:3.10.0
git-server:1.10
github:1.34.1
github-api:1.133
github-branch-source:2.11.3
gradle:1.37.1
greenballs:1.15.1
handlebars:3.0.8
handy-uri-templates-2-api:2.1.8-1.0
htmlpublisher:1.28
ivy:2.1
jackson2-api:2.13.0-230.v59243c64b0a5
javadoc:1.6
jaxb:2.3.0.1
jdk-tool:1.5
jenkins-design-language:1.25.1
jjwt-api:0.11.2-9.c8b45b8bb173
jquery:1.12.4-1
jquery3-api:3.6.0-2
jsch:0.1.55.2
junit:1.53
ldap:2.7
lockable-resources:2.12
mailer:1.34
matrix-auth:2.6.8
matrix-project:1.19
maven-plugin:3.15.1
momentjs:1.1.1
node-iterator-api:1.5.1
nodelabelparameter:1.9.2
okhttp-api:4.9.2-20211102
pam-auth:1.6.1
parameterized-trigger:2.41
parasoft-findings:10.5.0
pipeline-build-step:2.15
pipeline-github-lib:1.0
pipeline-graph-analysis:1.12
pipeline-graph-view:46.vedbf23da719f
pipeline-input-step:2.12
pipeline-milestone-step:1.3.2
pipeline-model-api:1.9.3
pipeline-model-definition:1.9.3
pipeline-model-extensions:1.9.3
pipeline-rest-api:2.19
pipeline-stage-step:2.5
pipeline-stage-tags-metadata:1.9.3
pipeline-stage-view:2.19
pipeline-utility-steps:2.10.0
plain-credentials:1.7
plugin-util-api:2.5.1
popper-api:1.16.1-2
popper2-api:2.10.2-1
pubsub-light:1.16
resource-disposer:0.16
role-strategy:3.2.0
run-condition:1.5
scm-api:2.6.5
script-security:1.78
slack:2.48
snakeyaml-api:1.29.1
sse-gateway:1.24
ssh-agent:1.23
ssh-credentials:1.19
ssh-slaves:1.33.0
ssh-steps:2.0.0
sshd:3.1.0
structs:1.24
test-results-analyzer:0.3.5
timestamper:1.13
token-macro:267.vcdaea6462991
trilead-api:1.0.13
variant:1.4
warnings-ng:9.6.0
workflow-aggregator:2.6
workflow-api:2.47
workflow-basic-steps:2.24
workflow-cps:2633.v6baeedc13805
workflow-cps-global-lib:548.v9085a486966a
workflow-durable-task-step:1101.vf832bc1ac745
workflow-job:2.42
workflow-multibranch:2.26
workflow-scm-step:2.13
workflow-step-api:2.24
workflow-support:3.8
ws-cleanup:0.39
xunit:3.0.4
Linux

Reproduction steps

We have 5 nodes with the id of some_node, each node has 3 slots.

We have the following Jenkins pipeline (simplified):

ansiColor('xterm') {
  def tests = getTestsToRun()

  parallel tests
}

def getTestsToRun() {
  node('some_node') { 
    def tests = [:]
    for (int i = 0; i < 50; i++) {
      tests["test${i}"] = createTest("test-${i}")
    }
    return tests
  }
}

def createTest(String testString) {
  return {
    node('some_node') {
      echo "Running test ${testString} - before sleep"
      sleep(60)
      echo "Running test ${testString}) - after sleep"
    }
  }
}

Results

When we run the pipeline, the Build Queue contains all the part of test-job

Expected result: All the some_node worker nodes will be started to handle the long queue of part jobs

Actual result: Only 1 worker node is brought up to handle the test-job while other workers continue to be offline