Merge lp:~dimitern/juju-core/270-lp-1257649-ssh-timeout-bootstrap into lp:~go-bot/juju-core/trunk

Proposed by Dimiter Naydenov
Status: Merged
Approved by: Dimiter Naydenov
Approved revision: no longer in the source branch.
Merged at revision: 2282
Proposed branch: lp:~dimitern/juju-core/270-lp-1257649-ssh-timeout-bootstrap
Merge into: lp:~go-bot/juju-core/trunk
Prerequisite: lp:~dimitern/juju-core/260-lp-1067979-duplicate-charm
Diff against target: 401 lines (+187/-54)
5 files modified
cmd/juju/bootstrap.go (+10/-1)
environs/config/config.go (+78/-15)
environs/config/config_test.go (+86/-3)
provider/common/bootstrap.go (+11/-33)
provider/common/bootstrap_test.go (+2/-2)
To merge this branch: bzr merge lp:~dimitern/juju-core/270-lp-1257649-ssh-timeout-bootstrap
Reviewer Review Type Date Requested Status
Dimiter Naydenov (community) Approve
Review via email: mp+203832@code.launchpad.net

Commit message

bootstrap: Added configurable timeout and delays

Fixed bug #1257649: ssh timeout for bootstrap
could be configurable, by adding 3 new config
settings:
- bootstrap-timeout (default: 600s = 10m)
- bootstrap-retry-delay (default: 5s)
- bootstrap-addresses-delay (default: 10s)

All of them are integers, measured in seconds,
and also all of them are optional and have the
specified defaults.

Updated the bootstrap command's help text to
include the new config settings.

https://codereview.appspot.com/58170045/

R=natefinch

Description of the change

bootstrap: Added configurable timeout and delays

Fixed bug #1257649: ssh timeout for bootstrap
could be configurable, by adding 3 new config
settings:
- bootstrap-timeout (default: 600s = 10m)
- bootstrap-retry-delay (default: 5s)
- bootstrap-addresses-delay (default: 10s)

All of them are integers, measured in seconds,
and also all of them are optional and have the
specified defaults.

Updated the bootstrap command's help text to
include the new config settings.

https://codereview.appspot.com/58170045/

To post a comment you must log in.
Revision history for this message
Dimiter Naydenov (dimitern) wrote :

Reviewers: mp+203832_code.launchpad.net,

Message:
Please take a look.

Description:
bootstrap: Added configurable timeout and delays

Fixed bug #1257649: ssh timeout for bootstrap
could be configurable, by adding 3 new config
settings:
- bootstrap-ssh-timeout (default: 600s = 10m)
- bootstrap-ssh-retry-delay (default: 5s)
- bootstrap-ssh-addresses-delay (default: 10s)

All of them are integers, measured in seconds,
and also all of them are optional and have the
specified defaults.

Updated the bootstrap command's help text to
include the new config settings.

https://code.launchpad.net/~dimitern/juju-core/270-lp-1257649-ssh-timeout-bootstrap/+merge/203832

Requires:
https://code.launchpad.net/~dimitern/juju-core/260-lp-1067979-duplicate-charm/+merge/203291

(do not edit description out of merge proposal)

Please review this at https://codereview.appspot.com/58170045/

Affected files (+236, -101 lines):
   A [revision details]
   M cmd/juju/bootstrap.go
   M environs/config/config.go
   M environs/config/config_test.go
   M provider/common/bootstrap.go

Revision history for this message
Nate Finch (natefinch) wrote :

Please remove all user-facing mentions of SSH, since that's an internal
detail and something that would just confuse users. This is just a
bootstrap timeout to an end user, even if it does use SSH behind the
scenes.

https://codereview.appspot.com/58170045/diff/1/cmd/juju/bootstrap.go
File cmd/juju/bootstrap.go (right):

https://codereview.appspot.com/58170045/diff/1/cmd/juju/bootstrap.go#newcode48
cmd/juju/bootstrap.go:48: bootstrap-ssh-timeout: 600 # default: 10
minutes
ssh is an internal detail that will just be confusing to users. This is
just the "bootstrap-timeout" to an end user.
  Same goes for retry delay and addresses delay.

https://codereview.appspot.com/58170045/

Revision history for this message
Nate Finch (natefinch) wrote :

Oh yeah, otherwise LGTM :)

https://codereview.appspot.com/58170045/

