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 <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/370585
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
This commit is contained in:
Ben Walker 2017-07-18 15:06:28 -07:00
parent 77bcc2454d
commit 62cf827925
2 changed files with 30 additions and 24 deletions

View File

@ -31,7 +31,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include "env_posix.cc" #include "rocksdb/env.h"
extern "C" { extern "C" {
#include "spdk/env.h" #include "spdk/env.h"
@ -265,7 +265,7 @@ public:
} }
}; };
class SpdkEnv : public PosixEnv class SpdkEnv : public EnvWrapper
{ {
private: private:
pthread_t mSpdkTid; pthread_t mSpdkTid;
@ -274,7 +274,7 @@ private:
std::string mBdev; std::string mBdev;
public: 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); const std::string &bdev, uint64_t cache_size_in_mb);
virtual ~SpdkEnv(); virtual ~SpdkEnv();
@ -298,10 +298,10 @@ public:
* support MySQL, set the errno to right value. * support MySQL, set the errno to right value.
*/ */
errno = -rc; errno = -rc;
return IOError(fname, errno); return Status::IOError(fname, strerror(errno));
} }
} else { } 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)); result->reset(new SpdkRandomAccessFile(basename(fname), options));
return Status::OK(); return Status::OK();
} else { } 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)); result->reset(new SpdkWritableFile(basename(fname), options));
return Status::OK(); return Status::OK();
} else { } else {
return PosixEnv::NewWritableFile(fname, result, options); return EnvWrapper::NewWritableFile(fname, result, options);
} }
} }
@ -334,7 +334,7 @@ public:
unique_ptr<WritableFile> *result, unique_ptr<WritableFile> *result,
const EnvOptions &options) override 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, virtual Status NewDirectory(const std::string &name,
@ -353,7 +353,7 @@ public:
if (rc == 0) { if (rc == 0) {
return Status::OK(); return Status::OK();
} }
return PosixEnv::FileExists(fname); return EnvWrapper::FileExists(fname);
} }
virtual Status RenameFile(const std::string &src, const std::string &target) override 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, rc = spdk_fs_rename_file(g_fs, g_sync_args.channel,
src_base.c_str(), target_base.c_str()); src_base.c_str(), target_base.c_str());
if (rc == -ENOENT) { if (rc == -ENOENT) {
return PosixEnv::RenameFile(src, target); return EnvWrapper::RenameFile(src, target);
} }
return Status::OK(); return Status::OK();
} }
@ -380,7 +380,7 @@ public:
rc = spdk_fs_file_stat(g_fs, g_sync_args.channel, fname_base.c_str(), &stat); rc = spdk_fs_file_stat(g_fs, g_sync_args.channel, fname_base.c_str(), &stat);
if (rc == -ENOENT) { if (rc == -ENOENT) {
return PosixEnv::GetFileSize(fname, size); return EnvWrapper::GetFileSize(fname, size);
} }
*size = stat.size; *size = stat.size;
return Status::OK(); return Status::OK();
@ -391,7 +391,7 @@ public:
std::string fname_base = basename(fname); std::string fname_base = basename(fname);
rc = spdk_fs_delete_file(g_fs, g_sync_args.channel, fname_base.c_str()); rc = spdk_fs_delete_file(g_fs, g_sync_args.channel, fname_base.c_str());
if (rc == -ENOENT) { if (rc == -ENOENT) {
return PosixEnv::DeleteFile(fname); return EnvWrapper::DeleteFile(fname);
} }
return Status::OK(); return Status::OK();
} }
@ -425,7 +425,7 @@ public:
} }
return Status::OK(); 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) static void SpdkStartThreadWrapper(void *arg)
{ {
StartThreadState *state = reinterpret_cast<StartThreadState *>(arg); SpdkThreadState *state = reinterpret_cast<SpdkThreadState *>(arg);
SpdkInitializeThread(); SpdkInitializeThread();
StartThreadWrapper(state); state->user_function(state->arg);
delete state;
} }
void SpdkEnv::StartThread(void (*function)(void *arg), void *arg) void SpdkEnv::StartThread(void (*function)(void *arg), void *arg)
{ {
StartThreadState *state = new StartThreadState; SpdkThreadState *state = new SpdkThreadState;
state->user_function = function; state->user_function = function;
state->arg = arg; state->arg = arg;
PosixEnv::StartThread(SpdkStartThreadWrapper, state); EnvWrapper::StartThread(SpdkStartThreadWrapper, state);
} }
static void static void
@ -517,9 +523,9 @@ initialize_spdk(void *arg)
pthread_exit(NULL); 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) 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; struct spdk_app_opts *opts = new struct spdk_app_opts;
@ -546,16 +552,16 @@ SpdkEnv::~SpdkEnv()
pthread_join(mSpdkTid, NULL); 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) 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) { if (g_fs != NULL) {
*env = spdk_env; return spdk_env;
} else { } else {
*env = NULL;
delete spdk_env; delete spdk_env;
return NULL;
} }
} }

View File

@ -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.app.mk
include $(SPDK_ROOT_DIR)/mk/spdk.modules.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 # The SPDK makefiles turn this on, but RocksDB won't compile with it. So
# turn it off after including the SPDK makefiles. # turn it off after including the SPDK makefiles.