diff --git a/pkg/client/cache/reflector.go b/pkg/client/cache/reflector.go index b360699a6ce..772fe0b8e83 100644 --- a/pkg/client/cache/reflector.go +++ b/pkg/client/cache/reflector.go @@ -19,6 +19,7 @@ package cache import ( "errors" "fmt" + "io" "reflect" "time" @@ -99,7 +100,14 @@ func (r *Reflector) listAndWatch() { for { w, err := r.listerWatcher.Watch(resourceVersion) if err != nil { - glog.Errorf("failed to watch %v: %v", r.expectedType, err) + switch err { + case io.EOF: + // watch closed normally + case io.ErrUnexpectedEOF: + glog.V(1).Infof("Watch for %v closed with unexpected EOF: %v", r.expectedType, err) + default: + glog.Errorf("Failed to watch %v: %v", r.expectedType, err) + } return } if err := r.watchHandler(w, &resourceVersion); err != nil { @@ -167,6 +175,6 @@ func (r *Reflector) watchHandler(w watch.Interface, resourceVersion *string) err glog.Errorf("unexpected watch close - watch lasted less than a second and no items received") return errors.New("very short watch") } - glog.V(4).Infof("watch close - %v total items received", eventCount) + glog.V(4).Infof("Watch close - %v total %v items received", r.expectedType, eventCount) return nil } diff --git a/pkg/watch/iowatcher.go b/pkg/watch/iowatcher.go index bb6621c56f2..35bf7608457 100644 --- a/pkg/watch/iowatcher.go +++ b/pkg/watch/iowatcher.go @@ -84,7 +84,12 @@ func (sw *StreamWatcher) receive() { for { action, obj, err := sw.source.Decode() if err != nil { - if err != io.EOF { + switch err { + case io.EOF: + // watch closed normally + case io.ErrUnexpectedEOF: + glog.V(1).Infof("Unexpected EOF during watch stream event decoding: %v", err) + default: glog.Errorf("Unable to decode an event from the watch stream: %v", err) } return