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:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user