mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
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:
parent
92788d313a
commit
d106b3beb7
|
@ -1518,7 +1518,9 @@ func (db *DB) compactBlocks() (err error) {
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
db.mtx.RLock()
|
||||||
uids, err := db.compactor.Compact(db.dir, plan, db.blocks)
|
uids, err := db.compactor.Compact(db.dir, plan, db.blocks)
|
||||||
|
db.mtx.RUnlock()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("compact %s: %w", plan, err)
|
return fmt.Errorf("compact %s: %w", plan, err)
|
||||||
}
|
}
|
||||||
|
@ -1601,11 +1603,13 @@ func (db *DB) reloadBlocks() (err error) {
|
||||||
if len(corrupted) > 0 {
|
if len(corrupted) > 0 {
|
||||||
// Corrupted but no child loaded for it.
|
// Corrupted but no child loaded for it.
|
||||||
// Close all new blocks to release the lock for windows.
|
// Close all new blocks to release the lock for windows.
|
||||||
|
db.mtx.RLock()
|
||||||
for _, block := range loadable {
|
for _, block := range loadable {
|
||||||
if _, open := getBlock(db.blocks, block.Meta().ULID); !open {
|
if _, open := getBlock(db.blocks, block.Meta().ULID); !open {
|
||||||
block.Close()
|
block.Close()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
db.mtx.RUnlock()
|
||||||
errs := tsdb_errors.NewMulti()
|
errs := tsdb_errors.NewMulti()
|
||||||
for ulid, err := range corrupted {
|
for ulid, err := range corrupted {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in a new issue