Wrap db.blocks read in a read lock

We don't hold db.mtx lock when trying to read db.blocks here so we need a read lock around this loop.

Signed-off-by: Łukasz Mierzwa <l.mierzwa@gmail.com>
This commit is contained in:
Łukasz Mierzwa 2023-10-18 09:29:59 +01:00 committed by Lukasz Mierzwa
parent 92788d313a
commit d106b3beb7

View file

@ -1518,7 +1518,9 @@ func (db *DB) compactBlocks() (err error) {
default:
}
db.mtx.RLock()
uids, err := db.compactor.Compact(db.dir, plan, db.blocks)
db.mtx.RUnlock()
if err != nil {
return fmt.Errorf("compact %s: %w", plan, err)
}
@ -1601,11 +1603,13 @@ func (db *DB) reloadBlocks() (err error) {
if len(corrupted) > 0 {
// Corrupted but no child loaded for it.
// Close all new blocks to release the lock for windows.
db.mtx.RLock()
for _, block := range loadable {
if _, open := getBlock(db.blocks, block.Meta().ULID); !open {
block.Close()
}
}
db.mtx.RUnlock()
errs := tsdb_errors.NewMulti()
for ulid, err := range corrupted {
if err != nil {