github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/state/workers.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package state 5 6 import ( 7 "time" 8 9 "github.com/juju/errors" 10 "github.com/juju/utils/clock" 11 12 "github.com/juju/juju/state/presence" 13 "github.com/juju/juju/state/watcher" 14 "github.com/juju/juju/state/workers" 15 "github.com/juju/juju/worker/lease" 16 ) 17 18 type workersFactory struct { 19 st *State 20 clock clock.Clock 21 } 22 23 func (wf workersFactory) NewTxnLogWorker() (workers.TxnLogWorker, error) { 24 coll := wf.st.getTxnLogCollection() 25 worker := watcher.New(coll) 26 return worker, nil 27 } 28 29 func (wf workersFactory) NewPresenceWorker() (workers.PresenceWorker, error) { 30 coll := wf.st.getPresenceCollection() 31 worker := presence.NewWatcher(coll, wf.st.ModelTag()) 32 return worker, nil 33 } 34 35 func (wf workersFactory) NewLeadershipWorker() (workers.LeaseWorker, error) { 36 client, err := wf.st.getLeadershipLeaseClient() 37 if err != nil { 38 return nil, errors.Trace(err) 39 } 40 manager, err := lease.NewManager(lease.ManagerConfig{ 41 Secretary: leadershipSecretary{}, 42 Client: client, 43 Clock: wf.clock, 44 MaxSleep: time.Minute, 45 }) 46 if err != nil { 47 return nil, errors.Trace(err) 48 } 49 return manager, nil 50 } 51 52 func (wf workersFactory) NewSingularWorker() (workers.LeaseWorker, error) { 53 client, err := wf.st.getSingularLeaseClient() 54 if err != nil { 55 return nil, errors.Trace(err) 56 } 57 manager, err := lease.NewManager(lease.ManagerConfig{ 58 Secretary: singularSecretary{wf.st.ModelUUID()}, 59 Client: client, 60 Clock: wf.clock, 61 MaxSleep: time.Minute, 62 }) 63 if err != nil { 64 return nil, errors.Trace(err) 65 } 66 return manager, nil 67 }