mirror of
https://github.com/minio/minio.git
synced 2025-04-22 11:26:36 -04:00
Fix hanging scanner saves (#18368)
Fix various regressions from #18029 * If context is canceled the token is never returned. This will lead to scanner being unable to save and deadlocking. * Fix backup not being able to get any data (hr empty) * Reduce backup timeout.
This commit is contained in:
parent
ad44fe8d3e
commit
7472818d94
@ -985,15 +985,10 @@ func (d *dataUsageCache) save(ctx context.Context, store objectIO, name string)
|
|||||||
return ctx.Err()
|
return ctx.Err()
|
||||||
case maxConcurrentScannerSaves <- struct{}{}:
|
case maxConcurrentScannerSaves <- struct{}{}:
|
||||||
}
|
}
|
||||||
defer func() {
|
|
||||||
select {
|
|
||||||
case <-ctx.Done():
|
|
||||||
case <-maxConcurrentScannerSaves:
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
buf := bytebufferpool.Get()
|
buf := bytebufferpool.Get()
|
||||||
defer func() {
|
defer func() {
|
||||||
|
<-maxConcurrentScannerSaves
|
||||||
buf.Reset()
|
buf.Reset()
|
||||||
bytebufferpool.Put(buf)
|
bytebufferpool.Put(buf)
|
||||||
}()
|
}()
|
||||||
@ -1002,12 +997,12 @@ func (d *dataUsageCache) save(ctx context.Context, store objectIO, name string)
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
save := func(name string, timeout time.Duration) error {
|
||||||
hr, err := hash.NewReader(ctx, bytes.NewReader(buf.Bytes()), int64(buf.Len()), "", "", int64(buf.Len()))
|
hr, err := hash.NewReader(ctx, bytes.NewReader(buf.Bytes()), int64(buf.Len()), "", "", int64(buf.Len()))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
save := func(name string, timeout time.Duration) error {
|
|
||||||
// Abandon if more than a minute, so we don't hold up scanner.
|
// Abandon if more than a minute, so we don't hold up scanner.
|
||||||
ctx, cancel := context.WithTimeout(ctx, timeout)
|
ctx, cancel := context.WithTimeout(ctx, timeout)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
@ -1022,7 +1017,7 @@ func (d *dataUsageCache) save(ctx context.Context, store objectIO, name string)
|
|||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer save(name+".bkp", 30*time.Second) // Keep a backup as well
|
defer save(name+".bkp", 5*time.Second) // Keep a backup as well
|
||||||
|
|
||||||
// drive timeout by default is 2 minutes, we do not need to wait longer.
|
// drive timeout by default is 2 minutes, we do not need to wait longer.
|
||||||
return save(name, time.Minute)
|
return save(name, time.Minute)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user