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() } }