mirror of
https://github.com/minio/minio.git
synced 2025-01-11 15:03:22 -05:00
Avoid healing to be stuck with many concurrent event listeners (#10111)
If there are many listeners to bucket notifications or to the trace subsystem, healing fails to work properly since it suspends itself when the number of concurrent connections is above a certain threshold. These connections are also continuous and not costly (*no disk access*), it is okay to just ignore them in waitForLowHTTPReq().
This commit is contained in:
parent
ad8b53e6d4
commit
456b2ef6eb
@ -56,6 +56,10 @@ func (h *healRoutine) queueHealTask(task healTask) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func waitForLowHTTPReq(tolerance int32) {
|
func waitForLowHTTPReq(tolerance int32) {
|
||||||
|
// Bucket notification and http trace are not costly, it is okay to ignore them
|
||||||
|
// while counting the number of concurrent connections
|
||||||
|
tolerance += int32(globalHTTPListen.NumSubscribers() + globalHTTPTrace.NumSubscribers())
|
||||||
|
|
||||||
if httpServer := newHTTPServerFn(); httpServer != nil {
|
if httpServer := newHTTPServerFn(); httpServer != nil {
|
||||||
// Wait at max 10 minute for an inprogress request before proceeding to heal
|
// Wait at max 10 minute for an inprogress request before proceeding to heal
|
||||||
waitCount := 600
|
waitCount := 600
|
||||||
|
@ -73,9 +73,14 @@ func (ps *PubSub) Subscribe(subCh chan interface{}, doneCh <-chan struct{}, filt
|
|||||||
|
|
||||||
// HasSubscribers returns true if pubsub system has subscribers
|
// HasSubscribers returns true if pubsub system has subscribers
|
||||||
func (ps *PubSub) HasSubscribers() bool {
|
func (ps *PubSub) HasSubscribers() bool {
|
||||||
|
return ps.NumSubscribers() > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// NumSubscribers returns the number of current subscribers
|
||||||
|
func (ps *PubSub) NumSubscribers() int {
|
||||||
ps.RLock()
|
ps.RLock()
|
||||||
defer ps.RUnlock()
|
defer ps.RUnlock()
|
||||||
return len(ps.subs) > 0
|
return len(ps.subs)
|
||||||
}
|
}
|
||||||
|
|
||||||
// New inits a PubSub system
|
// New inits a PubSub system
|
||||||
|
Loading…
Reference in New Issue
Block a user