Skip to content

Commit 7cdd5cf

Browse files
(2.14) [FIXED] Filestore delete map race (#7560)
Fixes a data race introduced in #7387: ``` WARNING: DATA RACE Read at 0x00c0002d17f0 by goroutine 527: github.com/nats-io/nats-server/v2/server/avl.(*SequenceSet).Range() server/avl/seqset.go:125 +0x3b github.com/nats-io/nats-server/v2/server.(*fileStore).deleteMap() server/filestore.go:10676 +0x164 Previous write at 0x00c0002d17f0 by goroutine 182: github.com/nats-io/nats-server/v2/server/avl.(*SequenceSet).Insert() server/avl/seqset.go:45 +0x6d github.com/nats-io/nats-server/v2/server.(*fileStore).PurgeEx() server/filestore.go:8626 +0x1b0c ``` Signed-off-by: Maurice van Veen <[email protected]>
2 parents d5b3225 + 5c5e829 commit 7cdd5cf

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

server/filestore.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10821,8 +10821,14 @@ func (fs *fileStore) deleteBlocks() DeleteBlocks {
1082110821
// deleteMap returns all interior deletes for each block based on the mb.dmap.
1082210822
// Specifically, this will not contain any deletes for blocks that have been removed.
1082310823
// This is useful to know whether a tombstone is still relevant and marked as deleted by an active block.
10824-
// All blocks should be at least read locked.
10824+
// No locks should be held.
1082510825
func (fs *fileStore) deleteMap() (dmap avl.SequenceSet) {
10826+
fs.mu.RLock()
10827+
defer fs.mu.RUnlock()
10828+
10829+
fs.readLockAllMsgBlocks()
10830+
defer fs.readUnlockAllMsgBlocks()
10831+
1082610832
for _, mb := range fs.blks {
1082710833
if mb.dmap.Size() > 0 {
1082810834
mb.dmap.Range(func(seq uint64) bool {

0 commit comments

Comments
 (0)