Add RunUntil to the Reflector and Poller to allow early termination

This is useful for test suites where you want to kill your workers
without having to run one test env per execution.
This commit is contained in:
Clayton Coleman 2015-01-21 18:25:54 -05:00
parent 6ff26d924c
commit f2d966859d
2 changed files with 22 additions and 8 deletions

View File

@ -57,14 +57,22 @@ func NewPoller(getFunc GetFunc, period time.Duration, store Store) *Poller {
// Run begins polling. It starts a goroutine and returns immediately.
func (p *Poller) Run() {
go util.Forever(func() {
go util.Forever(p.run, p.period)
}
// RunUntil begins polling. It starts a goroutine and returns immediately.
// It will stop when the stopCh is closed.
func (p *Poller) RunUntil(stopCh <-chan struct{}) {
go util.Until(p.run, p.period, stopCh)
}
func (p *Poller) run() {
e, err := p.getFunc()
if err != nil {
glog.Errorf("failed to list: %v", err)
return
}
p.sync(e)
}, p.period)
}
func (p *Poller) sync(e Enumerator) {

View File

@ -72,6 +72,12 @@ func (r *Reflector) Run() {
go util.Forever(func() { r.listAndWatch() }, r.period)
}
// RunUntil starts a watch and handles watch events. Will restart the watch if it is closed.
// RunUntil starts a goroutine and returns immediately. It will exit when stopCh is closed.
func (r *Reflector) RunUntil(stopCh <-chan struct{}) {
go util.Until(func() { r.listAndWatch() }, r.period, stopCh)
}
func (r *Reflector) listAndWatch() {
var resourceVersion string