mirror of
https://github.com/status-im/consul.git
synced 2025-02-04 09:55:49 +00:00
rpc: cleanup exit and blocking condition logic in blockingQuery
Remove some unnecessary comments around query_blocking metric. The only line that needs any comments in the atomic decrement. Cleanup the block and return comments and logic. The old comment about AbandonCh may have been relevant before, but it is expected behaviour now. The logic was simplified by inverting the err condition.
This commit is contained in:
parent
72a733bed8
commit
71767f1b3e
@ -942,13 +942,10 @@ func (s *Server) blockingQuery(queryOpts structs.QueryOptionsCompat, queryMeta s
|
|||||||
ctx, cancel := context.WithTimeout(ctx, timeout)
|
ctx, cancel := context.WithTimeout(ctx, timeout)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
// instrument blockingQueries
|
count := atomic.AddUint64(&s.queriesBlocking, 1)
|
||||||
// atomic inc our server's count of in-flight blockingQueries and store the new value
|
metrics.SetGauge([]string{"rpc", "queries_blocking"}, float32(count))
|
||||||
queriesBlocking := atomic.AddUint64(&s.queriesBlocking, 1)
|
// decrement the count when the function returns.
|
||||||
// atomic dec when we return from blockingQuery()
|
|
||||||
defer atomic.AddUint64(&s.queriesBlocking, ^uint64(0))
|
defer atomic.AddUint64(&s.queriesBlocking, ^uint64(0))
|
||||||
// set the gauge directly to the new value of s.blockingQueries
|
|
||||||
metrics.SetGauge([]string{"rpc", "queries_blocking"}, float32(queriesBlocking))
|
|
||||||
|
|
||||||
for {
|
for {
|
||||||
if queryOpts.GetRequireConsistent() {
|
if queryOpts.GetRequireConsistent() {
|
||||||
@ -977,24 +974,17 @@ func (s *Server) blockingQuery(queryOpts structs.QueryOptionsCompat, queryMeta s
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// block up to the timeout if we don't see anything fresh.
|
// block until something changes, or the timeout
|
||||||
if err := ws.WatchCtx(ctx); err == nil {
|
if err := ws.WatchCtx(ctx); err != nil {
|
||||||
// a non-nil error only occurs when the context is cancelled
|
// exit if we've reached the timeout, or other cancellation
|
||||||
|
return nil
|
||||||
// If a restore may have woken us up then bail out from
|
|
||||||
// the query immediately. This is slightly race-ey since
|
|
||||||
// this might have been interrupted for other reasons,
|
|
||||||
// but it's OK to kick it back to the caller in either
|
|
||||||
// case.
|
|
||||||
select {
|
|
||||||
case <-state.AbandonCh():
|
|
||||||
return nil
|
|
||||||
default:
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ctx.Err() != nil {
|
// exit if the state store has been abandoned
|
||||||
|
select {
|
||||||
|
case <-state.AbandonCh():
|
||||||
return nil
|
return nil
|
||||||
|
default:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user