Description
Looking at logs from MB-48884 on the stuck node, I noticed a bunch of goroutines stuck at a select and not giving up as they should:
timeout := time.NewTicker(1 * time.Second)
|
if bw.source {
|
select { <--
|
case chRaw.(chan service_def.SourceNotification) <- notification:
|
// sent
|
case <-timeout.C:
|
// provide a bail out path
|
notification.Recycle()
|
continue
|
|
This should be using a timer instead of a ticker because it's only meant to trigger once.
According to golang, tickers can
The ticker will adjust the time interval or drop ticks to make up for slow receivers
It's very unlikely for the ticker to drop so many ticks but regardless this needs to be a Timer anyway.
Attachments
Issue Links
- relates to
-
MB-48884 [System Test] Few cluster operations failed due to error - Internal server error
- Closed