mirror of
https://github.com/rustfs/rustfs.git
synced 2026-07-27 16:48:58 +00:00
2490d4ee22
fix(notify): serialize persisted config read-modify-write to prevent lost updates (backlog#968) The notify config write path performed a read -> modify -> write over the persisted server config with no serialization: two concurrent updates could both read the same base config, apply disjoint changes, and race their full-config writes. The later write silently overwrote the earlier one, losing updates (e.g. adding two targets concurrently could drop one) with no error surfaced. Guard the whole read -> modify -> write with a process-global tokio Mutex (NOTIFY_CONFIG_RMW_LOCK). The persisted config is a single process-global resource, so serializing the RMW makes concurrent updates apply in sequence and every change is preserved. The lock is only acquired inside update_server_config and is released before the in-memory reload, so it never nests with the per-manager config RwLock and introduces no lock-ordering risk. The RMW sequence is extracted into serialized_read_modify_write with injected read/save operations so the exact production serialization path is exercised by a regression test that concurrently adds 32 distinct targets and asserts all of them survive. Refs: https://github.com/rustfs/backlog/issues/968