Skip to content

Commit 7984b9b

Browse files
committed
BackupableDBTest thread-safe
Summary: We need to lock accesses to some TestEnv variables. Otherwise we get failures like http://ci-builds.fb.com/job/rocksdb_asan_check/657/console Test Plan: make check Reviewers: dhruba, haobo, sdong Reviewed By: haobo CC: leveldb Differential Revision: https://reviews.facebook.net/D18489
1 parent 15c3991 commit 7984b9b

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

utilities/backupable/backupable_db_test.cc

+14-1
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@
1111
#include <algorithm>
1212
#include <iostream>
1313

14+
#include "port/port.h"
1415
#include "rocksdb/types.h"
1516
#include "rocksdb/transaction_log.h"
1617
#include "utilities/utility_db.h"
1718
#include "utilities/backupable_db.h"
1819
#include "util/testharness.h"
1920
#include "util/random.h"
21+
#include "util/mutexlock.h"
2022
#include "util/testutil.h"
2123
#include "util/auto_roll_logger.h"
2224

@@ -161,6 +163,7 @@ class TestEnv : public EnvWrapper {
161163
Status NewSequentialFile(const std::string& f,
162164
unique_ptr<SequentialFile>* r,
163165
const EnvOptions& options) {
166+
MutexLock l(&mutex_);
164167
if (dummy_sequential_file_) {
165168
r->reset(new TestEnv::DummySequentialFile());
166169
return Status::OK();
@@ -171,6 +174,7 @@ class TestEnv : public EnvWrapper {
171174

172175
Status NewWritableFile(const std::string& f, unique_ptr<WritableFile>* r,
173176
const EnvOptions& options) {
177+
MutexLock l(&mutex_);
174178
written_files_.push_back(f);
175179
if (limit_written_files_ <= 0) {
176180
return Status::NotSupported("Sorry, can't do this");
@@ -180,32 +184,41 @@ class TestEnv : public EnvWrapper {
180184
}
181185

182186
virtual Status DeleteFile(const std::string& fname) override {
187+
MutexLock l(&mutex_);
183188
ASSERT_GT(limit_delete_files_, 0U);
184189
limit_delete_files_--;
185190
return EnvWrapper::DeleteFile(fname);
186191
}
187192

188193
void AssertWrittenFiles(std::vector<std::string>& should_have_written) {
194+
MutexLock l(&mutex_);
189195
sort(should_have_written.begin(), should_have_written.end());
190196
sort(written_files_.begin(), written_files_.end());
191197
ASSERT_TRUE(written_files_ == should_have_written);
192198
}
193199

194200
void ClearWrittenFiles() {
201+
MutexLock l(&mutex_);
195202
written_files_.clear();
196203
}
197204

198205
void SetLimitWrittenFiles(uint64_t limit) {
206+
MutexLock l(&mutex_);
199207
limit_written_files_ = limit;
200208
}
201209

202-
void SetLimitDeleteFiles(uint64_t limit) { limit_delete_files_ = limit; }
210+
void SetLimitDeleteFiles(uint64_t limit) {
211+
MutexLock l(&mutex_);
212+
limit_delete_files_ = limit;
213+
}
203214

204215
void SetDummySequentialFile(bool dummy_sequential_file) {
216+
MutexLock l(&mutex_);
205217
dummy_sequential_file_ = dummy_sequential_file;
206218
}
207219

208220
private:
221+
port::Mutex mutex_;
209222
bool dummy_sequential_file_ = false;
210223
std::vector<std::string> written_files_;
211224
uint64_t limit_written_files_ = 1000000;

0 commit comments

Comments
 (0)