func changeVotes(c *gc.C, insts []*gitjujutesting.MgoInstance, voteId int) { c.Logf("changing voting id to %v", voteId) addrs := make([]string, len(insts)) for i, inst := range insts { addrs[i] = inst.Addr() } dialInfo := gitjujutesting.MgoDialInfo(coretesting.Certs, addrs...) session, err := mgo.DialWithInfo(dialInfo) c.Assert(err, jc.ErrorIsNil) defer session.Close() members, err := replicaset.CurrentMembers(session) c.Assert(err, jc.ErrorIsNil) c.Assert(members, gc.HasLen, len(insts)) for i := range members { member := &members[i] if member.Id == voteId { member.Priority = nil } else { member.Priority = newFloat64(0.1) } } c.Logf("new member set: %#v", members) err = replicaset.Set(session, members) c.Assert(err, jc.ErrorIsNil) c.Logf("successfully changed replica set members") }
func (a *agent) mongoWorker() (worker.Worker, error) { dialInfo := gitjujutesting.MgoDialInfo(coretesting.Certs, a.hostPort) session, err := mgo.DialWithInfo(dialInfo) if err != nil { return nil, err } mc := &mongoConn{ localHostPort: a.hostPort, session: session, } fn := func(err0, err1 error) bool { return true } runner := worker.NewRunner(connectionIsFatal(mc), fn, worker.RestartDelay) singularRunner, err := singular.New(runner, mc) if err != nil { return nil, fmt.Errorf("cannot start singular runner: %v", err) } a.notify.workerConnected() singularRunner.StartWorker(fmt.Sprint("worker-", a.notify.id), func() (worker.Worker, error) { return worker.NewSimpleWorker(func(stop <-chan struct{}) error { return a.worker(session, stop) }), nil }) return runner, nil }