Merge lp:~chipaca/ubuntu-push/auto-retry into lp:ubuntu-push

Proposed by John Lenton
Status: Merged
Approved by: John Lenton
Approved revision: 30
Merged at revision: 30
Proposed branch: lp:~chipaca/ubuntu-push/auto-retry
Merge into: lp:ubuntu-push
Diff against target: 88 lines (+34/-7)
2 files modified
util/redialer.go (+12/-6)
util/redialer_test.go (+22/-1)
To merge this branch: bzr merge lp:~chipaca/ubuntu-push/auto-retry
Reviewer Review Type Date Requested Status
Samuele Pedroni Approve
Review via email: mp+203640@code.launchpad.net

Commit message

Introducing AutoRetry, a generic AutoRetry.

Description of the change

Introducing AutoRetry, a generic AutoRetry.

To post a comment you must log in.
Revision history for this message
Samuele Pedroni (pedronis) wrote :

TestCanBeStopped has some problem, it passes even with:

- quitRedialing <- true
+ //quitRedialing <- true

review: Needs Information
Revision history for this message
John Lenton (chipaca) wrote :

That test is ... braindead. Sorry. Fixed.

Revision history for this message
Samuele Pedroni (pedronis) wrote :

good

review: Approve
Revision history for this message
Ubuntu One Auto Pilot (otto-pilot) wrote :

The attempt to merge lp:~chipaca/ubuntu-push/auto-retry into lp:ubuntu-push failed. Below is the output from the failed tests.

mkdir -p /mnt/tarmac/cache/ubuntu-push/go-ws/bin
mkdir -p /mnt/tarmac/cache/ubuntu-push/go-ws/pkg
go get -u launchpad.net/godeps
go get -d -u launchpad.net/gocheck launchpad.net/go-dbus/v1
/mnt/tarmac/cache/ubuntu-push/go-ws/bin/godeps -u dependencies.tsv
"/mnt/tarmac/cache/ubuntu-push/go-ws/src/launchpad.net/gocheck" now at <email address hidden>
go install launchpad.net/gocheck launchpad.net/go-dbus/v1
go test launchpad.net/ubuntu-push/...
ok launchpad.net/ubuntu-push/bus 0.840s

----------------------------------------------------------------------
FAIL: connectivity_test.go:183: ConnSuite.TestRun

connectivity_test.go:219:
    c.Fatalf("Timed out before getting value (#%d)", i+1)
