diff --git a/pkg/proxy/config/file.go b/pkg/proxy/config/file.go index 6ae0a09db8..65a1b9705b 100644 --- a/pkg/proxy/config/file.go +++ b/pkg/proxy/config/file.go @@ -77,35 +77,38 @@ func (impl ConfigSourceFile) Run() { data, err := ioutil.ReadFile(impl.filename) if err != nil { glog.Errorf("Couldn't read file: %s : %v", impl.filename, err) - } else { - var config ConfigFile - err = json.Unmarshal(data, &config) - if err != nil { - glog.Errorf("Couldn't unmarshal configuration from file : %s %v", data, err) - } else { - if !bytes.Equal(lastData, data) { - lastData = data - // Ok, we have a valid configuration, send to channel for - // rejiggering. - newServices := make([]api.Service, len(config.Services)) - newEndpoints := make([]api.Endpoints, len(config.Services)) - for i, service := range config.Services { - newServices[i] = api.Service{JSONBase: api.JSONBase{ID: service.Name}, Port: service.Port} - newEndpoints[i] = api.Endpoints{Name: service.Name, Endpoints: service.Endpoints} - } - if !reflect.DeepEqual(lastServices, newServices) { - serviceUpdate := ServiceUpdate{Op: SET, Services: newServices} - impl.serviceChannel <- serviceUpdate - lastServices = newServices - } - if !reflect.DeepEqual(lastEndpoints, newEndpoints) { - endpointsUpdate := EndpointsUpdate{Op: SET, Endpoints: newEndpoints} - impl.endpointsChannel <- endpointsUpdate - lastEndpoints = newEndpoints - } - } - } + continue } + + if bytes.Equal(lastData, data) { + continue + } + lastData = data + + config := new(ConfigFile) + if err = json.Unmarshal(data, config); err != nil { + glog.Errorf("Couldn't unmarshal configuration from file : %s %v", data, err) + continue + } + // Ok, we have a valid configuration, send to channel for + // rejiggering. + newServices := make([]api.Service, len(config.Services)) + newEndpoints := make([]api.Endpoints, len(config.Services)) + for i, service := range config.Services { + newServices[i] = api.Service{JSONBase: api.JSONBase{ID: service.Name}, Port: service.Port} + newEndpoints[i] = api.Endpoints{Name: service.Name, Endpoints: service.Endpoints} + } + if !reflect.DeepEqual(lastServices, newServices) { + serviceUpdate := ServiceUpdate{Op: SET, Services: newServices} + impl.serviceChannel <- serviceUpdate + lastServices = newServices + } + if !reflect.DeepEqual(lastEndpoints, newEndpoints) { + endpointsUpdate := EndpointsUpdate{Op: SET, Endpoints: newEndpoints} + impl.endpointsChannel <- endpointsUpdate + lastEndpoints = newEndpoints + } + time.Sleep(5 * time.Second) } }