resources: Clean up converger and make it easier for tests

This cleans up the resource converger code slightly and makes it easier
to write resource specific test cases.
This commit is contained in:
James Shubin
2017-06-02 01:15:25 -04:00
parent 0545c4167b
commit d4e815a4cb

View File

@@ -189,7 +189,6 @@ type Base interface {
Update(*pgraph.Graph) Update(*pgraph.Graph)
Reset() Reset()
Exit() Exit()
Converger() converger.Converger
GetState() ResState GetState() ResState
SetState(ResState) SetState(ResState)
Timestamp() int64 Timestamp() int64
@@ -258,7 +257,6 @@ type BaseRes struct {
processChan chan *event.Event // chan that resources send events to processChan chan *event.Event // chan that resources send events to
processSync *sync.WaitGroup // blocks until the innerWorker closes processSync *sync.WaitGroup // blocks until the innerWorker closes
converger converger.Converger // converged tracking
cuid converger.UID cuid converger.UID
wcuid converger.UID wcuid converger.UID
pcuid converger.UID pcuid converger.UID
@@ -360,9 +358,11 @@ func (obj *BaseRes) Init() error {
return fmt.Errorf("resource did not set kind") return fmt.Errorf("resource did not set kind")
} }
obj.cuid = obj.Converger().Register() if converger := obj.Data().Converger; converger != nil {
obj.wcuid = obj.Converger().Register() // get a cuid for the worker! obj.cuid = converger.Register()
obj.pcuid = obj.Converger().Register() // get a cuid for the process obj.wcuid = converger.Register() // get a cuid for the worker!
obj.pcuid = converger.Register() // get a cuid for the process
}
obj.processLock = &sync.Mutex{} // lock around processChan closing and sending obj.processLock = &sync.Mutex{} // lock around processChan closing and sending
obj.processDone = false // did we close processChan ? obj.processDone = false // did we close processChan ?
@@ -406,9 +406,11 @@ func (obj *BaseRes) Close() error {
log.Printf("%s: Close()", obj) log.Printf("%s: Close()", obj)
} }
if converger := obj.Data().Converger; converger != nil {
obj.pcuid.Unregister() obj.pcuid.Unregister()
obj.wcuid.Unregister() obj.wcuid.Unregister()
obj.cuid.Unregister() obj.cuid.Unregister()
}
//obj.working = false // Worker method should now be closing... //obj.working = false // Worker method should now be closing...
close(obj.stopped) close(obj.stopped)
@@ -505,12 +507,6 @@ func (obj *BaseRes) Exit() {
obj.waitGroup.Wait() obj.waitGroup.Wait()
} }
// Converger returns the converger object used by the system. It can be used to
// register new convergers if needed.
func (obj *BaseRes) Converger() converger.Converger {
return obj.data.Converger
}
// GetState returns the state of the resource. // GetState returns the state of the resource.
func (obj *BaseRes) GetState() ResState { func (obj *BaseRes) GetState() ResState {
return obj.state return obj.state