From 9df2b9a69df42e8c27bddefbffe73ef3b62e3578 Mon Sep 17 00:00:00 2001 From: Till Faelligen <2353100+S7evinK@users.noreply.github.com> Date: Thu, 2 Nov 2023 10:48:09 +0100 Subject: [PATCH] Don't fully fill the buffer --- userapi/internal/device_list_update.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/userapi/internal/device_list_update.go b/userapi/internal/device_list_update.go index 9a677f8c1..1fbacaf4c 100644 --- a/userapi/internal/device_list_update.go +++ b/userapi/internal/device_list_update.go @@ -419,12 +419,19 @@ func (u *DeviceListUpdater) worker(ch chan spec.ServerName, workerID int) { var serversToRetry []spec.ServerName for { deviceListUpdaterServersRetrying.With(prometheus.Labels{"worker_id": strconv.Itoa(workerID)}).Set(float64(len(retries))) - serversToRetry = serversToRetry[:0] // reuse memory time.Sleep(time.Second * 2) + + // The channel is at capacity, don't try to send more work if len(ch) == cap(ch) { continue } - maxServers := cap(ch) - len(ch) + serversToRetry = serversToRetry[:0] // reuse memory + + // -2, so we have space for incoming device list updates over federation + maxServers := (cap(ch) - len(ch)) - 2 + if maxServers <= 0 { + continue + } retriesMu.Lock() now := time.Now()