Revision history for this message
Dimiter Naydenov (dimitern) wrote :
Revision history for this message
Go Bot (go-bot) wrote :
Revision history for this message
Dimiter Naydenov (dimitern) wrote :
Revision history for this message
Dimiter Naydenov (dimitern) wrote :

Self-approving after fixing merge conflicts.

review: Approve
Revision history for this message
Go Bot (go-bot) wrote :
Download full text (9.0 KiB)

The attempt to merge lp:~dimitern/juju-core/270-lp-1257649-ssh-timeout-bootstrap into lp:juju-core failed. Below is the output from the failed tests.

ok launchpad.net/juju-core/agent 1.242s
ok launchpad.net/juju-core/agent/tools 0.247s
ok launchpad.net/juju-core/bzr 7.292s
ok launchpad.net/juju-core/cert 3.276s
ok launchpad.net/juju-core/charm 0.675s
? launchpad.net/juju-core/charm/hooks [no test files]
? launchpad.net/juju-core/charm/testing [no test files]
ok launchpad.net/juju-core/cloudinit 0.033s
ok launchpad.net/juju-core/cloudinit/sshinit 1.206s
ok launchpad.net/juju-core/cmd 0.228s
ok launchpad.net/juju-core/cmd/charm-admin 0.839s
? launchpad.net/juju-core/cmd/charmd [no test files]
? launchpad.net/juju-core/cmd/charmload [no test files]
ok launchpad.net/juju-core/cmd/juju 253.798s
ok launchpad.net/juju-core/cmd/jujud 67.489s
ok launchpad.net/juju-core/cmd/plugins/juju-metadata 13.106s
? launchpad.net/juju-core/cmd/plugins/juju-restore [no test files]
ok launchpad.net/juju-core/constraints 0.028s
ok launchpad.net/juju-core/container 0.047s
ok launchpad.net/juju-core/container/factory 0.054s
ok launchpad.net/juju-core/container/kvm 0.299s
ok launchpad.net/juju-core/container/kvm/mock 0.064s
? launchpad.net/juju-core/container/kvm/testing [no test files]
ok launchpad.net/juju-core/container/lxc 0.368s
? launchpad.net/juju-core/container/lxc/mock [no test files]
? launchpad.net/juju-core/container/lxc/testing [no test files]
? launchpad.net/juju-core/container/testing [no test files]
ok launchpad.net/juju-core/downloader 5.289s
ok launchpad.net/juju-core/environs 3.146s
ok launchpad.net/juju-core/environs/bootstrap 4.543s
ok launchpad.net/juju-core/environs/cloudinit 0.614s
ok launchpad.net/juju-core/environs/config 2.040s
ok launchpad.net/juju-core/environs/configstore 0.041s
ok launchpad.net/juju-core/environs/filestorage 0.033s
ok launchpad.net/juju-core/environs/httpstorage 0.976s
ok launchpad.net/juju-core/environs/imagemetadata 0.658s
? launchpad.net/juju-core/environs/imagemetadata/testing [no test files]
ok launchpad.net/juju-core/environs/instances 0.062s
ok launchpad.net/juju-core/environs/jujutest 0.219s
ok launchpad.net/juju-core/environs/manual 9.762s
ok launchpad.net/juju-core/environs/simplestreams 0.331s
? launchpad.net/juju-core/environs/simplestreams/testing [no test files]
ok launchpad.net/juju-core/environs/sshstorage 1.488s
ok launchpad.net/juju-core/environs/storage 1.212s
ok launchpad.net/juju-core/environs/sync 37.095s
ok launchpad.net/juju-core/environs/testing 0.212s
ok launchpad.net/juju-core/environs/tools 6.858s
? launchpad.net/juju-core/environs/tools/testing [no test files]
ok launchpad.net/juju-core/errors 0.017s
ok launchpad.net/juju-core/instance 0.027s
? launchpad.net/juju-core/instance/testing [no test files]
ok launchpad.net/juju-core/juju 25.189s
ok launchpad.net/juju-core/juju/osenv 0.021s
? launchpad.net/juju-core/juju/testing [no test files]
ok launchpad.net/juju-core/log 0.027s
ok launchpad.net/juju-core/log/syslog 0.023s
ok launchpad.net/juju-core/names 0.030s
? lau...

Read more...

Revision history for this message
Dimiter Naydenov (dimitern) wrote :
Revision history for this message
Dimiter Naydenov (dimitern) wrote :

