// run loops forever looking for changes to endpoints. func (s *endpointsReflector) run(resourceVersion *string) { if len(*resourceVersion) == 0 { endpoints, err := s.watcher.List(labels.Everything()) if err != nil { glog.Errorf("Unable to load endpoints: %v", err) time.Sleep(wait.Jitter(s.waitDuration, 0.0)) return } *resourceVersion = endpoints.ResourceVersion s.endpoints <- EndpointsUpdate{Op: SET, Endpoints: endpoints.Items} } watcher, err := s.watcher.Watch(labels.Everything(), fields.Everything(), *resourceVersion) if err != nil { glog.Errorf("Unable to watch for endpoints changes: %v", err) if !client.IsTimeout(err) { // Reset so that we do a fresh get request *resourceVersion = "" } time.Sleep(wait.Jitter(s.waitDuration, 0.0)) return } defer watcher.Stop() ch := watcher.ResultChan() s.watchHandler(resourceVersion, ch, s.endpoints) }
// run loops forever looking for changes to services. func (s *servicesReflector) run(resourceVersion *string) { if len(*resourceVersion) == 0 { services, err := s.watcher.List(labels.Everything()) if err != nil { glog.Errorf("Unable to load services: %v", err) // TODO: reconcile with pkg/client/cache which doesn't use reflector. time.Sleep(wait.Jitter(s.waitDuration, 0.0)) return } *resourceVersion = services.ResourceVersion // TODO: replace with code to update the s.services <- ServiceUpdate{Op: SET, Services: services.Items} } watcher, err := s.watcher.Watch(labels.Everything(), fields.Everything(), *resourceVersion) if err != nil { glog.Errorf("Unable to watch for services changes: %v", err) if !client.IsTimeout(err) { // Reset so that we do a fresh get request *resourceVersion = "" } time.Sleep(wait.Jitter(s.waitDuration, 0.0)) return } defer watcher.Stop() ch := watcher.ResultChan() s.watchHandler(resourceVersion, ch, s.services) }
func (r *endpointsReflector) listAndWatch() { r.run(&r.resourceVersion) time.Sleep(wait.Jitter(r.reconnectDuration, 0.0)) }