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  }