diff options
author | Håvard Pettersen <havardpe@yahooinc.com> | 2022-05-20 14:21:30 +0000 |
---|---|---|
committer | Håvard Pettersen <havardpe@yahooinc.com> | 2022-05-20 14:21:30 +0000 |
commit | 1a3702e845352a85c96d3c1bde1353936595143f (patch) | |
tree | 1d9cacacd520e4dd4ab7164f504a7e42ef991e24 | |
parent | b13e6071410d51b31b956cf4c856d21334d9fd41 (diff) |
hold lock while modifying merge states map
-rw-r--r-- | storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp b/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp index 0f897d753f6..cfcc32a76e5 100644 --- a/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp +++ b/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp @@ -173,8 +173,13 @@ FileStorHandlerImpl::flush(bool killPendingMerges) LOG(debug, "All queues and bucket locks released."); if (killPendingMerges) { + std::map<document::Bucket, std::shared_ptr<MergeStatus>> my_merge_states; + { + std::lock_guard mergeGuard(_mergeStatesLock); + std::swap(_mergeStates, my_merge_states); + } api::ReturnCode code(api::ReturnCode::ABORTED, "Storage node is shutting down"); - for (auto & entry : _mergeStates) { + for (auto & entry : my_merge_states) { MergeStatus& s(*entry.second); if (s.pendingGetDiff) { s.pendingGetDiff->setResult(code); @@ -189,7 +194,6 @@ FileStorHandlerImpl::flush(bool killPendingMerges) _messageSender.sendReply(s.reply); } } - _mergeStates.clear(); } } |