Skip to content

Commit 87416b1

Browse files
fix: subnet health triggering OOM, infinite loop (#887)
1 parent dd0b791 commit 87416b1

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

restapi/client-admin.go

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"bytes"
2121
"context"
2222
"encoding/json"
23-
"errors"
2423
"io"
2524
"net/http"
2625
"time"
@@ -355,25 +354,34 @@ func (ac AdminClient) serverHealthInfo(ctx context.Context, healthDataTypes []ma
355354
decoder := json.NewDecoder(resp.Body)
356355
switch version {
357356
case madmin.HealthInfoVersion0:
357+
info := madmin.HealthInfoV0{}
358358
for {
359-
var info madmin.HealthInfoV0
360-
err = decoder.Decode(&info)
361-
if err != nil && !errors.Is(err, io.EOF) {
362-
return nil, version, err
359+
if err = decoder.Decode(&info); err != nil {
360+
break
363361
}
362+
}
364363

365-
healthInfo = mcCmd.MapHealthInfoToV1(info, nil)
364+
// Old minio versions don't return the MinIO info in
365+
// response of the healthinfo api. So fetch it separately
366+
minioInfo, err := ac.Client.ServerInfo(ctx)
367+
if err != nil {
368+
info.Minio.Error = err.Error()
369+
} else {
370+
info.Minio.Info = minioInfo
366371
}
372+
373+
healthInfo = mcCmd.MapHealthInfoToV1(info, nil)
374+
version = madmin.HealthInfoVersion1
367375
case madmin.HealthInfoVersion:
376+
info := madmin.HealthInfo{}
368377
for {
369-
var info madmin.HealthInfo
370-
if err != nil && !errors.Is(err, io.EOF) {
371-
return nil, version, err
378+
if err = decoder.Decode(&info); err != nil {
379+
break
372380
}
373-
374-
healthInfo = info
375381
}
382+
healthInfo = info
376383
}
384+
377385
return healthInfo, version, nil
378386
}
379387

0 commit comments

Comments
 (0)