From 5e4213b3be5300f7ae1e29e1cbeb9e9e92881e69 Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Sun, 7 Aug 2022 23:04:03 -0700 Subject: [PATCH] fix: keep writing previous speedtest result (#15484) when object speedtest is running keep writing previous speedtest result back to client until we have a new result - this avoids sending back blank entries in between the speedtest when it is running in 'autotune' mode. --- cmd/admin-handlers.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/cmd/admin-handlers.go b/cmd/admin-handlers.go index fa17e6ddd..0e902192d 100644 --- a/cmd/admin-handlers.go +++ b/cmd/admin-handlers.go @@ -1272,14 +1272,24 @@ func (a adminAPIHandlers) ObjectSpeedTestHandler(w http.ResponseWriter, r *http. storageClass: storageClass, bucketName: customBucket, }) + var prevResult madmin.SpeedTestResult for { select { case <-ctx.Done(): return case <-keepAliveTicker.C: - // Write a blank entry to prevent client from disconnecting - if err := enc.Encode(madmin.SpeedTestResult{}); err != nil { - return + // if previous result is set keep writing the + // previous result back to the client + if prevResult.Version != "" { + if err := enc.Encode(prevResult); err != nil { + return + } + } else { + // first result is not yet obtained, keep writing + // empty entry to prevent client from disconnecting. + if err := enc.Encode(madmin.SpeedTestResult{}); err != nil { + return + } } w.(http.Flusher).Flush() case result, ok := <-ch: @@ -1289,6 +1299,7 @@ func (a adminAPIHandlers) ObjectSpeedTestHandler(w http.ResponseWriter, r *http. if err := enc.Encode(result); err != nil { return } + prevResult = result w.(http.Flusher).Flush() } }