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  }