Fix race condition in IteratorWithLocalStatistics (#5149)
Summary: The ReadCallback was shared between all threads in IteratorWithLocalStatistics. A race condition was hence introduced with recent changes that changes the content of ReadCallback. The patch fixes that by using a separate callback per thread. Pull Request resolved: https://github.com/facebook/rocksdb/pull/5149 Differential Revision: D14761612 Pulled By: maysamyabandeh fbshipit-source-id: 814a316aed046c318cb90e22379a6e32ac528949
This commit is contained in:
parent
7441a0ecba
commit
75e8b6dfcf
@ -42,14 +42,21 @@ class DBIteratorTest : public DBTestBase,
|
|||||||
SequenceNumber seq = read_options.snapshot != nullptr
|
SequenceNumber seq = read_options.snapshot != nullptr
|
||||||
? read_options.snapshot->GetSequenceNumber()
|
? read_options.snapshot->GetSequenceNumber()
|
||||||
: db_->GetLatestSequenceNumber();
|
: db_->GetLatestSequenceNumber();
|
||||||
read_callback_.SetSnapshot(seq);
|
|
||||||
bool use_read_callback = GetParam();
|
bool use_read_callback = GetParam();
|
||||||
ReadCallback* read_callback = use_read_callback ? &read_callback_ : nullptr;
|
DummyReadCallback* read_callback = nullptr;
|
||||||
|
if (use_read_callback) {
|
||||||
|
read_callback = new DummyReadCallback();
|
||||||
|
read_callback->SetSnapshot(seq);
|
||||||
|
InstrumentedMutexLock lock(&mutex_);
|
||||||
|
read_callbacks_.push_back(
|
||||||
|
std::unique_ptr<DummyReadCallback>(read_callback));
|
||||||
|
}
|
||||||
return dbfull()->NewIteratorImpl(read_options, cfd, seq, read_callback);
|
return dbfull()->NewIteratorImpl(read_options, cfd, seq, read_callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DummyReadCallback read_callback_;
|
InstrumentedMutex mutex_;
|
||||||
|
std::vector<std::unique_ptr<DummyReadCallback>> read_callbacks_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class FlushBlockEveryKeyPolicy : public FlushBlockPolicy {
|
class FlushBlockEveryKeyPolicy : public FlushBlockPolicy {
|
||||||
|
Loading…
Reference in New Issue
Block a user