Skip to content

Commit

Permalink
Add Injection and NoSyncFS (#380)
Browse files Browse the repository at this point in the history
Use a NoSyncFileSystem to skip Sync/FSync to reduce test times
  • Loading branch information
mrambacher authored and Yuval-Ariel committed Apr 30, 2023
1 parent da4c0d7 commit ab5e8d5
Show file tree
Hide file tree
Showing 17 changed files with 1,081 additions and 468 deletions.
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -945,6 +945,7 @@ set(SOURCES
utilities/fault_injection_env.cc
utilities/fault_injection_fs.cc
utilities/fault_injection_secondary_cache.cc
utilities/injection_fs.cc
utilities/leveldb_options/leveldb_options.cc
utilities/memory/memory_util.cc
utilities/merge_operators.cc
Expand All @@ -955,6 +956,7 @@ set(SOURCES
utilities/merge_operators/string_append/stringappend.cc
utilities/merge_operators/string_append/stringappend2.cc
utilities/merge_operators/uint64add.cc
utilities/nosync_fs.cc
utilities/object_registry.cc
utilities/option_change_migration/option_change_migration.cc
utilities/options/options_util.cc
Expand Down
4 changes: 4 additions & 0 deletions TARGETS
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,7 @@ cpp_library_wrapper(name="rocksdb_lib", srcs=[
"utilities/fault_injection_env.cc",
"utilities/fault_injection_fs.cc",
"utilities/fault_injection_secondary_cache.cc",
"utilities/injection_fs.cc",
"utilities/leveldb_options/leveldb_options.cc",
"utilities/memory/memory_util.cc",
"utilities/merge_operators.cc",
Expand All @@ -299,6 +300,7 @@ cpp_library_wrapper(name="rocksdb_lib", srcs=[
"utilities/merge_operators/string_append/stringappend.cc",
"utilities/merge_operators/string_append/stringappend2.cc",
"utilities/merge_operators/uint64add.cc",
"utilities/nosync_fs.cc",
"utilities/object_registry.cc",
"utilities/option_change_migration/option_change_migration.cc",
"utilities/options/options_util.cc",
Expand Down Expand Up @@ -635,6 +637,7 @@ cpp_library_wrapper(name="rocksdb_whole_archive_lib", srcs=[
"utilities/fault_injection_env.cc",
"utilities/fault_injection_fs.cc",
"utilities/fault_injection_secondary_cache.cc",
"utilities/injection_fs.cc",
"utilities/leveldb_options/leveldb_options.cc",
"utilities/memory/memory_util.cc",
"utilities/merge_operators.cc",
Expand All @@ -645,6 +648,7 @@ cpp_library_wrapper(name="rocksdb_whole_archive_lib", srcs=[
"utilities/merge_operators/string_append/stringappend.cc",
"utilities/merge_operators/string_append/stringappend2.cc",
"utilities/merge_operators/uint64add.cc",
"utilities/nosync_fs.cc",
"utilities/object_registry.cc",
"utilities/option_change_migration/option_change_migration.cc",
"utilities/options/options_util.cc",
Expand Down
2 changes: 1 addition & 1 deletion db/db_compaction_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ class CompactionStatsCollector : public EventListener {
class DBCompactionTest : public DBTestBase {
public:
DBCompactionTest()
: DBTestBase("db_compaction_test", /*env_do_fsync=*/true) {}
: DBTestBase("db_compaction_test", /*env_do_fsync=*/false) {}

protected:
/*
Expand Down
2 changes: 1 addition & 1 deletion db/db_with_timestamp_test_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ namespace ROCKSDB_NAMESPACE {
class DBBasicTestWithTimestampBase : public DBTestBase {
public:
explicit DBBasicTestWithTimestampBase(const std::string& dbname)
: DBTestBase(dbname, /*env_do_fsync=*/true) {}
: DBTestBase(dbname, /*env_do_fsync=*/false) {}

protected:
static std::string Key1(uint64_t k);
Expand Down
32 changes: 32 additions & 0 deletions env/env_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
#include "utilities/env_timed.h"
#include "utilities/fault_injection_env.h"
#include "utilities/fault_injection_fs.h"
#include "utilities/nosync_fs.h"

namespace ROCKSDB_NAMESPACE {

Expand Down Expand Up @@ -3339,6 +3340,37 @@ TEST_F(CreateEnvTest, CreateCompositeEnv) {
ASSERT_OK(ValidateOptions(db_opts, cf_opts));
}

TEST_F(CreateEnvTest, CreateNoSyncFileSystem) {
std::shared_ptr<FileSystem> fs, copy;
auto lib = config_options_.registry->AddLibrary("test");
test::RegisterTestObjects(*(lib.get()), "");
ASSERT_OK(FileSystem::CreateFromString(config_options_,
NoSyncFileSystem::kClassName(), &fs));
ASSERT_NE(fs, nullptr);
ASSERT_STREQ(fs->Name(), NoSyncFileSystem::kClassName());
ASSERT_EQ(fs->Inner(), FileSystem::Default().get());

std::string opts_str = fs->ToString(config_options_);
std::string mismatch;

ASSERT_OK(FileSystem::CreateFromString(config_options_, opts_str, &copy));
ASSERT_TRUE(fs->AreEquivalent(config_options_, copy.get(), &mismatch));

ASSERT_OK(FileSystem::CreateFromString(
config_options_,
std::string("id=") + NoSyncFileSystem::kClassName() +
"; target=" + TimedFileSystem::kClassName(),
&fs));
ASSERT_NE(fs, nullptr);
opts_str = fs->ToString(config_options_);
ASSERT_STREQ(fs->Name(), NoSyncFileSystem::kClassName());
ASSERT_NE(fs->Inner(), nullptr);
ASSERT_STREQ(fs->Inner()->Name(), TimedFileSystem::kClassName());
ASSERT_EQ(fs->Inner()->Inner(), FileSystem::Default().get());
ASSERT_OK(FileSystem::CreateFromString(config_options_, opts_str, &copy));
ASSERT_TRUE(fs->AreEquivalent(config_options_, copy.get(), &mismatch));
}

// Forward declaration
class ReadAsyncFS;

Expand Down
2 changes: 1 addition & 1 deletion include/rocksdb/file_system.h
Original file line number Diff line number Diff line change
Expand Up @@ -1830,7 +1830,7 @@ class FSDirectoryWrapper : public FSDirectory {
return target_->GetUniqueId(id, max_size);
}

private:
protected:
std::unique_ptr<FSDirectory> guard_;
FSDirectory* target_;
};
Expand Down
2 changes: 2 additions & 0 deletions src.mk
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,7 @@ LIB_SOURCES = \
utilities/fault_injection_env.cc \
utilities/fault_injection_fs.cc \
utilities/fault_injection_secondary_cache.cc \
utilities/injection_fs.cc \
utilities/leveldb_options/leveldb_options.cc \
utilities/memory/memory_util.cc \
utilities/merge_operators.cc \
Expand All @@ -285,6 +286,7 @@ LIB_SOURCES = \
utilities/merge_operators/string_append/stringappend2.cc \
utilities/merge_operators/uint64add.cc \
utilities/merge_operators/bytesxor.cc \
utilities/nosync_fs.cc \
utilities/object_registry.cc \
utilities/option_change_migration/option_change_migration.cc \
utilities/options/options_util.cc \
Expand Down
5 changes: 5 additions & 0 deletions table/table_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@
#include "util/string_util.h"
#include "utilities/memory_allocators.h"
#include "utilities/merge_operators.h"
#include "utilities/nosync_fs.h"

namespace ROCKSDB_NAMESPACE {

Expand Down Expand Up @@ -571,6 +572,8 @@ class DBConstructor : public Constructor {
explicit DBConstructor(const Comparator* cmp)
: Constructor(cmp), comparator_(cmp) {
db_ = nullptr;
std::shared_ptr<FileSystem> fs(new NoSyncFileSystem(FileSystem::Default()));
env_ = NewCompositeEnv(fs);
NewDB();
}
~DBConstructor() override { delete db_; }
Expand Down Expand Up @@ -604,6 +607,7 @@ class DBConstructor : public Constructor {

Options options;
options.comparator = comparator_;
options.env = env_.get();
Status status = DestroyDB(name, options);
ASSERT_TRUE(status.ok()) << status.ToString();

Expand All @@ -616,6 +620,7 @@ class DBConstructor : public Constructor {

const Comparator* comparator_;
DB* db_;
std::unique_ptr<Env> env_;
};

enum TestType {
Expand Down
8 changes: 8 additions & 0 deletions test_util/testutil.cc
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include "test_util/mock_time_env.h"
#include "test_util/sync_point.h"
#include "util/random.h"
#include "utilities/nosync_fs.h"

#ifndef ROCKSDB_UNITTESTS_WITH_CUSTOM_OBJECTS_FROM_STATIC_LIBS
void RegisterCustomObjects(int /*argc*/, char** /*argv*/) {}
Expand Down Expand Up @@ -707,6 +708,13 @@ int RegisterTestObjects(ObjectLibrary& library, const std::string& arg) {
guard->reset(new MockSystemClock(SystemClock::Default()));
return guard->get();
});
library.AddFactory<FileSystem>(
NoSyncFileSystem::kClassName(),
[](const std::string& /*uri*/, std::unique_ptr<FileSystem>* guard,
std::string* /* errmsg */) {
guard->reset(new NoSyncFileSystem(FileSystem::Default()));
return guard->get();
});
return static_cast<int>(library.GetFactoryCount(&num_types));
}

Expand Down
Loading

0 comments on commit ab5e8d5

Please sign in to comment.