github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/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/api/watcher" 10 "github.com/juju/juju/worker" 11 ) 12 13 var logger = loggo.GetLogger("juju.worker.cleaner") 14 15 type StateCleaner interface { 16 Cleanup() error 17 WatchCleanups() (watcher.NotifyWatcher, error) 18 } 19 20 // Cleaner is responsible for cleaning up the state. 21 type Cleaner struct { 22 st StateCleaner 23 } 24 25 // NewCleaner returns a worker.Worker that runs state.Cleanup() 26 // if the CleanupWatcher signals documents marked for deletion. 27 func NewCleaner(st StateCleaner) worker.Worker { 28 return worker.NewNotifyWorker(&Cleaner{st}) 29 } 30 31 func (c *Cleaner) SetUp() (watcher.NotifyWatcher, error) { 32 return c.st.WatchCleanups() 33 } 34 35 func (c *Cleaner) Handle(_ <-chan struct{}) error { 36 if err := c.st.Cleanup(); err != nil { 37 logger.Errorf("cannot cleanup state: %v", err) 38 } 39 // We do not return the err from Cleanup, because we don't want to stop 40 // the loop as a failure 41 return nil 42 } 43 44 func (c *Cleaner) TearDown() error { 45 // Nothing to cleanup, only state is the watcher 46 return nil 47 }