Address comments: watch.Until return private error errWatchClosed on channel closed

This commit is contained in:
Janet Kuo 2017-02-08 10:22:08 -08:00
parent 51c7570ae1
commit 5a7929dc2d
2 changed files with 5 additions and 4 deletions

View File

@ -129,9 +129,6 @@ func Jitter(duration time.Duration, maxFactor float64) time.Duration {
// ErrWaitTimeout is returned when the condition exited without success. // ErrWaitTimeout is returned when the condition exited without success.
var ErrWaitTimeout = errors.New("timed out waiting for the condition") var ErrWaitTimeout = errors.New("timed out waiting for the condition")
// ErrChannelClosed is returned when the watch channel is closed.
var ErrChannelClosed = errors.New("watch channel closed")
// ConditionFunc returns true if the condition is satisfied, or an error // ConditionFunc returns true if the condition is satisfied, or an error
// if the loop should be aborted. // if the loop should be aborted.
type ConditionFunc func() (done bool, err error) type ConditionFunc func() (done bool, err error)

View File

@ -17,6 +17,7 @@ limitations under the License.
package watch package watch
import ( import (
"errors"
"time" "time"
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
@ -28,6 +29,9 @@ import (
// from false to true). // from false to true).
type ConditionFunc func(event Event) (bool, error) type ConditionFunc func(event Event) (bool, error)
// errWatchClosed is returned when the watch channel is closed before timeout in Until.
var errWatchClosed = errors.New("watch closed before Until timeout")
// Until reads items from the watch until each provided condition succeeds, and then returns the last watch // Until reads items from the watch until each provided condition succeeds, and then returns the last watch
// encountered. The first condition that returns an error terminates the watch (and the event is also returned). // encountered. The first condition that returns an error terminates the watch (and the event is also returned).
// If no event has been received, the returned event will be nil. // If no event has been received, the returned event will be nil.
@ -61,7 +65,7 @@ func Until(timeout time.Duration, watcher Interface, conditions ...ConditionFunc
select { select {
case event, ok := <-ch: case event, ok := <-ch:
if !ok { if !ok {
return lastEvent, wait.ErrChannelClosed return lastEvent, errWatchClosed
} }
lastEvent = &event lastEvent = &event