Skip to content

Commit 70633ac

Browse files
committed
Add dedicated dynamic_disks workers
* Change dynamic disks jobs to be in dynamic_disks queue * Add dynamic_disks_workers property to director * When dynamic_disks_workers is greater than 0, start separate dynamic_disks_worker process * Update drain to drain dynamic_disks workers
1 parent d9ea1e3 commit 70633ac

File tree

16 files changed

+128
-38
lines changed

16 files changed

+128
-38
lines changed

jobs/director/monit

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,17 @@ check process director
77
<% (1..(p('director.workers'))).each do |index| %>
88
check process worker_<%= index %>
99
with pidfile /var/vcap/sys/run/director/worker_<%= index %>.pid
10-
start program "/var/vcap/jobs/director/bin/worker_ctl start <%= index %>"
11-
stop program "/var/vcap/jobs/director/bin/worker_ctl stop <%= index %>"
10+
start program "/var/vcap/jobs/director/bin/worker_ctl start worker_<%= index %>"
11+
stop program "/var/vcap/jobs/director/bin/worker_ctl stop worker_<%= index %>"
12+
group vcap
13+
depends on director
14+
<% end %>
15+
16+
<% (1..(p('director.dynamic_disks_workers'))).each do |index| %>
17+
check process dynamic_disks_worker_<%= index %>
18+
with pidfile /var/vcap/sys/run/director/dynamic_disks_worker_<%= index %>.pid
19+
start program "/var/vcap/jobs/director/bin/worker_ctl start dynamic_disks_<%= index %> dynamic_disks"
20+
stop program "/var/vcap/jobs/director/bin/worker_ctl stop dynamic_disks_<%= index %> dynamic_disks"
1221
group vcap
1322
depends on director
1423
<% end %>

jobs/director/spec

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ properties:
7575
director.workers:
7676
description: Number of director workers
7777
default: 3
78+
director.dynamic_disks_workers:
79+
description: Number of director workers dedicated for dynamic disks jobs
80+
default: 0
7881
director.enable_dedicated_status_worker:
7982
description: "Separate worker for 'bosh vms' and 'bosh ssh'"
8083
default: false

jobs/director/templates/drain

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ mkdir -p $LOG_DIR
1818
export BOSH_DIRECTOR_LOG_FILE=$LOG_DIR/drain.workers.stdout.log
1919

