mapper/batcher: restructure internals for correctness
Move per-node pending changes from a shared xsync.Map on the batcher into multiChannelNodeConn, protected by a dedicated mutex. The new appendPending/drainPending methods provide atomic append and drain operations, eliminating data races in addToBatch and processBatchedChanges. Add sync.Once to multiChannelNodeConn.close() to make it idempotent, preventing panics from concurrent close calls on the same channel. Add started atomic.Bool to guard Start() against being called multiple times, preventing orphaned goroutines. Add comprehensive concurrency tests validating these changes.
This commit is contained in:
parent
21e02e5d1f
commit
57070680a5
7 changed files with 1836 additions and 69 deletions
1731
hscontrol/mapper/batcher_concurrency_test.go
Normal file
1731
hscontrol/mapper/batcher_concurrency_test.go
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue