Use RaceFreeFakeWatcher in federation controllers helper and ingress controller

This commit is contained in:
Marcin Wielgus 2016-10-07 14:41:18 +02:00
parent 46cc47e324
commit e033c5fe7b

View File

@ -37,11 +37,11 @@ import (
// A structure that distributes eventes to multiple watchers. // A structure that distributes eventes to multiple watchers.
type WatcherDispatcher struct { type WatcherDispatcher struct {
sync.Mutex sync.Mutex
watchers []*watch.FakeWatcher watchers []*watch.RaceFreeFakeWatcher
eventsSoFar []*watch.Event eventsSoFar []*watch.Event
} }
func (wd *WatcherDispatcher) register(watcher *watch.FakeWatcher) { func (wd *WatcherDispatcher) register(watcher *watch.RaceFreeFakeWatcher) {
wd.Lock() wd.Lock()
defer wd.Unlock() defer wd.Unlock()
wd.watchers = append(wd.watchers, watcher) wd.watchers = append(wd.watchers, watcher)
@ -50,6 +50,14 @@ func (wd *WatcherDispatcher) register(watcher *watch.FakeWatcher) {
} }
} }
func (wd *WatcherDispatcher) Stop() {
wd.Lock()
defer wd.Unlock()
for _, watcher := range wd.watchers {
watcher.Stop()
}
}
func copy(obj runtime.Object) runtime.Object { func copy(obj runtime.Object) runtime.Object {
objCopy, err := api.Scheme.DeepCopy(obj) objCopy, err := api.Scheme.DeepCopy(obj)
if err != nil { if err != nil {
@ -126,12 +134,12 @@ func (wd *WatcherDispatcher) Action(action watch.EventType, obj runtime.Object)
// All subsequent requests for a watch on the client will result in returning this fake watcher. // All subsequent requests for a watch on the client will result in returning this fake watcher.
func RegisterFakeWatch(resource string, client *core.Fake) *WatcherDispatcher { func RegisterFakeWatch(resource string, client *core.Fake) *WatcherDispatcher {
dispatcher := &WatcherDispatcher{ dispatcher := &WatcherDispatcher{
watchers: make([]*watch.FakeWatcher, 0), watchers: make([]*watch.RaceFreeFakeWatcher, 0),
eventsSoFar: make([]*watch.Event, 0), eventsSoFar: make([]*watch.Event, 0),
} }
client.AddWatchReactor(resource, func(action core.Action) (bool, watch.Interface, error) { client.AddWatchReactor(resource, func(action core.Action) (bool, watch.Interface, error) {
watcher := watch.NewFakeWithChanSize(100) watcher := watch.NewRaceFreeFake()
dispatcher.register(watcher) dispatcher.register(watcher)
return true, watcher, nil return true, watcher, nil
}) })