2020
stop_worker() {
21-
pidfile=/var/vcap/sys/run/director/worker_$1.pid
21+
pidfile=/var/vcap/sys/run/director/$1.pid
2222

2323
if [ -f "$pidfile" ] ; then
2424
pid="$( cat "$pidfile" )"
@@ -33,16 +33,25 @@ stop_dedicated_worker () { stop_worker "$@"; }
3333

3434
<% (1..p('director.workers')).each do |index| %>
3535
<% if index > dedicated_workers %>
36-
stop_worker <%= index %>
36+
stop_worker worker_<%= index %>
3737
<% end %>
3838
<% end %>
3939

40+
<% (1..p('director.dynamic_disks_workers')).each do |index| %>
41+
stop_worker dynamic_disks_worker_<%= index %>
42+
<% end %>
43+
4044
<% if dedicated_workers > 0 %>
4145
/var/vcap/packages/director/bin/bosh-director-drain-workers -c /var/vcap/jobs/director/config/director.yml --queue normal \
4246
2>>$LOG_DIR/drain.stderr.log
4347

48+
<% if p('director.dynamic_disks_workers') > 0 %>
49+
/var/vcap/packages/director/bin/bosh-director-drain-workers -c /var/vcap/jobs/director/config/director.yml --queue dynamic_disks \
50+
2>>$LOG_DIR/drain.stderr.log
51+
<% end %>
52+
4453
<% (1..dedicated_workers).each do |index| %>
45-
stop_dedicated_worker <%= index %>
54+
stop_dedicated_worker worker_<%= index %>
4655
<% end %>
4756
<% end %>
4857

jobs/director/templates/ps_utils.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ function kill_process {
2222
function list_child_processes {
2323
ps -eo pid,command |
2424
grep bosh-director-worker |
25-
grep -- "-i $1" |
25+
grep -- "-n $1" |
2626
awk '{print $1}' |
2727
grep -v ^$1$
2828
}

jobs/director/templates/worker_ctl.erb

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
#!/bin/bash
22

3-
INDEX=$2
3+
NAME=$2
44

55
RUN_DIR=/var/vcap/sys/run/director
66
LOG_DIR=/var/vcap/sys/log/director
7-
PIDFILE=$RUN_DIR/worker_$INDEX.pid
7+
PIDFILE=${RUN_DIR}/${NAME}.pid
88
RUNAS=vcap
99

1010
# Postgres
@@ -25,9 +25,9 @@ export LANG=en_US.UTF-8
2525

2626
export TMPDIR=/var/vcap/data/director/tmp
2727

28-
export QUEUE="normal,urgent"
28+
export QUEUE="${3:-normal,urgent}"
2929
<% if (p('director.enable_dedicated_status_worker')) && (p('director.workers') > 1) %>
30-
if [ $INDEX -eq 1 ]; then
30+
if [ "${NAME}" = "worker_1" ]; then
3131
export QUEUE="urgent"
3232
fi
3333
<% end %>
@@ -49,15 +49,15 @@ case $1 in
4949

5050
exec chpst -u $RUNAS:$RUNAS \
5151
/var/vcap/packages/director/bin/bosh-director-worker \
52-
-c /var/vcap/jobs/director/config/director.yml -i $INDEX \
53-
>>$LOG_DIR/worker_$INDEX.stdout.log \
54-
2>>$LOG_DIR/worker_$INDEX.stderr.log
52+
-c /var/vcap/jobs/director/config/director.yml -n $NAME \
53+
>>$LOG_DIR/${NAME}.stdout.log \
54+
2>>$LOG_DIR/${NAME}.stderr.log
5555
;;
5656

5757
stop)
5858
PID=$(head -1 $PIDFILE)
5959
kill_process $PID # prevent the parent from fork()ing new children
60-
for CHILD in $(list_child_processes $INDEX); do
60+
for CHILD in $(list_child_processes $NAME); do
6161
kill_process $CHILD
6262
done
6363
rm -f $PIDFILE

spec/director_templates_spec.rb

Lines changed: 58 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -271,25 +271,52 @@
271271
let(:rendered_template) { template.render(properties) }
272272

273273
let(:enable_dedicated_status_worker) { false }
274+
let(:dynamic_disks_workers) { 0 }
274275
let(:properties) do
275276
properties = default_properties.dup
276277
properties['director']['enable_dedicated_status_worker'] = enable_dedicated_status_worker
278+
properties['director']['dynamic_disks_workers'] = dynamic_disks_workers
277279
properties
278280
end
279281

280-
it 'renders' do
281-
expect(rendered_template).to match(/.+stop_worker 1.+stop_worker 2.+stop_worker 3/m)
282-
expect(rendered_template).to include('bosh-director-drain-workers')
282+
it 'renders to drain all jobs' do
283+
expect(rendered_template).to match(/.+stop_worker worker_1.+stop_worker worker_2.+stop_worker worker_3/m)
284+
expect(rendered_template).to include('bosh-director-drain-workers -c /var/vcap/jobs/director/config/director.yml')
285+
expect(rendered_template).to_not include('--queue normal')
286+
expect(rendered_template).to_not include('--queue dynamic_disks')
287+
end
288+
289+
context 'dynamic disks workers' do
290+
let(:dynamic_disks_workers) { 2 }
291+
292+
it 'renders to drain all jobs' do
293+
expect(rendered_template).to match(/.+stop_worker worker_2.+stop_worker worker_3.+.+stop_worker dynamic_disks_worker_1.+stop_worker dynamic_disks_worker_2/m)
294+
295+
expect(rendered_template).to include('bosh-director-drain-workers -c /var/vcap/jobs/director/config/director.yml')
296+
expect(rendered_template).to_not include('--queue normal')
297+
expect(rendered_template).to_not include('--queue dynamic_disks')
298+
end
283299
end
284300

285301
context 'dedicated status workers' do
286302
let(:enable_dedicated_status_worker) { true }
287303

288-
it 'renders' do
289-
expect(rendered_template).to match(/.+stop_worker 2.+stop_worker 3.+stop_dedicated_worker 1/m)
304+
it 'renders to drain normal jobs and then the rest' do
305+
expect(rendered_template).to match(/.+stop_worker worker_2.+stop_worker worker_3.+stop_dedicated_worker worker_1/m)
306+
307+
expect(rendered_template).to include('bosh-director-drain-workers -c /var/vcap/jobs/director/config/director.yml --queue normal')
308+
expect(rendered_template).to_not include('bosh-director-drain-workers -c /var/vcap/jobs/director/config/director.yml --queue dynamic_disks')
309+
end
310+
311+
context 'dynamic disks workers' do
312+
let(:dynamic_disks_workers) { 2 }
290313

291-
expect(rendered_template).to include('--queue normal')
292-
expect(rendered_template).to include('bosh-director-drain-workers')
314+
it 'renders to drain normal jobs, then dynamic_disks jobs and then the rest' do
315+
expect(rendered_template).to match(/.+stop_worker worker_2.+stop_worker worker_3.+.+stop_worker dynamic_disks_worker_1.+stop_worker dynamic_disks_worker_2.+stop_dedicated_worker worker_1/m)
316+
317+
expect(rendered_template).to include('bosh-director-drain-workers -c /var/vcap/jobs/director/config/director.yml --queue normal')
318+
expect(rendered_template).to include('bosh-director-drain-workers -c /var/vcap/jobs/director/config/director.yml --queue dynamic_disks')
319+
end
293320
end
294321
end
295322
end
@@ -438,6 +465,30 @@
438465
end
439466
end
440467
end
468+
469+
describe 'worker_ctl' do
470+
let(:template) { job.template('bin/worker_ctl') }
471+
let(:rendered_template) { template.render(properties) }
472+
473+
let(:enable_dedicated_status_worker) { false }
474+
let(:properties) do
475+
properties = default_properties.dup
476+
properties['director']['enable_dedicated_status_worker'] = enable_dedicated_status_worker
477+
properties
478+
end
479+
480+
it 'renders' do
481+
expect(rendered_template).to include('export QUEUE="${3:-normal,urgent}"')
482+
end
483+
484+
context 'dedicated status workers' do
485+
let(:enable_dedicated_status_worker) { true }
486+
487+
it 'renders' do
488+
expect(rendered_template).to include('export QUEUE="urgent"')
489+
end
490+
end
491+
end
441492
end
442493
end
443494

spec/support/ps_utils_tests.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,14 @@ function test_kill_process {
3939
function test_list_child_processes {
4040
function ps {
4141
cat <<EOF
42-
21 ruby /var/vcap/packages/director/bin/bosh-director-worker -c /var/vcap/jobs/director/config/director.yml -i 1
43-
22 ruby /var/vcap/packages/director/bin/bosh-director-worker -c /var/vcap/jobs/director/config/director.yml -i 2
44-
23 ruby /var/vcap/packages/director/bin/bosh-director-worker -c /var/vcap/jobs/director/config/director.yml -i 2
42+
21 ruby /var/vcap/packages/director/bin/bosh-director-worker -c /var/vcap/jobs/director/config/director.yml -n worker-1
43+
22 ruby /var/vcap/packages/director/bin/bosh-director-worker -c /var/vcap/jobs/director/config/director.yml -n worker-2
44+
23 ruby /var/vcap/packages/director/bin/bosh-director-worker -c /var/vcap/jobs/director/config/director.yml -n worker-2
4545
1 init
4646
EOF
4747
}
4848

49-
CHILD_PID=$(list_child_processes 2)
49+
CHILD_PID=$(list_child_processes worker-2)
5050

5151
if [ "$CHILD_PID" = "22
5252
23" ]; then

src/bosh-director/bin/bosh-director-worker

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,32 +6,32 @@ require 'bosh/director/worker'
66
require 'bosh/director/config'
77

88
config_file = nil
9-
index = nil
9+
name = nil
1010

1111
begin
1212
opts = OptionParser.new do |op|
1313
op.on('-c', '--config [ARG]', 'Configuration File') do |opt|
1414
config_file = opt
1515
end
1616

17-
op.on('-i', '--index [ARG]', Integer, 'Worker Index') do |opt|
18-
index = opt
17+
op.on('-n', '--name [ARG]', 'Worker Name') do |opt|
18+
name = opt
1919
end
2020
end
2121

2222
opts.parse!(ARGV.dup)
2323

2424
config_file ||= ::File.expand_path('../../config/bosh-director.yml', __FILE__)
2525

26-
Bosh::Director::Config.audit_filename = "audit_worker_#{index}.log"
26+
Bosh::Director::Config.audit_filename = "audit_#{name}.log"
2727

2828
config = Bosh::Director::Config.load_file(config_file)
2929

3030
require 'ruby_shims/kernel_equals_tilde' if config.enable_pre_ruby_3_2_equal_tilde_behavior
3131

3232
config.db
3333

34-
worker = Bosh::Director::Worker.new(config, index)
34+
worker = Bosh::Director::Worker.new(config, name)
3535
worker.prep
3636
worker.start
3737
end

src/bosh-director/lib/bosh/director/jobs/dynamic_disks/delete_dynamic_disk.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module Jobs::DynamicDisks
33
class DeleteDynamicDisk < Jobs::BaseJob
44
include Jobs::Helpers::DynamicDiskHelpers
55

6-
@queue = :normal
6+
@queue = :dynamic_disks
77

88
def self.job_type
99
:delete_dynamic_disk

src/bosh-director/lib/bosh/director/jobs/dynamic_disks/detach_dynamic_disk.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ class DetachDynamicDisk < Jobs::BaseJob
44
include Jobs::Helpers::DynamicDiskHelpers
55
include LockHelper
66

7-
@queue = :normal
7+
@queue = :dynamic_disks
88

99
def self.job_type
1010
:detach_dynamic_disk

0 commit comments

Comments
 (0)