By running this patch in Docker, I successfully reproduced the race condition and saw the changes complete the job. Here are the logs from two simultaneous crunch-dispatch processes:
dispatch: ["git", "--git-dir=/var/lib/arvados/internal.git", "tag", "bcsdk-8i9sb-p7lp5shen37qrib", "eb5da02dd7bb5552bd0594e46d081567d485ad5e"]
dispatch: sudo -E -u crunch PATH=/usr/local/rvm/gems/ruby-2.1.5/bin:/usr/local/rvm/gems/ruby-2.1.5@global/bin:/usr/local/rvm/rubies/ruby-2.1.5/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/src/arvados/services/crunch PERLLIB=/usr/src/arvados/sdk/perl/lib PYTHONPATH= RUBYLIB=/usr/local/rvm/gems/ruby-2.1.5/gems/bundler-1.9.2/lib GEM_PATH=/usr/local/rvm/gems/ruby-2.1.5:/usr/local/rvm/gems/ruby-2.1.5@global salloc --chdir=/ --immediate --exclusive --no-kill --job-name=bcsdk-8i9sb-p7lp5shen37qrib --nodelist=compute0 /usr/src/arvados/services/crunch/crunch-job --job-api-token 26mw2gzbcaio1boim5pzb7qn6s3um2r6zuyvyo6jviqbrkhh2v --job bcsdk-8i9sb-p7lp5shen37qrib --git-dir /var/lib/arvados/internal.git
dispatch: job bcsdk-8i9sb-p7lp5shen37qrib
dispatch: child 30044 start 2015-04-06_14:04:45
dispatch: update compute0 state to {:state=>"alloc", :job=>"bcsdk-8i9sb-p7lp5shen37qrib"}
dispatch: ["git", "--git-dir=/var/lib/arvados/internal.git", "tag", "bcsdk-8i9sb-p7lp5shen37qrib", "eb5da02dd7bb5552bd0594e46d081567d485ad5e"]
bcsdk-8i9sb-p7lp5shen37qrib ! salloc: Granted job allocation 29
dispatch: sudo -E -u crunch PATH=/usr/local/rvm/gems/ruby-2.1.5/bin:/usr/local/rvm/gems/ruby-2.1.5@global/bin:/usr/local/rvm/rubies/ruby-2.1.5/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/src/arvados/services/crunch PERLLIB=/usr/src/arvados/sdk/perl/lib PYTHONPATH= RUBYLIB=/usr/local/rvm/gems/ruby-2.1.5/gems/bundler-1.9.2/lib GEM_PATH=/usr/local/rvm/gems/ruby-2.1.5:/usr/local/rvm/gems/ruby-2.1.5@global salloc --chdir=/ --immediate --exclusive --no-kill --job-name=bcsdk-8i9sb-p7lp5shen37qrib --nodelist=compute0 /usr/src/arvados/services/crunch/crunch-job --job-api-token p7945utn6byf0ioqefrivx55r8ailzc68hsifskhisaq43ssp --job bcsdk-8i9sb-p7lp5shen37qrib --git-dir /var/lib/arvados/internal.git
dispatch: job bcsdk-8i9sb-p7lp5shen37qrib
dispatch: child 30062 start 2015-04-06_14:04:45
dispatch: update compute0 state to {:state=>"alloc", :job=>"bcsdk-8i9sb-p7lp5shen37qrib"}
dispatch: child 30062 exit
dispatch: job bcsdk-8i9sb-p7lp5shen37qrib end
bcsdk-8i9sb-p7lp5shen37qrib ! salloc: error: Unable to allocate resources: Requested nodes are busy
bcsdk-8i9sb-p7lp5shen37qrib 30053 running from /usr/src/arvados/sdk/cli/bin/crunch-job with arvados-cli Gem version(s) 0.1.20150323181012, 0.1.20150205181653
bcsdk-8i9sb-p7lp5shen37qrib 30053 check slurm allocation
bcsdk-8i9sb-p7lp5shen37qrib 30053 node compute0 - 1 slots
bcsdk-8i9sb-p7lp5shen37qrib 30053 start
bcsdk-8i9sb-p7lp5shen37qrib 30053 Clean work dirs
bcsdk-8i9sb-p7lp5shen37qrib ! starting: ['srun','--nodelist=compute0','-D','/tmp','bash','-ec','mount -t fuse,fuse.keep | awk \'($3 ~ /\\ykeep\\y/){print $3}\' | xargs -r -n 1 fusermount -u -z; sleep 1; rm -rf $JOB_WORK $CRUNCH_INSTALL $CRUNCH_TMP/task $CRUNCH_TMP/src* $CRUNCH_TMP/*.cid']
bcsdk-8i9sb-p7lp5shen37qrib 30053 Cleanup command exited 0
bcsdk-8i9sb-p7lp5shen37qrib ! starting: ['srun','--nodelist=compute0','/bin/sh','-ec',' if ! /usr/bin/docker.io images -q --no-trunc --all | grep -qxF ae2af9352ae54e27690ab8645e85e501f7ba78a66b20bd7abc2ccbcced74db06; then arv-get 5814aaff04a7177493c207d16689211f\\+966\\/ae2af9352ae54e27690ab8645e85e501f7ba78a66b20bd7abc2ccbcced74db06\\.tar | /usr/bin/docker.io load fi ']
bcsdk-8i9sb-p7lp5shen37qrib 30053 Looking for version eb5da02dd7bb5552bd0594e46d081567d485ad5e from repository brett/brett
bcsdk-8i9sb-p7lp5shen37qrib 30053 Using local repository '/var/lib/arvados/internal.git'
bcsdk-8i9sb-p7lp5shen37qrib 30053 Version eb5da02dd7bb5552bd0594e46d081567d485ad5e is commit eb5da02dd7bb5552bd0594e46d081567d485ad5e
bcsdk-8i9sb-p7lp5shen37qrib 30053 Run install script on all workers
starting: ['srun','--nodelist=compute0','-D','/tmp','--job-name=bcsdk-8i9sb-p7lp5shen37qrib','sh','-c','mkdir -p /tmp/crunch-job/opt && cd /tmp/crunch-job && perl -']
bcsdk-8i9sb-p7lp5shen37qrib 30053 Install script exited 0
bcsdk-8i9sb-p7lp5shen37qrib 30053 script 4027test.py
bcsdk-8i9sb-p7lp5shen37qrib 30053 script_version eb5da02dd7bb5552bd0594e46d081567d485ad5e
bcsdk-8i9sb-p7lp5shen37qrib 30053 script_parameters {}
bcsdk-8i9sb-p7lp5shen37qrib 30053 runtime_constraints {"max_tasks_per_node":0,"docker_image":"arvados/jobs"}
bcsdk-8i9sb-p7lp5shen37qrib 30053 start level 0
bcsdk-8i9sb-p7lp5shen37qrib 30053 status: 0 done, 0 running, 1 todo
bcsdk-8i9sb-p7lp5shen37qrib 30053 0 job_task bcsdk-ot0gb-oqafub6fvjy29pz
bcsdk-8i9sb-p7lp5shen37qrib 30053 0 child 30502 started on compute0.1
[elide normal job log]
bcsdk-8i9sb-p7lp5shen37qrib 30053 1 child 30556 on compute0.1 exit 0 success=true
bcsdk-8i9sb-p7lp5shen37qrib 30053 1 success in 2 seconds
bcsdk-8i9sb-p7lp5shen37qrib 30053 1 task output (87 bytes): [locator]
bcsdk-8i9sb-p7lp5shen37qrib 30053 wait for last 0 children to finish
bcsdk-8i9sb-p7lp5shen37qrib 30053 status: 2 done, 0 running, 0 todo
bcsdk-8i9sb-p7lp5shen37qrib 30053 release job allocation
bcsdk-8i9sb-p7lp5shen37qrib ! salloc: Job allocation 29 has been revoked.
bcsdk-8i9sb-p7lp5shen37qrib 30053 Freeze not implemented
bcsdk-8i9sb-p7lp5shen37qrib 30053 collate
dispatch: update compute0 state to {:state=>"idle", :job=>nil}
bcsdk-8i9sb-p7lp5shen37qrib 30053 collated output manifest text to send to API server is 224 bytes with access tokens
bcsdk-8i9sb-p7lp5shen37qrib 30053 job output [locator]
dispatch: update compute0 state to {:state=>"idle", :job=>nil}
bcsdk-8i9sb-p7lp5shen37qrib 30053 finish
Collection saved as 'bcsdk-8i9sb-p7lp5shen37qrib.log.txt'
bcsdk-8i9sb-p7lp5shen37qrib 30053 log manifest is [locator]
dispatch: child 30044 exit
dispatch: job bcsdk-8i9sb-p7lp5shen37qrib end
After this, the job is marked successful in the API server.