From 7686f3528b10bd4e687f5512a5a8d19fa0b20518 Mon Sep 17 00:00:00 2001 From: Wojciech Tyczynski Date: Mon, 27 Apr 2020 17:07:27 +0200 Subject: [PATCH] Revert "Send watch bookmarks every minute" Kubernetes-commit: 1cb98ed2376b1f7777ca3d7bfac98cbb5f8b9ce3 --- pkg/storage/cacher/cacher.go | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/pkg/storage/cacher/cacher.go b/pkg/storage/cacher/cacher.go index 54e715dff..6df0fd135 100644 --- a/pkg/storage/cacher/cacher.go +++ b/pkg/storage/cacher/cacher.go @@ -171,7 +171,10 @@ func newTimeBucketWatchers(clock clock.Clock) *watcherBookmarkTimeBuckets { // adds a watcher to the bucket, if the deadline is before the start, it will be // added to the first one. func (t *watcherBookmarkTimeBuckets) addWatcher(w *cacheWatcher) bool { - nextTime := w.nextBookmarkTime(t.clock.Now()) + nextTime, ok := w.nextBookmarkTime(t.clock.Now()) + if !ok { + return false + } bucketID := nextTime.Unix() t.lock.Lock() defer t.lock.Unlock() @@ -1216,26 +1219,13 @@ func (c *cacheWatcher) add(event *watchCacheEvent, timer *time.Timer) bool { } } -// bookmarkHeartbeatFrequency defines how frequently bookmarks should be -// under regular conditions. -const bookmarkHeartbeatFrequency = time.Minute - -func (c *cacheWatcher) nextBookmarkTime(now time.Time) time.Time { - // We try to send bookmarks: - // (a) roughly every minute - // (b) right before the watcher timeout - for now we simply set it 2s before - // the deadline - // The former gives us periodicity if the watch breaks due to unexpected - // conditions, the later ensures that on timeout the watcher is as close to - // now as possible - this covers 99% of cases. - heartbeatTime := now.Add(bookmarkHeartbeatFrequency) +func (c *cacheWatcher) nextBookmarkTime(now time.Time) (time.Time, bool) { + // For now we return 2s before deadline (and maybe +infinity is now already passed this time) + // but it gives us extensibility for the future(false when deadline is not set). if c.deadline.IsZero() { - return heartbeatTime - } - if pretimeoutTime := c.deadline.Add(-2 * time.Second); pretimeoutTime.Before(heartbeatTime) { - return pretimeoutTime + return c.deadline, false } - return heartbeatTime + return c.deadline.Add(-2 * time.Second), true } func getEventObject(object runtime.Object) runtime.Object {