github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/worker/cleaner/cleaner.go (about) 1 // Copyright 2012, 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package cleaner 5 6 import ( 7 "github.com/juju/loggo" 8 9 "github.com/juju/juju/state" 10 "github.com/juju/juju/state/api/watcher" 11 "github.com/juju/juju/worker" 12 ) 13 14 var logger = loggo.GetLogger("juju.worker.cleaner") 15 16 // Cleaner is responsible for cleaning up the state. 17 type Cleaner struct { 18 st *state.State 19 } 20 21 // NewCleaner returns a worker.Worker that runs state.Cleanup() 22 // if the CleanupWatcher signals documents marked for deletion. 23 func NewCleaner(st *state.State) worker.Worker { 24 return worker.NewNotifyWorker(&Cleaner{st: st}) 25 } 26 27 func (c *Cleaner) SetUp() (watcher.NotifyWatcher, error) { 28 return c.st.WatchCleanups(), nil 29 } 30 31 func (c *Cleaner) Handle() error { 32 if err := c.st.Cleanup(); err != nil { 33 logger.Errorf("cannot cleanup state: %v", err) 34 } 35 // We do not return the err from Cleanup, because we don't want to stop 36 // the loop as a failure 37 return nil 38 } 39 40 func (c *Cleaner) TearDown() error { 41 // Nothing to cleanup, only state is the watcher 42 return nil 43 }