Do not move VersionEdit into AtomicGroupReadBuffer (#6400)
Summary: https://github.com/facebook/rocksdb/pull/6383 surfaced an issue with `VersionSet`/`ReactiveVersionSet` and `AtomicGroupReadBuffer::AddEdit` (which was added in https://github.com/facebook/rocksdb/pull/5411): `AddEdit` moves the `VersionEdit` passed to it into `replay_buffer_`, however, the client `VersionSet` classes keep using it afterwards. This *seemed to* work before the refactoring but it really did not: since `VersionEdit` used to have a user-declared destructor, no move constructor/move assignment operator was generated, and the `move` in `AddEdit` was really a copy. The patch makes the copy explicit. Note: it should be possible to rework this logic so that we can get away with the move but for now, this should fix the issue. Pull Request resolved: https://github.com/facebook/rocksdb/pull/6400 Test Plan: `make check` `make analyze` Differential Revision: D19824466 Pulled By: ltamasi fbshipit-source-id: f38033967daf2a39c78dcd6e12978bafe37632b4
This commit is contained in:
parent
4369f2c7bb
commit
cbf5f3be43
@ -3491,7 +3491,7 @@ Status AtomicGroupReadBuffer::AddEdit(VersionEdit* edit) {
|
||||
"AtomicGroupReadBuffer::AddEdit:IncorrectAtomicGroupSize", edit);
|
||||
return Status::Corruption("corrupted atomic group");
|
||||
}
|
||||
replay_buffer_[read_edits_in_atomic_group_ - 1] = std::move(*edit);
|
||||
replay_buffer_[read_edits_in_atomic_group_ - 1] = *edit;
|
||||
if (read_edits_in_atomic_group_ == replay_buffer_.size()) {
|
||||
TEST_SYNC_POINT_CALLBACK(
|
||||
"AtomicGroupReadBuffer::AddEdit:LastInAtomicGroup", edit);
|
||||
|
Loading…
Reference in New Issue
Block a user