Skip to content

Commit

Permalink
Control errand execution
Browse files Browse the repository at this point in the history
Instead of sleeping use file based control

Signed-off-by: Shatarupa Nandi <snandi@pivotal.io>
  • Loading branch information
mariash authored and Shatarupa Nandi committed Aug 21, 2015
1 parent fa5a456 commit 1363e26
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 6 deletions.
4 changes: 2 additions & 2 deletions spec/assets/test_release_template/jobs/errand1/spec
Expand Up @@ -32,9 +32,9 @@ properties:
description: 'Exit code to return from the errand script'
default: 0

errand1.sleep_duration_in_seconds:
errand1.blocking_errand:
description: 'Number of seconds errand script is going to sleep'
default: 0
default: false

errand1.logs.stdout:
description: 'Output to place into sys/log/errand1/stdout.log'
Expand Down
8 changes: 7 additions & 1 deletion spec/assets/test_release_template/jobs/errand1/templates/run
Expand Up @@ -15,7 +15,13 @@ echo -n "<%= properties.errand1.logs.stdout %>" > sys/log/errand1/stdout.log
echo -n "<%= properties.errand1.logs.custom %>" > sys/log/custom.log

# Delay
sleep <%= properties.errand1.sleep_duration_in_seconds %>
<% if p('errand1.blocking_errand') %>
until [ -a "jobs/errand1/unblock_errand" ]; do
sleep 0.5
done
<% end %>

sleep

# Exit code
exit <%= properties.errand1.exit_code %>
2 changes: 1 addition & 1 deletion spec/integration/errand/run_errand_failure_spec.rb
Expand Up @@ -59,7 +59,7 @@
manifest_hash = Bosh::Spec::Deployments.manifest_with_errand

# Sleep so we have time to cancel it
manifest_hash['jobs'].last['properties']['errand1']['sleep_duration_in_seconds'] = 5000
manifest_hash['jobs'].last['properties']['errand1']['blocking_errand'] = true

manifest_hash
end
Expand Down
13 changes: 11 additions & 2 deletions spec/integration/errand/run_errand_success_spec.rb
Expand Up @@ -9,7 +9,7 @@
manifest_hash = Bosh::Spec::Deployments.manifest_with_errand
manifest_hash['properties'] = {
'errand1' => {
'sleep_duration_in_seconds' => 60,
'blocking_errand' => true,
},
}
manifest_hash
Expand All @@ -18,9 +18,18 @@
it 'creates a deployment lock' do
deploy_from_scratch(manifest_hash: manifest_hash)

bosh_runner.run('--no-track run errand fake-errand-name')
output = bosh_runner.run('--no-track run errand fake-errand-name')
task_id = Bosh::Spec::OutputParser.new(output).task_id('running')
director.wait_for_first_available_vm

output = bosh_runner.run_until_succeeds('locks')
expect(output).to match(/\s*\|\s*deployment\s*\|\s*errand\s*\|/)

errand_vm = director.vms.find { |vm| vm.job_name_index == 'fake-errand-name/0' }
expect(errand_vm).to_not be_nil

errand_vm.unblock_errand('errand1')
bosh_runner.run("task #{task_id}")
end
end

Expand Down
12 changes: 12 additions & 0 deletions spec/support/vm.rb
Expand Up @@ -82,6 +82,18 @@ def package_path(package_name)
File.join(@agent_base_dir, 'packages', package_name)
end

def unblock_errand(job_name)
job_dir_path = job_path(job_name)
@logger.debug("Unblocking package at #{job_dir_path}")

raise('Failed to get errand dir') unless File.exists?(job_dir_path)
FileUtils.touch(File.join(job_dir_path, 'unblock_errand'))
end

def job_path(job_name)
File.join(@agent_base_dir, 'jobs', job_name)
end

def kill_agent
@logger.info("Killing agent #{@cid}")
Process.kill('INT', @cid.to_i)
Expand Down

0 comments on commit 1363e26

Please sign in to comment.