Solve the notification on startup pod status notification race condition
This solves the race condition as described in https://github.com/virtual-kubelet/virtual-kubelet/issues/836. It does this by checking two conditions when the possible race condition is detected. If we receive a pod notification from the provider, and it is not in our known pods list: 1. Is our cache in-sync? 2. Is it known to our pod lister? The first case can happen because of the order we start the provider and sync our caches. The second case can happen because even if the cache returns synced, it does not mean all of the call backs on the informer have quiesced. This slightly changes the behaviour of notifyPods to that it can block (especially at startup). We can solve this later by using something like a fair (ticket?) lock.
This commit is contained in:
@@ -53,6 +53,7 @@ func newTestController() *TestController {
|
||||
done: make(chan struct{}),
|
||||
ready: make(chan struct{}),
|
||||
podsInformer: iFactory.Core().V1().Pods(),
|
||||
podsLister: iFactory.Core().V1().Pods().Lister(),
|
||||
},
|
||||
mock: p,
|
||||
client: fk8s,
|
||||
|
||||
Reference in New Issue
Block a user