cacher: dispatchEvents is synced to watchCache.listResourceVersion

The internal informer populates the RV as soon as it conducts
The first successful sync with the underlying store.
The cache must wait until this first sync is completed to be deemed ready.
Since we cannot send a bookmark when the lastProcessedResourceVersion is 0,
we poll aggressively for the first list RV before entering the dispatch loop.
This commit is contained in:
Lukasz Szaszkiewicz 2024-06-03 10:26:50 +02:00
parent 2d8a3ad572
commit a20abdb1f4
2 changed files with 4 additions and 4 deletions

View File

@ -912,10 +912,10 @@ func (c *Cacher) dispatchEvents() {
// The first successful sync with the underlying store.
// The cache must wait until this first sync is completed to be deemed ready.
// Since we cannot send a bookmark when the lastProcessedResourceVersion is 0,
// we poll aggressively for the first RV before entering the dispatch loop.
// we poll aggressively for the first list RV before entering the dispatch loop.
lastProcessedResourceVersion := uint64(0)
if err := wait.PollUntilContextCancel(wait.ContextForChannel(c.stopCh), 10*time.Millisecond, true, func(_ context.Context) (bool, error) {
if rv := c.watchCache.getResourceVersion(); rv != 0 {
if rv := c.watchCache.getListResourceVersion(); rv != 0 {
lastProcessedResourceVersion = rv
return true, nil
}

View File

@ -644,10 +644,10 @@ func (w *watchCache) Resync() error {
return nil
}
func (w *watchCache) getResourceVersion() uint64 {
func (w *watchCache) getListResourceVersion() uint64 {
w.RLock()
defer w.RUnlock()
return w.resourceVersion
return w.listResourceVersion
}
func (w *watchCache) currentCapacity() int {