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  }