From 62cf827925a078c88ca88848a9f7633818dc6162 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Tue, 18 Jul 2017 15:06:28 -0700 Subject: [PATCH] rocksdb: Only use the public API No longer directly include env_posix.cc. Instead, use the EnvWrapper class from the public header env.h. Change-Id: Iab97f943d26ca9f07ad2b80f4f3706e1593f3caa Signed-off-by: Ben Walker Reviewed-on: https://review.gerrithub.io/370585 Reviewed-by: Daniel Verkamp Tested-by: SPDK Automated Test System --- lib/rocksdb/env_spdk.cc | 52 +++++++++++++++++++++---------------- lib/rocksdb/spdk.rocksdb.mk | 2 +- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/lib/rocksdb/env_spdk.cc b/lib/rocksdb/env_spdk.cc index 08573cd6c..515d83a18 100644 --- a/lib/rocksdb/env_spdk.cc +++ b/lib/rocksdb/env_spdk.cc @@ -31,7 +31,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "env_posix.cc" +#include "rocksdb/env.h" extern "C" { #include "spdk/env.h" @@ -265,7 +265,7 @@ public: } }; -class SpdkEnv : public PosixEnv +class SpdkEnv : public EnvWrapper { private: pthread_t mSpdkTid; @@ -274,7 +274,7 @@ private: std::string mBdev; public: - SpdkEnv(const std::string &dir, const std::string &conf, + SpdkEnv(Env *base_env, const std::string &dir, const std::string &conf, const std::string &bdev, uint64_t cache_size_in_mb); virtual ~SpdkEnv(); @@ -298,10 +298,10 @@ public: * support MySQL, set the errno to right value. */ errno = -rc; - return IOError(fname, errno); + return Status::IOError(fname, strerror(errno)); } } else { - return PosixEnv::NewSequentialFile(fname, result, options); + return EnvWrapper::NewSequentialFile(fname, result, options); } } @@ -313,7 +313,7 @@ public: result->reset(new SpdkRandomAccessFile(basename(fname), options)); return Status::OK(); } else { - return PosixEnv::NewRandomAccessFile(fname, result, options); + return EnvWrapper::NewRandomAccessFile(fname, result, options); } } @@ -325,7 +325,7 @@ public: result->reset(new SpdkWritableFile(basename(fname), options)); return Status::OK(); } else { - return PosixEnv::NewWritableFile(fname, result, options); + return EnvWrapper::NewWritableFile(fname, result, options); } } @@ -334,7 +334,7 @@ public: unique_ptr *result, const EnvOptions &options) override { - return PosixEnv::ReuseWritableFile(fname, old_fname, result, options); + return EnvWrapper::ReuseWritableFile(fname, old_fname, result, options); } virtual Status NewDirectory(const std::string &name, @@ -353,7 +353,7 @@ public: if (rc == 0) { return Status::OK(); } - return PosixEnv::FileExists(fname); + return EnvWrapper::FileExists(fname); } virtual Status RenameFile(const std::string &src, const std::string &target) override { @@ -364,7 +364,7 @@ public: rc = spdk_fs_rename_file(g_fs, g_sync_args.channel, src_base.c_str(), target_base.c_str()); if (rc == -ENOENT) { - return PosixEnv::RenameFile(src, target); + return EnvWrapper::RenameFile(src, target); } return Status::OK(); } @@ -380,7 +380,7 @@ public: rc = spdk_fs_file_stat(g_fs, g_sync_args.channel, fname_base.c_str(), &stat); if (rc == -ENOENT) { - return PosixEnv::GetFileSize(fname, size); + return EnvWrapper::GetFileSize(fname, size); } *size = stat.size; return Status::OK(); @@ -391,7 +391,7 @@ public: std::string fname_base = basename(fname); rc = spdk_fs_delete_file(g_fs, g_sync_args.channel, fname_base.c_str()); if (rc == -ENOENT) { - return PosixEnv::DeleteFile(fname); + return EnvWrapper::DeleteFile(fname); } return Status::OK(); } @@ -425,7 +425,7 @@ public: } return Status::OK(); } - return PosixEnv::GetChildren(dir, result); + return EnvWrapper::GetChildren(dir, result); } }; @@ -444,20 +444,26 @@ void SpdkInitializeThread(void) } } +struct SpdkThreadState { + void (*user_function)(void *); + void *arg; +}; + static void SpdkStartThreadWrapper(void *arg) { - StartThreadState *state = reinterpret_cast(arg); + SpdkThreadState *state = reinterpret_cast(arg); SpdkInitializeThread(); - StartThreadWrapper(state); + state->user_function(state->arg); + delete state; } void SpdkEnv::StartThread(void (*function)(void *arg), void *arg) { - StartThreadState *state = new StartThreadState; + SpdkThreadState *state = new SpdkThreadState; state->user_function = function; state->arg = arg; - PosixEnv::StartThread(SpdkStartThreadWrapper, state); + EnvWrapper::StartThread(SpdkStartThreadWrapper, state); } static void @@ -517,9 +523,9 @@ initialize_spdk(void *arg) pthread_exit(NULL); } -SpdkEnv::SpdkEnv(const std::string &dir, const std::string &conf, +SpdkEnv::SpdkEnv(Env *base_env, const std::string &dir, const std::string &conf, const std::string &bdev, uint64_t cache_size_in_mb) - : PosixEnv(), mDirectory(dir), mConfig(conf), mBdev(bdev) + : EnvWrapper(base_env), mDirectory(dir), mConfig(conf), mBdev(bdev) { struct spdk_app_opts *opts = new struct spdk_app_opts; @@ -546,16 +552,16 @@ SpdkEnv::~SpdkEnv() pthread_join(mSpdkTid, NULL); } -void NewSpdkEnv(Env **env, const std::string &dir, const std::string &conf, +Env *NewSpdkEnv(Env *base_env, const std::string &dir, const std::string &conf, const std::string &bdev, uint64_t cache_size_in_mb) { - SpdkEnv *spdk_env = new SpdkEnv(dir, conf, bdev, cache_size_in_mb); + SpdkEnv *spdk_env = new SpdkEnv(base_env, dir, conf, bdev, cache_size_in_mb); if (g_fs != NULL) { - *env = spdk_env; + return spdk_env; } else { - *env = NULL; delete spdk_env; + return NULL; } } diff --git a/lib/rocksdb/spdk.rocksdb.mk b/lib/rocksdb/spdk.rocksdb.mk index 5b723e6ef..0222213d5 100644 --- a/lib/rocksdb/spdk.rocksdb.mk +++ b/lib/rocksdb/spdk.rocksdb.mk @@ -37,7 +37,7 @@ include $(SPDK_ROOT_DIR)/mk/spdk.common.mk include $(SPDK_ROOT_DIR)/mk/spdk.app.mk include $(SPDK_ROOT_DIR)/mk/spdk.modules.mk -CXXFLAGS += -I$(SPDK_DIR)/include -Iutil/ -Ienv/ +CXXFLAGS += -I$(SPDK_DIR)/include -Iinclude/ # The SPDK makefiles turn this on, but RocksDB won't compile with it. So # turn it off after including the SPDK makefiles.