fix: filter rest errors and logs returned (#16019)

This commit is contained in:
Klaus Post 2022-11-07 19:38:08 +01:00 committed by GitHub
parent 19d0340ddf
commit ddeca9f12a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 13 additions and 6 deletions

View File

@ -1611,7 +1611,10 @@ func (a adminAPIHandlers) ConsoleLogHandler(w http.ResponseWriter, r *http.Reque
for {
select {
case log := <-logCh:
case log, ok := <-logCh:
if !ok {
return
}
if log.SendLog(node, logKind) {
if err := enc.Encode(log); err != nil {
return

View File

@ -1130,7 +1130,10 @@ func (s *peerRESTServer) ConsoleLogHandler(w http.ResponseWriter, r *http.Reques
enc := gob.NewEncoder(w)
for {
select {
case entry := <-ch:
case entry, ok := <-ch:
if !ok {
return
}
if err := enc.Encode(entry); err != nil {
return
}

View File

@ -83,7 +83,7 @@ func (l Info) Mask() uint64 {
// SendLog returns true if log pertains to node specified in args.
func (l Info) SendLog(node string, logKind madmin.LogMask) bool {
if logKind.Contains(l.LogKind.LogMask()) {
return node == "" || strings.EqualFold(node, l.NodeName)
return node == "" || strings.EqualFold(node, l.NodeName) && !l.Time.IsZero()
}
return false
}

View File

@ -199,11 +199,12 @@ func (c *Client) newRequest(ctx context.Context, u *url.URL, body io.Reader) (*h
type respBodyMonitor struct {
io.ReadCloser
expectTimeouts bool
}
func (r respBodyMonitor) Read(p []byte) (n int, err error) {
n, err = r.ReadCloser.Read(p)
if err != nil && err != io.EOF {
if xnet.IsNetworkOrHostDown(err, r.expectTimeouts) {
atomic.AddUint64(&globalStats.errs, 1)
}
return
@ -211,7 +212,7 @@ func (r respBodyMonitor) Read(p []byte) (n int, err error) {
func (r respBodyMonitor) Close() (err error) {
err = r.ReadCloser.Close()
if err != nil {
if xnet.IsNetworkOrHostDown(err, r.expectTimeouts) {
atomic.AddUint64(&globalStats.errs, 1)
}
return
@ -297,7 +298,7 @@ func (c *Client) Call(ctx context.Context, method string, values url.Values, bod
return nil, errors.New(resp.Status)
}
if !c.NoMetrics && !c.ExpectTimeouts {
resp.Body = &respBodyMonitor{resp.Body}
resp.Body = &respBodyMonitor{ReadCloser: resp.Body, expectTimeouts: c.ExpectTimeouts}
}
return resp.Body, nil
}