Self-approving after fixing a test.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'cmd/juju/bootstrap.go'
2--- cmd/juju/bootstrap.go 2014-01-30 06:21:03 +0000
3+++ cmd/juju/bootstrap.go 2014-01-30 17:28:09 +0000
4@@ -42,7 +42,16 @@
5 Bootstrap initializes the cloud environment synchronously and displays information
6 about the current installation steps. The time for bootstrap to complete varies
7 across cloud providers from a few seconds to several minutes. Once bootstrap has
8-completed, you can run other juju commands against your environment.
9+completed, you can run other juju commands against your environment. You can change
10+the default timeout and retry delays used during the bootstrap by changing the
11+following settings in your environments.yaml (all values represent number of seconds):
12+
13+ # How long to wait for a connection to the state server.
14+ bootstrap-timeout: 600 # default: 10 minutes
15+ # How long to wait between connection attempts to a state server address.
16+ bootstrap-retry-delay: 5 # default: 5 seconds
17+ # How often to refresh state server addresses from the API server.
18+ bootstrap-addresses-delay: 10 # default: 10 seconds
19
20 Private clouds may need to specify their own custom image metadata, and possibly upload
21 Juju tools to cloud storage if no outgoing Internet access is available. In this case,
22
23=== modified file 'environs/config/config.go'
24--- environs/config/config.go 2014-01-29 09:58:08 +0000
25+++ environs/config/config.go 2014-01-30 17:28:09 +0000
26@@ -45,6 +45,19 @@
27 // DefaultSyslogPort is the default port that the syslog UDP listener is
28 // listening on.
29 DefaultSyslogPort int = 514
30+
31+ // DefaultBootstrapSSHTimeout is the amount of time to wait
32+ // contacting a state server, in seconds.
33+ DefaultBootstrapSSHTimeout int = 600
34+
35+ // DefaultBootstrapSSHRetryDelay is the amount of time between
36+ // attempts to connect to an address, in seconds.
37+ DefaultBootstrapSSHRetryDelay int = 5
38+
39+ // DefaultBootstrapSSHAddressesDelay is the amount of time between
40+ // refreshing the addresses, in seconds. Not too frequent, as we
41+ // refresh addresses from the provider each time.
42+ DefaultBootstrapSSHAddressesDelay int = 10
43 )
44
45 // Config holds an immutable environment configuration.
46@@ -473,6 +486,26 @@
47 return c.getWithFallback("apt-ftp-proxy", "ftp-proxy")
48 }
49
50+// BootstrapSSHOpts returns the SSH timeout and retry delays used
51+// during bootstrap.
52+func (c *Config) BootstrapSSHOpts() SSHTimeoutOpts {
53+ opts := SSHTimeoutOpts{
54+ Timeout: time.Duration(DefaultBootstrapSSHTimeout) * time.Second,
55+ RetryDelay: time.Duration(DefaultBootstrapSSHRetryDelay) * time.Second,
56+ AddressesDelay: time.Duration(DefaultBootstrapSSHAddressesDelay) * time.Second,
57+ }
58+ if v, ok := c.m["bootstrap-timeout"].(int); ok && v != 0 {
59+ opts.Timeout = time.Duration(v) * time.Second
60+ }
61+ if v, ok := c.m["bootstrap-retry-delay"].(int); ok && v != 0 {
62+ opts.RetryDelay = time.Duration(v) * time.Second
63+ }
64+ if v, ok := c.m["bootstrap-addresses-delay"].(int); ok && v != 0 {
65+ opts.AddressesDelay = time.Duration(v) * time.Second
66+ }
67+ return opts
68+}
69+
70 // CACert returns the certificate of the CA that signed the state server
71 // certificate, in PEM format, and whether the setting is available.
72 func (c *Config) CACert() ([]byte, bool) {
73@@ -639,6 +672,9 @@
74 "apt-http-proxy": schema.String(),
75 "apt-https-proxy": schema.String(),
76 "apt-ftp-proxy": schema.String(),
77+ "bootstrap-timeout": schema.ForceInt(),
78+ "bootstrap-retry-delay": schema.ForceInt(),
79+ "bootstrap-addresses-delay": schema.ForceInt(),
80
81 // Deprecated fields, retain for backwards compatibility.
82 "tools-url": schema.String(),
83@@ -653,21 +689,24 @@
84 // but some fields listed as optional here are actually mandatory
85 // with NoDefaults and are checked at the later Validate stage.
86 var alwaysOptional = schema.Defaults{
87- "agent-version": schema.Omit,
88- "ca-cert": schema.Omit,
89- "authorized-keys": schema.Omit,
90- "authorized-keys-path": schema.Omit,
91- "ca-cert-path": schema.Omit,
92- "ca-private-key-path": schema.Omit,
93- "logging-config": schema.Omit,
94- "provisioner-safe-mode": schema.Omit,
95- "http-proxy": schema.Omit,
96- "https-proxy": schema.Omit,
97- "ftp-proxy": schema.Omit,
98- "apt-http-proxy": schema.Omit,
99- "apt-https-proxy": schema.Omit,
100- "apt-ftp-proxy": schema.Omit,
101- "image-stream": schema.Omit,
102+ "agent-version": schema.Omit,
103+ "ca-cert": schema.Omit,
104+ "authorized-keys": schema.Omit,
105+ "authorized-keys-path": schema.Omit,
106+ "ca-cert-path": schema.Omit,
107+ "ca-private-key-path": schema.Omit,
108+ "logging-config": schema.Omit,
109+ "provisioner-safe-mode": schema.Omit,
110+ "http-proxy": schema.Omit,
111+ "https-proxy": schema.Omit,
112+ "ftp-proxy": schema.Omit,
113+ "apt-http-proxy": schema.Omit,
114+ "apt-https-proxy": schema.Omit,
115+ "apt-ftp-proxy": schema.Omit,
116+ "image-stream": schema.Omit,
117+ "bootstrap-timeout": schema.Omit,
118+ "bootstrap-retry-delay": schema.Omit,
119+ "bootstrap-addresses-delay": schema.Omit,
120
121 // Deprecated fields, retain for backwards compatibility.
122 "tools-url": "",
123@@ -706,6 +745,9 @@
124 "state-port": DefaultStatePort,
125 "api-port": DefaultAPIPort,
126 "syslog-port": DefaultSyslogPort,
127+ "bootstrap-timeout": DefaultBootstrapSSHTimeout,
128+ "bootstrap-retry-delay": DefaultBootstrapSSHRetryDelay,
129+ "bootstrap-addresses-delay": DefaultBootstrapSSHAddressesDelay,
130 }
131 for attr, val := range alwaysOptional {
132 d[attr] = val
133@@ -739,6 +781,9 @@
134 "state-port",
135 "api-port",
136 "syslog-port",
137+ "bootstrap-timeout",
138+ "bootstrap-retry-delay",
139+ "bootstrap-addresses-delay",
140 }
141
142 var (
143@@ -802,6 +847,24 @@
144 return repo
145 }
146
147+// SSHTimeoutOpts lists the amount of time we will wait for various
148+// parts of the SSH connection to complete. This is similar to
149+// DialOpts, see http://pad.lv/1258889 about possibly deduplicating
150+// them.
151+type SSHTimeoutOpts struct {
152+ // Timeout is the amount of time to wait contacting a state
153+ // server.
154+ Timeout time.Duration
155+
156+ // RetryDelay is the amount of time between attempts to connect to
157+ // an address.
158+ RetryDelay time.Duration
159+
160+ // AddressesDelay is the amount of time between refreshing the
161+ // addresses.
162+ AddressesDelay time.Duration
163+}
164+
165 // ProxyConfigMap returns a map suitable to be applied to a Config to update
166 // proxy settings.
167 func ProxyConfigMap(proxy osenv.ProxySettings) map[string]interface{} {
168
169=== modified file 'environs/config/config_test.go'
170--- environs/config/config_test.go 2014-01-29 09:58:08 +0000
171+++ environs/config/config_test.go 2014-01-30 17:28:09 +0000
172@@ -513,6 +513,57 @@
173 },
174 err: `syslog-port: expected number, got string\("illegal"\)`,
175 }, {
176+ about: "Explicit bootstrap timeout",
177+ useDefaults: config.UseDefaults,
178+ attrs: testing.Attrs{
179+ "type": "my-type",
180+ "name": "my-name",
181+ "bootstrap-timeout": 300,
182+ },
183+ }, {
184+ about: "Invalid bootstrap timeout",
185+ useDefaults: config.UseDefaults,
186+ attrs: testing.Attrs{
187+ "type": "my-type",
188+ "name": "my-name",
189+ "bootstrap-timeout": "illegal",
190+ },
191+ err: `bootstrap-timeout: expected number, got string\("illegal"\)`,
192+ }, {
193+ about: "Explicit bootstrap retry delay",
194+ useDefaults: config.UseDefaults,
195+ attrs: testing.Attrs{
196+ "type": "my-type",
197+ "name": "my-name",
198+ "bootstrap-retry-delay": 5,
199+ },
200+ }, {
201+ about: "Invalid bootstrap retry delay",
202+ useDefaults: config.UseDefaults,
203+ attrs: testing.Attrs{
204+ "type": "my-type",
205+ "name": "my-name",
206+ "bootstrap-retry-delay": "illegal",
207+ },
208+ err: `bootstrap-retry-delay: expected number, got string\("illegal"\)`,
209+ }, {
210+ about: "Explicit bootstrap addresses delay",
211+ useDefaults: config.UseDefaults,
212+ attrs: testing.Attrs{
213+ "type": "my-type",
214+ "name": "my-name",
215+ "bootstrap-addresses-delay": 15,
216+ },
217+ }, {
218+ about: "Invalid bootstrap addresses delay",
219+ useDefaults: config.UseDefaults,
220+ attrs: testing.Attrs{
221+ "type": "my-type",
222+ "name": "my-name",
223+ "bootstrap-addresses-delay": "illegal",
224+ },
225+ err: `bootstrap-addresses-delay: expected number, got string\("illegal"\)`,
226+ }, {
227 about: "Invalid logging configuration",
228 useDefaults: config.UseDefaults,
229 attrs: testing.Attrs{
230@@ -854,6 +905,25 @@
231 } else {
232 c.Assert(cfg.ProvisionerSafeMode(), gc.Equals, false)
233 }
234+ sshOpts := cfg.BootstrapSSHOpts()
235+ test.assertDuration(
236+ c,
237+ "bootstrap-timeout",
238+ sshOpts.Timeout,
239+ config.DefaultBootstrapSSHTimeout,
240+ )
241+ test.assertDuration(
242+ c,
243+ "bootstrap-retry-delay",
244+ sshOpts.RetryDelay,
245+ config.DefaultBootstrapSSHRetryDelay,
246+ )
247+ test.assertDuration(
248+ c,
249+ "bootstrap-addresses-delay",
250+ sshOpts.AddressesDelay,
251+ config.DefaultBootstrapSSHAddressesDelay,
252+ )
253
254 if v, ok := test.attrs["image-stream"]; ok {
255 c.Assert(cfg.ImageStream(), gc.Equals, v)
256@@ -888,6 +958,15 @@
257 }
258 }
259
260+func (test configTest) assertDuration(c *gc.C, name string, actual time.Duration, defaultInSeconds int) {
261+ value, ok := test.attrs[name].(int)
262+ if !ok || value == 0 {
263+ c.Assert(actual, gc.Equals, time.Duration(defaultInSeconds)*time.Second)
264+ } else {
265+ c.Assert(actual, gc.Equals, time.Duration(value)*time.Second)
266+ }
267+}
268+
269 func (s *ConfigSuite) TestConfigAttrs(c *gc.C) {
270 // Normally this is handled by testing.FakeHome
271 s.PatchEnvironment(osenv.JujuLoggingConfigEnvKey, "")
272@@ -905,6 +984,9 @@
273 "state-port": 1234,
274 "api-port": 4321,
275 "syslog-port": 2345,
276+ "bootstrap-timeout": 3600,
277+ "bootstrap-retry-delay": 30,
278+ "bootstrap-addresses-delay": 10,
279 "default-series": "precise",
280 "charm-store-auth": "token=auth",
281 }
282@@ -921,17 +1003,18 @@
283 attrs["tools-url"] = ""
284 // Default firewall mode is instance
285 attrs["firewall-mode"] = string(config.FwInstance)
286- c.Assert(cfg.AllAttrs(), gc.DeepEquals, attrs)
287- c.Assert(cfg.UnknownAttrs(), gc.DeepEquals, map[string]interface{}{"unknown": "my-unknown"})
288+ c.Assert(cfg.AllAttrs(), jc.DeepEquals, attrs)
289+ c.Assert(cfg.UnknownAttrs(), jc.DeepEquals, map[string]interface{}{"unknown": "my-unknown"})
290
291 newcfg, err := cfg.Apply(map[string]interface{}{
292 "name": "new-name",
293 "new-unknown": "my-new-unknown",
294 })
295+ c.Assert(err, gc.IsNil)
296
297 attrs["name"] = "new-name"
298 attrs["new-unknown"] = "my-new-unknown"
299- c.Assert(newcfg.AllAttrs(), gc.DeepEquals, attrs)
300+ c.Assert(newcfg.AllAttrs(), jc.DeepEquals, attrs)
301 }
302
303 type validationTest struct {
304
305=== modified file 'provider/common/bootstrap.go'
306--- provider/common/bootstrap.go 2014-01-28 04:58:43 +0000
307+++ provider/common/bootstrap.go 2014-01-30 17:28:09 +0000
308@@ -19,6 +19,7 @@
309 "launchpad.net/juju-core/environs"
310 "launchpad.net/juju-core/environs/bootstrap"
311 "launchpad.net/juju-core/environs/cloudinit"
312+ "launchpad.net/juju-core/environs/config"
313 "launchpad.net/juju-core/instance"
314 coretools "launchpad.net/juju-core/tools"
315 "launchpad.net/juju-core/utils"
316@@ -191,10 +192,14 @@
317 exit 1
318 fi
319 `, nonceFile, utils.ShQuote(machineConfig.MachineNonce))
320- // TODO: jam 2013-12-04 bug #1257649
321- // It would be nice if users had some controll over their bootstrap
322- // timeout, since it is unlikely to be a perfect match for all clouds.
323- addr, err := waitSSH(ctx, interrupted, client, checkNonceCommand, inst, DefaultBootstrapSSHTimeout())
324+ addr, err := waitSSH(
325+ ctx,
326+ interrupted,
327+ client,
328+ checkNonceCommand,
329+ inst,
330+ machineConfig.Config.BootstrapSSHOpts(),
331+ )
332 if err != nil {
333 return err
334 }
335@@ -216,33 +221,6 @@
336 })
337 }
338
339-// SSHTimeoutOpts lists the amount of time we will wait for various parts of
340-// the SSH connection to complete. This is similar to DialOpts, see
341-// http://pad.lv/1258889 about possibly deduplicating them.
342-type SSHTimeoutOpts struct {
343- // Timeout is the amount of time to wait contacting
344- // a state server.
345- Timeout time.Duration
346-
347- // ConnectDelay is the amount of time between attempts to connect to an address.
348- ConnectDelay time.Duration
349-
350- // AddressesDelay is the amount of time between refreshing the addresses.
351- AddressesDelay time.Duration
352-}
353-
354-// DefaultBootstrapSSHTimeout is the time we'll wait for SSH to come up on the bootstrap node
355-func DefaultBootstrapSSHTimeout() SSHTimeoutOpts {
356- return SSHTimeoutOpts{
357- Timeout: 10 * time.Minute,
358-
359- ConnectDelay: 5 * time.Second,
360-
361- // Not too frequent, as we refresh addresses from the provider each time.
362- AddressesDelay: 10 * time.Second,
363- }
364-}
365-
366 type addresser interface {
367 // Refresh refreshes the addresses for the instance.
368 Refresh() error
369@@ -377,7 +355,7 @@
370 // the presence of a file on the machine that contains the
371 // machine's nonce. The "checkHostScript" is a bash script
372 // that performs this file check.
373-func waitSSH(ctx environs.BootstrapContext, interrupted <-chan os.Signal, client ssh.Client, checkHostScript string, inst addresser, timeout SSHTimeoutOpts) (addr string, err error) {
374+func waitSSH(ctx environs.BootstrapContext, interrupted <-chan os.Signal, client ssh.Client, checkHostScript string, inst addresser, timeout config.SSHTimeoutOpts) (addr string, err error) {
375 globalTimeout := time.After(timeout.Timeout)
376 pollAddresses := time.NewTimer(0)
377
378@@ -389,7 +367,7 @@
379 client: client,
380 stderr: ctx.Stderr(),
381 active: make(map[instance.Address]chan struct{}),
382- checkDelay: timeout.ConnectDelay,
383+ checkDelay: timeout.RetryDelay,
384 checkHostScript: checkHostScript,
385 }
386 defer checker.Kill()
387
388=== modified file 'provider/common/bootstrap_test.go'
389--- provider/common/bootstrap_test.go 2014-01-28 04:58:43 +0000
390+++ provider/common/bootstrap_test.go 2014-01-30 17:28:09 +0000
391@@ -261,9 +261,9 @@
392 return nil, nil
393 }
394
395-var testSSHTimeout = common.SSHTimeoutOpts{
396+var testSSHTimeout = config.SSHTimeoutOpts{
397 Timeout: coretesting.ShortWait,
398- ConnectDelay: 1 * time.Millisecond,
399+ RetryDelay: 1 * time.Millisecond,
400 AddressesDelay: 1 * time.Millisecond,
401 }
402

Subscribers

People subscribed via source and target branches

to status/vote changes: