bosh-director 1.2577.0 → 1.2578.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/bosh/director.rb CHANGED
@@ -73,6 +73,7 @@ require 'bosh/director/instance_deleter'
73
73
  require 'bosh/director/instance_updater'
74
74
  require 'bosh/director/instance_updater/preparer'
75
75
  require 'bosh/director/instance_updater/network_updater'
76
+ require 'bosh/director/instance_updater/stopper'
76
77
  require 'bosh/director/job_runner'
77
78
  require 'bosh/director/job_updater'
78
79
  require 'bosh/director/job_queue'
@@ -31,6 +31,7 @@ module Bosh::Director
31
31
  @current_state = {}
32
32
 
33
33
  @network_updater = NetworkUpdater.new(@instance, @vm, agent, self, @cloud, @logger)
34
+ @stopper = Stopper.new(@instance, agent, @target_state, Config, @logger)
34
35
  end
35
36
 
36
37
  def instance_name
@@ -140,38 +141,7 @@ module Bosh::Director
140
141
  end
141
142
 
142
143
  def stop
143
- drain_time = shutting_down? ? agent.drain("shutdown") : agent.drain("update", @instance.spec)
144
-
145
- if drain_time > 0
146
- sleep(drain_time)
147
- else
148
- wait_for_dynamic_drain(drain_time)
149
- end
150
-
151
- agent.stop
152
- end
153
-
154
- def wait_for_dynamic_drain(initial_drain_time)
155
- drain_time = initial_drain_time
156
- loop do
157
- # This could go on forever if drain script is broken, canceling the task is a way out.
158
- Config.task_checkpoint
159
-
160
- wait_time = drain_time.abs
161
- if wait_time > 0
162
- @logger.info("`#{@instance}' is draining: checking back in #{wait_time}s")
163
- sleep(wait_time)
164
- end
165
- # Positive number always means last drain call:
166
- break if drain_time >= 0
167
-
168
- # We used to ignore exceptions from drain status for compatibility
169
- # with older agents but it doesn't need to happen anymore, as
170
- # realistically speaking, all agents have already been updated
171
- # to support drain status mechanism and swallowing real errors
172
- # would be bad here, as it could mask potential problems.
173
- drain_time = agent.drain("status")
174
- end
144
+ @stopper.stop
175
145
  end
176
146
 
177
147
  def take_snapshot
@@ -465,15 +435,6 @@ module Bosh::Director
465
435
  [min_watch_time] + ([step] * (delta / step).floor)
466
436
  end
467
437
 
468
- # @return [Boolean] Is instance shutting down for this update?
469
- def shutting_down?
470
- @instance.resource_pool_changed? ||
471
- @instance.persistent_disk_changed? ||
472
- @instance.networks_changed? ||
473
- @target_state == "stopped" ||
474
- @target_state == "detached"
475
- end
476
-
477
438
  def min_watch_time
478
439
  canary? ? @update_config.min_canary_watch_time : @update_config.min_update_watch_time
479
440
  end
@@ -0,0 +1,63 @@
1
+ module Bosh::Director
2
+ class InstanceUpdater::Stopper
3
+ def initialize(instance, agent_client, target_state, config, logger)
4
+ @instance = instance
5
+ @agent_client = agent_client
6
+ @target_state = target_state
7
+ @config = config
8
+ @logger = logger
9
+ end
10
+
11
+ def stop
12
+ drain_type = shutting_down? ? 'shutdown' : 'update'
13
+
14
+ # Apply spec might change after shutdown drain (unlike update drain)
15
+ # because instance's VM could be reconfigured.
16
+ # Drain script can still capture intent from non-final apply spec.
17
+ drain_time = @agent_client.drain(drain_type, @instance.spec)
18
+
19
+ if drain_time > 0
20
+ sleep(drain_time)
21
+ else
22
+ wait_for_dynamic_drain(drain_time)
23
+ end
24
+
25
+ @agent_client.stop
26
+ end
27
+
28
+ private
29
+
30
+ def shutting_down?
31
+ @instance.resource_pool_changed? ||
32
+ @instance.persistent_disk_changed? ||
33
+ @instance.networks_changed? ||
34
+ @target_state == 'stopped' ||
35
+ @target_state == 'detached'
36
+ end
37
+
38
+ def wait_for_dynamic_drain(initial_drain_time)
39
+ drain_time = initial_drain_time
40
+
41
+ loop do
42
+ # This could go on forever if drain script is broken, canceling the task is a way out.
43
+ @config.task_checkpoint
44
+
45
+ wait_time = drain_time.abs
46
+ if wait_time > 0
47
+ @logger.info("`#{@instance}' is draining: checking back in #{wait_time}s")
48
+ sleep(wait_time)
49
+ end
50
+
51
+ # Positive number always means last drain call:
52
+ break if drain_time >= 0
53
+
54
+ # We used to ignore exceptions from drain status for compatibility
55
+ # with older agents but it doesn't need to happen anymore, as
56
+ # realistically speaking, all agents have already been updated
57
+ # to support drain status mechanism and swallowing real errors
58
+ # would be bad here, as it could mask potential problems.
59
+ drain_time = @agent_client.drain('status')
60
+ end
61
+ end
62
+ end
63
+ end
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Director
3
- VERSION = '1.2577.0'
3
+ VERSION = '1.2578.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh-director
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2577.0
4
+ version: 1.2578.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-05-22 00:00:00.000000000 Z
12
+ date: 2014-05-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bcrypt-ruby
@@ -34,7 +34,7 @@ dependencies:
34
34
  requirements:
35
35
  - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: 1.2577.0