... Error: Timed out before getting value (#2)

OOPS: 9 passed, 1 FAILED
--- FAIL: Test (1.91 seconds)
FAIL
FAIL launchpad.net/ubuntu-push/bus/connectivity 2.448s
ok launchpad.net/ubuntu-push/bus/networkmanager 0.751s
ok launchpad.net/ubuntu-push/bus/notifications 1.620s
ok launchpad.net/ubuntu-push/bus/testing 0.564s
ok launchpad.net/ubuntu-push/bus/urldispatcher 1.185s
ok launchpad.net/ubuntu-push/config 1.992s
ok launchpad.net/ubuntu-push/logger 0.624s
ok launchpad.net/ubuntu-push/protocol 2.764s
ok launchpad.net/ubuntu-push/server 3.324s
ok launchpad.net/ubuntu-push/server/acceptance 1.476s
? launchpad.net/ubuntu-push/server/acceptance/cmd [no test files]
ok launchpad.net/ubuntu-push/server/api 1.294s
ok launchpad.net/ubuntu-push/server/broker 0.396s
ok launchpad.net/ubuntu-push/server/broker/simple 0.032s
? launchpad.net/ubuntu-push/server/broker/testing [no test files]
? launchpad.net/ubuntu-push/server/broker/testsuite [no test files]
? launchpad.net/ubuntu-push/server/dev [no test files]
ok launchpad.net/ubuntu-push/server/listener 7.922s

----------------------------------------------------------------------
FAIL: session_test.go:412: sessionSuite.TestSessionLoopExchangeNextPing

session_test.go:430:
    c.Check(time.Since(tack) < (3+5)*time.Millisecond, Equals, true)
... obtained bool = false
... expected bool = true

OOPS: 22 passed, 1 FAILED
--- FAIL: TestSession (0.93 seconds)
FAIL
FAIL launchpad.net/ubuntu-push/server/session 1.015s
ok launchpad.net/ubuntu-push/server/store 0.398s
? launchpad.net/ubuntu-push/testing [no test files]
ok launchpad.net/ubuntu-push/testing/condition 0.026s
ok launchpad.net/ubuntu-push/util 1.296s
ok launchpad.net/ubuntu-push/whoopsie/identifier 1.763s
ok launchpad.net/ubuntu-push/whoopsie/identifier/testing 0.971s

make: *** [check] Error 1

Revision history for this message
Ubuntu One Auto Pilot (otto-pilot) wrote :

The attempt to merge lp:~chipaca/ubuntu-push/auto-retry into lp:ubuntu-push failed. Below is the output from the failed tests.

mkdir -p /mnt/tarmac/cache/ubuntu-push/go-ws/bin
mkdir -p /mnt/tarmac/cache/ubuntu-push/go-ws/pkg
go get -u launchpad.net/godeps
go get -d -u launchpad.net/gocheck launchpad.net/go-dbus/v1
/mnt/tarmac/cache/ubuntu-push/go-ws/bin/godeps -u dependencies.tsv
"/mnt/tarmac/cache/ubuntu-push/go-ws/src/launchpad.net/gocheck" now at <email address hidden>
go install launchpad.net/gocheck launchpad.net/go-dbus/v1
go test launchpad.net/ubuntu-push/...
ok launchpad.net/ubuntu-push/bus 0.313s

----------------------------------------------------------------------
FAIL: connectivity_test.go:183: ConnSuite.TestRun

connectivity_test.go:219:
    c.Fatalf("Timed out before getting value (#%d)", i+1)
... Error: Timed out before getting value (#2)

OOPS: 9 passed, 1 FAILED
--- FAIL: Test (0.95 seconds)
FAIL
FAIL launchpad.net/ubuntu-push/bus/connectivity 2.029s
ok launchpad.net/ubuntu-push/bus/networkmanager 1.063s
ok launchpad.net/ubuntu-push/bus/notifications 1.117s
ok launchpad.net/ubuntu-push/bus/testing 1.274s
ok launchpad.net/ubuntu-push/bus/urldispatcher 0.504s
ok launchpad.net/ubuntu-push/config 3.014s
ok launchpad.net/ubuntu-push/logger 2.123s
ok launchpad.net/ubuntu-push/protocol 2.831s
ok launchpad.net/ubuntu-push/server 4.244s
ok launchpad.net/ubuntu-push/server/acceptance 1.392s
? launchpad.net/ubuntu-push/server/acceptance/cmd [no test files]
ok launchpad.net/ubuntu-push/server/api 3.382s
ok launchpad.net/ubuntu-push/server/broker 3.287s
ok launchpad.net/ubuntu-push/server/broker/simple 2.592s
? launchpad.net/ubuntu-push/server/broker/testing [no test files]
? launchpad.net/ubuntu-push/server/broker/testsuite [no test files]
? launchpad.net/ubuntu-push/server/dev [no test files]
ok launchpad.net/ubuntu-push/server/listener 22.787s

----------------------------------------------------------------------
FAIL: session_test.go:412: sessionSuite.TestSessionLoopExchangeNextPing

session_test.go:430:
    c.Check(time.Since(tack) < (3+5)*time.Millisecond, Equals, true)
... obtained bool = false
... expected bool = true

OOPS: 22 passed, 1 FAILED
--- FAIL: TestSession (1.30 seconds)
FAIL
FAIL launchpad.net/ubuntu-push/server/session 2.018s
ok launchpad.net/ubuntu-push/server/store 0.340s
? launchpad.net/ubuntu-push/testing [no test files]
ok launchpad.net/ubuntu-push/testing/condition 4.400s
ok launchpad.net/ubuntu-push/util 2.759s
ok launchpad.net/ubuntu-push/whoopsie/identifier 1.296s
ok launchpad.net/ubuntu-push/whoopsie/identifier/testing 0.348s

make: *** [check] Error 1

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'util/redialer.go'
2--- util/redialer.go 2014-01-27 13:02:26 +0000
3+++ util/redialer.go 2014-01-29 11:42:44 +0000
4@@ -49,15 +49,14 @@
5 return time.Duration(rand.Int63n(2*n+1) - n)
6 }
7
8-// AutoRedialer takes a Dialer and retries its Dial() method until it
9-// stops returning an error. It does exponential (optionally
10-// jitter'ed) backoff.
11-func AutoRedial(dialer Dialer) uint32 {
12+// AutoRetry keeps on calling f() until it stops returning an error.
13+// It does exponential backoff, adding jitter at each step back.
14+func AutoRetry(f func() error, jitter func(time.Duration) time.Duration) uint32 {
15 var timeout time.Duration
16 var dialAttempts uint32 = 0 // unsigned so it can wrap safely ...
17 var numTimeouts uint32 = uint32(len(Timeouts))
18 for {
19- if dialer.Dial() == nil {
20+ if f() == nil {
21 return dialAttempts + 1
22 }
23 if dialAttempts < numTimeouts {
24@@ -65,7 +64,7 @@
25 } else {
26 timeout = Timeouts[numTimeouts-1]
27 }
28- timeout += dialer.Jitter(timeout)
29+ timeout += jitter(timeout)
30 dialAttempts++
31 select {
32 case <-quitRedialing:
33@@ -75,6 +74,13 @@
34 }
35 }
36
37+// AutoRedialer takes a Dialer and retries its Dial() method until it
38+// stops returning an error. It does exponential (optionally
39+// jitter'ed) backoff.
40+func AutoRedial(dialer Dialer) uint32 {
41+ return AutoRetry(dialer.Dial, dialer.Jitter)
42+}
43+
44 func init() {
45 ps := []int{1, 2, 5, 11, 19, 37, 67, 113, 191} // 3 pₙ₊₁ ≥ 5 pₙ
46 Timeouts = make([]time.Duration, len(ps))
47
48=== modified file 'util/redialer_test.go'
49--- util/redialer_test.go 2014-01-27 12:41:54 +0000
50+++ util/redialer_test.go 2014-01-29 11:42:44 +0000
51@@ -17,6 +17,7 @@
52 package util
53
54 import (
55+ "errors"
56 "io/ioutil"
57 . "launchpad.net/gocheck"
58 testibus "launchpad.net/ubuntu-push/bus/testing"
59@@ -54,8 +55,28 @@
60
61 func (s *RedialerSuite) TestCanBeStopped(c *C) {
62 endp := testibus.NewTestingEndpoint(condition.Work(false), nil)
63- go func() { c.Check(AutoRedial(endp), Equals, uint32(1)) }()
64+ ch := make(chan uint32)
65+ go func() { ch <- AutoRedial(endp) }()
66 quitRedialing <- true
67+ select {
68+ case n := <-ch:
69+ c.Check(n, Equals, uint32(1))
70+ case <-time.Tick(20 * time.Millisecond):
71+ c.Fatal("timed out waiting for redial")
72+ }
73+}
74+
75+func (s *RedialerSuite) TestAutoRetry(c *C) {
76+ cond := condition.Fail2Work(5)
77+ f := func() error {
78+ if cond.OK() {
79+ return nil
80+ } else {
81+ return errors.New("X")
82+ }
83+ }
84+ jitter := func(time.Duration) time.Duration { return 0 }
85+ c.Check(AutoRetry(f, jitter), Equals, uint32(6))
86 }
87
88 func (s *RedialerSuite) TestJitter(c *C) {

Subscribers

People subscribed via source and target branches