From fb5e962542cbfa6cd5a05f6c2837e917b0f1c7dc Mon Sep 17 00:00:00 2001 From: evan Date: Thu, 2 Jan 2014 14:43:46 -0800 Subject: [PATCH] - start with scott's commit 0d3acb0 - fix the issue introduced in 6c97173 more mininally - ifdef out env reading even though it doesn't matter --- Makefile | 4 ++-- src/bitcask.erl | 10 ++-------- src/bitcask_fileops.erl | 4 +++- src/bitcask_io.erl | 18 ++++++++++++++++++ 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index aceee792..90d348bc 100644 --- a/Makefile +++ b/Makefile @@ -23,10 +23,10 @@ clean: test: deps compile eunit_erlang eunit_nif eunit_erlang: - IOMODE="erlang" $(REBAR_BIN) skip_deps=true eunit + BITCASK_IO_MODE="erlang" $(REBAR_BIN) skip_deps=true eunit eunit_nif: - IOMODE="nif" $(REBAR_BIN) skip_deps=true eunit + BITCASK_IO_MODE="nif" $(REBAR_BIN) skip_deps=true eunit # Release tarball creation diff --git a/src/bitcask.erl b/src/bitcask.erl index 9308309d..3707798e 100644 --- a/src/bitcask.erl +++ b/src/bitcask.erl @@ -1386,17 +1386,11 @@ default_dataset() -> %% HACK: Terrible hack to ensure that the .app file for %% bitcask is available on the code path. Assumption here %% is that we're running in .eunit/ as part of rebar. -%% MORE HACK: init the io mode (nif or erlang) here. a0_test() -> code:add_pathz("../ebin"), application:start(erlang), - Mode0 = case os:getenv("IOMODE") of - false -> "erlang"; - Else -> Else - end, - Mode = list_to_atom(Mode0), - application:set_env(bitcask, io_mode, Mode), - error_logger:info_msg("Set IO mode to: ~p", [Mode]). + Mode = bitcask_io:determine_file_module(), + error_logger:info_msg("Bitcask IO mode is: ~p\n", [Mode]). roundtrip_test() -> os:cmd("rm -rf /tmp/bc.test.roundtrip"), diff --git a/src/bitcask_fileops.erl b/src/bitcask_fileops.erl index efa6acd2..b4c515f3 100644 --- a/src/bitcask_fileops.erl +++ b/src/bitcask_fileops.erl @@ -65,7 +65,9 @@ -spec create_file(Dirname :: string(), Opts :: [any()], reference()) -> {ok, #filestate{}}. -create_file(DirName, Opts, Keydir) -> + +create_file(DirName, Opts0, Keydir) -> + Opts = [create|Opts0], {ok, Lock} = get_create_lock(DirName), try {ok, Newest} = bitcask_nifs:increment_file_id(Keydir), diff --git a/src/bitcask_io.erl b/src/bitcask_io.erl index 5ef08b2d..7a3f2611 100644 --- a/src/bitcask_io.erl +++ b/src/bitcask_io.erl @@ -68,6 +68,23 @@ file_module() -> Mod end. +-ifdef(TEST). +determine_file_module() -> + case application:get_env(bitcask, io_mode) of + {ok, erlang} -> + bitcask_file; + {ok, nif} -> + bitcask_nifs; + _ -> + Mode = case os:getenv("BITCASK_IO_MODE") of + false -> 'erlang'; + "erlang" -> 'erlang'; + "nif" -> 'nif' + end, + application:set_env(bitcask, io_mode, Mode), + determine_file_module() + end. +-else. determine_file_module() -> case application:get_env(bitcask, io_mode) of {ok, erlang} -> @@ -77,3 +94,4 @@ determine_file_module() -> _ -> bitcask_file end. +-endif.