mirror of
https://github.com/ceph/ceph
synced 2024-12-21 10:54:42 +00:00
crimson/osd: merge pg_temp_wanted before sending them
there is chance that new pg_temp_wanted is added when we are sending them in ShardServices::send_pg_temp(), but the pg temp are already collected into the messages before seastar::parallel_for_each(). so, we cannot move all elements from pg_temp_wanted to pg_temp_pending after sending the messages, that'd also move the unsent pg temps to pg_temp_pending as well. so we have to do this before do the async call, this issue was root caused by Xuehan Xu <xxhdx1985126@gmail.com>. Signed-off-by: Kefu Chai <kchai@redhat.com>
This commit is contained in:
parent
dbbd2d32f3
commit
4d17fda7e3
@ -200,6 +200,8 @@ seastar::future<> ShardServices::send_pg_temp()
|
||||
}
|
||||
m->pg_temp.emplace(pgid, pg_temp.acting);
|
||||
}
|
||||
pg_temp_pending.merge(pg_temp_wanted);
|
||||
pg_temp_wanted.clear();
|
||||
return seastar::parallel_for_each(std::begin(ms), std::end(ms),
|
||||
[this](auto m) {
|
||||
if (m) {
|
||||
@ -207,9 +209,6 @@ seastar::future<> ShardServices::send_pg_temp()
|
||||
} else {
|
||||
return seastar::now();
|
||||
}
|
||||
}).then([this] {
|
||||
pg_temp_pending.merge(pg_temp_wanted);
|
||||
pg_temp_wanted.clear();
|
||||
});
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user