Merge lp:~axwalk/juju-core/initiate-replicaset-retry into lp:~go-bot/juju-core/trunk
Proposed by
Andrew Wilkins
Status: | Merged |
---|---|
Approved by: | Andrew Wilkins |
Approved revision: | no longer in the source branch. |
Merged at revision: | 2810 |
Proposed branch: | lp:~axwalk/juju-core/initiate-replicaset-retry |
Merge into: | lp:~go-bot/juju-core/trunk |
Diff against target: |
109 lines (+44/-23) 2 files modified
replicaset/replicaset.go (+6/-3) worker/peergrouper/initiate.go (+38/-20) |
To merge this branch: | bzr merge lp:~axwalk/juju-core/initiate-replicaset-retry |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Juju Engineering | Pending | ||
Review via email: mp+221475@code.launchpad.net |
Commit message
Retry replicaset.Initiate
Another attempt at retrying replicaset
initiation. The change I made in
https:/
does not work well, as the error from
replSetInitiate may be spurious; it is
possible to receive an error despite the
config being written.
Description of the change
Retry replicaset.Initiate
Another attempt at retrying replicaset
initiation. The change I made in
https:/
does not work well, as the error from
replSetInitiate may be spurious; it is
possible to receive an error despite the
config being written.
To post a comment you must log in.
Reviewers: mp+221475_ code.launchpad. net,
Message:
Please take a look.
Description:
Retry replicaset.Initiate
Another attempt at retrying replicaset /codereview. appspot. com/98670045/
initiation. The change I made in
https:/
does not work well, as the error from
replSetInitiate may be spurious; it is
possible to receive an error despite the
config being written.
https:/ /code.launchpad .net/~axwalk/ juju-core/ initiate- replicaset- retry/+ merge/221475
(do not edit description out of merge proposal)
Please review this at https:/ /codereview. appspot. com/102000044/
Affected files (+46, -23 lines): replicaset. go peergrouper/ initiate. go
A [revision details]
M replicaset/
M worker/
Index: [revision details] 20140529113014- rt0lph0bic0c117 z
=== added file '[revision details]'
--- [revision details] 2012-01-01 00:00:00 +0000
+++ [revision details] 2012-01-01 00:00:00 +0000
@@ -0,0 +1,2 @@
+Old revision: tarmac-
+New revision: <email address hidden>
Index: replicaset/ replicaset. go replicaset. go' replicaset. go 2014-05-29 10:26:02 +0000 replicaset. go 2014-05-30 00:31:44 +0000 Delay is the amount of time to sleep between failed mptDelay = 100 * time.Millisecond hableError is the error message returned from mongo hableError = "all members and seeds must be reachable to
=== modified file 'replicaset/
--- replicaset/
+++ replicaset/
@@ -22,6 +22,11 @@
// initiateAttempt
// attempts to replSetInitiate.
initiateAtte
+
+ // rsMembersUnreac
+ // when it thinks that replicaset members are unreachable. This can
+ // occur if replSetInitiate is executed shortly after starting up mongo.
+ rsMembersUnreac
initiate set"
)
var logger = loggo.GetLogger ("juju. replicaset" ) Infof(" Initiating replicaset with config %#v", cfg) mpts; i++ { n.Refresh( ) n.Run(bson. D{{"replSetInit iate", cfg}}, nil) Debugf( "replSetInitiat e failed: %v", err) hableError { Sleep(initiateA ttemptDelay)
@@ -52,10 +57,8 @@
logger.
var err error
for i := 0; i < maxInitiateAtte
- monotonicSessio
err = monotonicSessio
- if err != nil {
- logger.
+ if err != nil && err.Error() == rsMembersUnreac
time.
continue
}
Index: worker/ peergrouper/ initiate. go peergrouper/ initiate. go' peergrouper/ initiate. go 2014-04-18 04:39:58 +0000 peergrouper/ initiate. go 2014-05-30 00:31:44 +0000
=== modified file 'worker/
--- worker/
+++ worker/
@@ -5,14 +5,21 @@
import (
"fmt"
+ "time"
"labix. org/v2/ mgo"
"launchpad. net/juju- core/agent" net/juju- core/agent/ mongo" net/juju- core/replicaset " net/juju- core/utils"
"launchpad.
"launchpad.
+ "launchpad.
)
+var initiateAttempt Strategy = utils.AttemptSt rategy{
+ Total: 30 * time.Second,
+ Delay: 1 * time.Second,
+}
+
// InitiateMongoParams holds parameters for the MaybeInitiateMongo call.
type InitiateMongoParams struct {
// DialInfo specifies how to connect to the mongo server.
@@ -53,24 +60,35 @@
}
defer session.Close()
- cfg, err := replicaset. CurrentConfig( session) Infof(" replica set configuration already found: %#v", cfg)
- if err == nil && len(cfg.Members) > 0 {
- logger.
- return nil
- }
- if err != nil && err != mgo.ErrNotFound {
- return fmt.Errorf("cannot get replica ...