37
+ version: 1.2578.0
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: 1.2577.0
45
+ version: 1.2578.0
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: bosh-core
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -50,7 +50,7 @@ dependencies:
50
50
  requirements:
51
51
  - - ~>
52
52
  - !ruby/object:Gem::Version
53
- version: 1.2577.0
53
+ version: 1.2578.0
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -58,7 +58,7 @@ dependencies:
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: 1.2577.0
61
+ version: 1.2578.0
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: bosh-director-core
64
64
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +66,7 @@ dependencies:
66
66
  requirements:
67
67
  - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: 1.2577.0
69
+ version: 1.2578.0
70
70
  type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
@@ -74,7 +74,7 @@ dependencies:
74
74
  requirements:
75
75
  - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: 1.2577.0
77
+ version: 1.2578.0
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: bosh_common
80
80
  requirement: !ruby/object:Gem::Requirement
@@ -82,7 +82,7 @@ dependencies:
82
82
  requirements:
83
83
  - - ~>
84
84
  - !ruby/object:Gem::Version
85
- version: 1.2577.0
85
+ version: 1.2578.0
86
86
  type: :runtime
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
@@ -90,7 +90,7 @@ dependencies:
90
90
  requirements:
91
91
  - - ~>
92
92
  - !ruby/object:Gem::Version
93
- version: 1.2577.0
93
+ version: 1.2578.0
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: bosh_cpi
96
96
  requirement: !ruby/object:Gem::Requirement
@@ -98,7 +98,7 @@ dependencies:
98
98
  requirements:
99
99
  - - ~>
100
100
  - !ruby/object:Gem::Version
101
- version: 1.2577.0
101
+ version: 1.2578.0
102
102
  type: :runtime
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
@@ -106,7 +106,7 @@ dependencies:
106
106
  requirements:
107
107
  - - ~>
108
108
  - !ruby/object:Gem::Version
109
- version: 1.2577.0
109
+ version: 1.2578.0
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: bosh_openstack_cpi
112
112
  requirement: !ruby/object:Gem::Requirement
@@ -114,7 +114,7 @@ dependencies:
114
114
  requirements:
115
115
  - - ~>
116
116
  - !ruby/object:Gem::Version
117
- version: 1.2577.0
117
+ version: 1.2578.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
@@ -122,7 +122,7 @@ dependencies:
122
122
  requirements:
123
123
  - - ~>
124
124
  - !ruby/object:Gem::Version
125
- version: 1.2577.0
125
+ version: 1.2578.0
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: bosh_aws_cpi
128
128
  requirement: !ruby/object:Gem::Requirement
@@ -130,7 +130,7 @@ dependencies:
130
130
  requirements:
131
131
  - - ~>
132
132
  - !ruby/object:Gem::Version
133
- version: 1.2577.0
133
+ version: 1.2578.0
134
134
  type: :runtime
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
@@ -138,7 +138,7 @@ dependencies:
138
138
  requirements:
139
139
  - - ~>
140
140
  - !ruby/object:Gem::Version
141
- version: 1.2577.0
141
+ version: 1.2578.0
142
142
  - !ruby/object:Gem::Dependency
143
143
  name: bosh_vsphere_cpi
144
144
  requirement: !ruby/object:Gem::Requirement
@@ -146,7 +146,7 @@ dependencies:
146
146
  requirements:
147
147
  - - ~>
148
148
  - !ruby/object:Gem::Version
149
- version: 1.2577.0
149
+ version: 1.2578.0
150
150
  type: :runtime
151
151
  prerelease: false
152
152
  version_requirements: !ruby/object:Gem::Requirement
@@ -154,7 +154,7 @@ dependencies:
154
154
  requirements:
155
155
  - - ~>
156
156
  - !ruby/object:Gem::Version
157
- version: 1.2577.0
157
+ version: 1.2578.0
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: bosh_warden_cpi
160
160
  requirement: !ruby/object:Gem::Requirement
@@ -162,7 +162,7 @@ dependencies:
162
162
  requirements:
163
163
  - - ~>
164
164
  - !ruby/object:Gem::Version
165
- version: 1.2577.0
165
+ version: 1.2578.0
166
166
  type: :runtime
167
167
  prerelease: false
168
168
  version_requirements: !ruby/object:Gem::Requirement
@@ -170,7 +170,7 @@ dependencies:
170
170
  requirements:
171
171
  - - ~>
172
172
  - !ruby/object:Gem::Version
173
- version: 1.2577.0
173
+ version: 1.2578.0
174
174
  - !ruby/object:Gem::Dependency
175
175
  name: bosh_vcloud_cpi
176
176
  requirement: !ruby/object:Gem::Requirement
@@ -461,7 +461,7 @@ dependencies:
461
461
  version: 0.0.2
462
462
  description: ! 'BOSH Director
463
463
 
464
- 9241ed'
464
+ 38620a'
465
465
  email: support@cloudfoundry.com
466
466
  executables:
467
467
  - bosh-director
@@ -609,6 +609,7 @@ files:
609
609
  - lib/bosh/director/instance_updater.rb
610
610
  - lib/bosh/director/instance_updater/network_updater.rb
611
611
  - lib/bosh/director/instance_updater/preparer.rb
612
+ - lib/bosh/director/instance_updater/stopper.rb
612
613
  - lib/bosh/director/ip_util.rb
613
614
  - lib/bosh/director/job_queue.rb
614
615
  - lib/bosh/director/job_renderer.rb
@@ -720,7 +721,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
720
721
  version: '0'
721
722
  segments:
722
723
  - 0
723
- hash: -384621618675457843
724
+ hash: -1339974340603859878
724
725
  requirements: []
725
726
  rubyforge_project:
726
727
  rubygems_version: 1.8.23