mirror of
https://github.com/minio/minio.git
synced 2024-12-24 06:05:55 -05:00
fix: reuser timers in erasure set hotpaths (#11106)
reuser timers in - connectDisks() monitoring - healMRFRoutine() channel timeouts
This commit is contained in:
parent
cce5d7152a
commit
b390a2a0b9
@ -245,10 +245,13 @@ func (s *erasureSets) connectDisks() {
|
||||
s.endpointStrings[setIndex*s.setDriveCount+diskIndex] = disk.String()
|
||||
s.erasureDisksMu.Unlock()
|
||||
go func(setIndex int) {
|
||||
idler := time.NewTimer(100 * time.Millisecond)
|
||||
defer idler.Stop()
|
||||
|
||||
// Send a new disk connect event with a timeout
|
||||
select {
|
||||
case s.disksConnectEvent <- diskConnectInfo{setIndex: setIndex}:
|
||||
case <-time.After(100 * time.Millisecond):
|
||||
case <-idler.C:
|
||||
}
|
||||
}(setIndex)
|
||||
}(endpoint)
|
||||
@ -267,13 +270,22 @@ func (s *erasureSets) monitorAndConnectEndpoints(ctx context.Context, monitorInt
|
||||
// Pre-emptively connect the disks if possible.
|
||||
s.connectDisks()
|
||||
|
||||
monitor := time.NewTimer(monitorInterval)
|
||||
defer monitor.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
case <-time.After(monitorInterval):
|
||||
case <-monitor.C:
|
||||
s.connectDisks()
|
||||
}
|
||||
|
||||
if !monitor.Stop() {
|
||||
<-monitor.C
|
||||
}
|
||||
|
||||
monitor.Reset(monitorInterval)
|
||||
}
|
||||
}
|
||||
|
||||
@ -1363,6 +1375,9 @@ func (s *erasureSets) healMRFRoutine() {
|
||||
// Wait until background heal state is initialized
|
||||
bgSeq := mustGetHealSequence(GlobalContext)
|
||||
|
||||
idler := time.NewTimer(100 * time.Millisecond)
|
||||
defer idler.Stop()
|
||||
|
||||
for e := range s.disksConnectEvent {
|
||||
// Get the list of objects related the er.set
|
||||
// to which the connected disk belongs.
|
||||
@ -1380,9 +1395,14 @@ func (s *erasureSets) healMRFRoutine() {
|
||||
// Send an object to be healed with a timeout
|
||||
select {
|
||||
case bgSeq.sourceCh <- u:
|
||||
case <-time.After(100 * time.Millisecond):
|
||||
case <-idler.C:
|
||||
}
|
||||
|
||||
if !idler.Stop() {
|
||||
<-idler.C
|
||||
}
|
||||
idler.Reset(100 * time.Millisecond)
|
||||
|
||||
s.mrfMU.Lock()
|
||||
delete(s.mrfOperations, u)
|
||||
s.mrfMU.Unlock()
|
||||
|
@ -87,7 +87,8 @@ func loadBucketMetaCache(ctx context.Context, bucket string) (*bucketMetacache,
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return nil, ctx.Err()
|
||||
case <-time.After(250 * time.Millisecond):
|
||||
default:
|
||||
time.Sleep(250 * time.Millisecond)
|
||||
}
|
||||
objAPI = newObjectLayerFn()
|
||||
if objAPI == nil {
|
||||
|
Loading…
Reference in New Issue
Block a user