8
9
"launchpad.net/juju-core/log"
9
10
"launchpad.net/juju-core/state"
10
"launchpad.net/juju-core/state/watcher"
11
"launchpad.net/juju-core/state/api/params"
12
"launchpad.net/juju-core/worker"
14
15
// Cleaner is responsible for cleaning up the state.
15
16
type Cleaner struct {
20
// NewCleaner returns a Cleaner that runs state.Cleanup()
20
// NewCleaner returns a worker.NotifyWorker that runs state.Cleanup()
21
21
// if the CleanupWatcher signals documents marked for deletion.
22
func NewCleaner(st *state.State) *Cleaner {
22
func NewCleaner(st *state.State) worker.NotifyWorker {
23
return worker.NewNotifyWorker(&Cleaner{st: st})
31
26
func (c *Cleaner) String() string {
32
27
return fmt.Sprintf("cleaner")
35
func (c *Cleaner) Kill() {
39
func (c *Cleaner) Stop() error {
44
func (c *Cleaner) Wait() error {
48
func (c *Cleaner) loop() error {
49
w := c.st.WatchCleanups()
50
defer watcher.Stop(w, &c.tomb)
54
case <-c.tomb.Dying():
56
case _, ok := <-w.Changes():
58
return watcher.MustErr(w)
60
if err := c.st.Cleanup(); err != nil {
61
log.Errorf("worker/cleaner: cannot cleanup state: %v", err)
30
func (c *Cleaner) SetUp() (params.NotifyWatcher, error) {
31
return c.st.WatchCleanups(), nil
34
func (c *Cleaner) Handle() error {
35
if err := c.st.Cleanup(); err != nil {
36
log.Errorf("worker/cleaner: cannot cleanup state: %v", err)
38
// We do not return the err from Cleanup, because we don't want to stop
39
// the loop as a failure
43
func (c *Cleaner) TearDown() error {
44
// Nothing to cleanup, only state is the watcher