Skip to content
This repository was archived by the owner on Aug 23, 2023. It is now read-only.

Commit d1381fc

Browse files
authored
Merge pull request #1333 from grafana/issue_1332
Prevent blocked go routines to hang forever (issue #1332)
2 parents 2e2ba48 + 86a9eab commit d1381fc

File tree

1 file changed

+12
-17
lines changed

1 file changed

+12
-17
lines changed

api/cluster.go

+12-17
Original file line numberDiff line numberDiff line change
@@ -415,35 +415,30 @@ func (s *Server) peerQuerySpeculativeChan(ctx context.Context, data cluster.Trac
415415
reqCtx, cancel := context.WithCancel(ctx)
416416
defer cancel()
417417

418-
originalPeers := make(map[string]struct{}, len(peerGroups))
419-
receivedResponses := make(map[int32]struct{}, len(peerGroups))
420-
421-
responses := make(chan struct {
418+
type response struct {
422419
shardGroup int32
423420
data PeerResponse
424421
err error
425-
}, 1)
422+
}
423+
424+
responses := make(chan response)
425+
originalPeers := make(map[string]struct{}, len(peerGroups))
426+
receivedResponses := make(map[int32]struct{}, len(peerGroups))
426427

427428
askPeer := func(shardGroup int32, peer cluster.Node) {
428429
log.Debugf("HTTP Render querying %s%s", peer.GetName(), path)
429430
buf, err := peer.Post(reqCtx, name, path, data)
431+
if err != nil {
432+
cancel()
433+
log.Errorf("HTTP Render error querying %s%s: %q", peer.GetName(), path, err)
434+
}
430435

431436
select {
432437
case <-ctx.Done():
433438
return
434-
default:
435-
// Not canceled, continue
436-
}
437-
438-
if err != nil {
439-
cancel()
440-
log.Errorf("HTTP Render error querying %s%s: %q", peer.GetName(), path, err)
439+
case responses <- response{shardGroup, PeerResponse{peer, buf}, err}:
440+
return
441441
}
442-
responses <- struct {
443-
shardGroup int32
444-
data PeerResponse
445-
err error
446-
}{shardGroup, PeerResponse{peer, buf}, err}
447442
}
448443

449444
for group, peers := range peerGroups {

0 commit comments

Comments
 (0)