1
// Copyright 2016 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
"github.com/juju/errors"
9
"github.com/juju/juju/state"
10
"github.com/juju/juju/worker"
11
"github.com/juju/juju/worker/dependency"
12
workerstate "github.com/juju/juju/worker/state"
15
// StateWorkersConfig provides the dependencies for the
16
// stateworkers manifold.
17
type StateWorkersConfig struct {
19
StartStateWorkers func(*state.State) (worker.Worker, error)
22
// StateWorkersManifold starts workers that rely on a *state.State
23
// using a function provided to it.
25
// This manifold exists to start State-using workers which have not
26
// yet been ported to work directly with the dependency engine. Once
27
// all state workers started by StartStateWorkers have been migrated
28
// to the dependency engine, this manifold can be removed.
29
func StateWorkersManifold(config StateWorkersConfig) dependency.Manifold {
30
return dependency.Manifold{
34
Start: func(getResource dependency.GetResourceFunc) (worker.Worker, error) {
35
if config.StartStateWorkers == nil {
36
return nil, errors.New("StartStateWorkers not specified")
39
var stTracker workerstate.StateTracker
40
if err := getResource(config.StateName, &stTracker); err != nil {
44
st, err := stTracker.Use()
46
return nil, errors.Annotate(err, "acquiring state")
49
w, err := config.StartStateWorkers(st)
52
return nil, errors.Annotate(err, "worker startup")
55
// When the state workers are done, indicate that we no
56
// longer need the State.