Skip to content

Commit 85ee961

Browse files
author
wulei
committed
dispose: physically destory db
1 parent a3f0c8a commit 85ee961

File tree

4 files changed

+26
-7
lines changed

4 files changed

+26
-7
lines changed

c_src/elmdb_nif.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,16 @@ static ERL_NIF_TERM elmdb_close(ErlNifEnv* env, int argc, const ERL_NIF_TERM arg
197197
return enif_raise_exception(env, enif_make_string(env, "closed lmdb", ERL_NIF_LATIN1));\
198198
}
199199

200+
static ERL_NIF_TERM elmdb_path(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {
201+
__UNUSED(argc);
202+
lmdb_env_t *handle = NULL;
203+
CHECKOUT_ARG_FOR_DB(handle);
204+
const char* path;
205+
mdb_env_get_path(handle->env, &path);
206+
DBG("path: %s",path);
207+
return enif_make_string(env, path, ERL_NIF_LATIN1);
208+
}
209+
200210
static ERL_NIF_TERM elmdb_drop(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {
201211
__UNUSED(argc);
202212
lmdb_env_t *handle = NULL;
@@ -912,6 +922,7 @@ static ErlNifFunc nif_funcs[] = {
912922
{"init", 1, elmdb_init, ERL_NIF_DIRTY_JOB_IO_BOUND},
913923
{"close", 1, elmdb_close, ERL_NIF_DIRTY_JOB_IO_BOUND},
914924
{"drop", 2, elmdb_drop, ERL_NIF_DIRTY_JOB_IO_BOUND},
925+
{"db_path", 1, elmdb_path, 0},
915926
{"count", 2, elmdb_count, 0},
916927
{"put", 3, elmdb_put, 0},
917928
{"get", 2, elmdb_get, 0},

src/elmdb.erl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
-export([to_map/2]).
55

66
-export([open/1]).
7+
-export([dispose/1]).
78
-export([close/1]).
89
-export([drop/2]).
910
-export([count/2]).
@@ -55,6 +56,16 @@ init(_) ->
5556
close(_) ->
5657
erlang:nif_error({not_loaded, ?MODULE}).
5758

59+
db_path(_) ->
60+
erlang:nif_error({not_loaded, ?MODULE}).
61+
62+
-spec dispose(reference()) -> ok | {error, term()}.
63+
dispose(LmdbRes) ->
64+
Dir = db_path(LmdbRes),
65+
ok = close(LmdbRes),
66+
[file:delete(F) || F <- filelib:wildcard(Dir ++ "*")],
67+
file:del_dir(Dir).
68+
5869
-spec drop(reference(), string()) -> ok | {error, any()}.
5970
drop(_LmdbRes, _Layer) ->
6071
erlang:nif_error({not_loaded, ?MODULE}).

test/elmdb_foldl_test.erl

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ teardown(D) ->
1313
[elmdb:drop(D, L) || L <- elmdb:ls(D)],
1414
%%ok = elmdb:close(D),
1515

16-
Dir = "./mytestdb2/",
17-
[file:delete(F) || F <- filelib:wildcard(Dir ++ "*")],
18-
file:del_dir(Dir).
16+
elmdb:dispose(D).
1917

2018
fold_db(D) ->
2119
[fold_normal_db(D), fold_empty_db(D)].

test/elmdb_test.erl

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@ startup() ->
1111

1212
teardown(D) ->
1313
[elmdb:drop(D, L) || L <- elmdb:ls(D)],
14-
ok = elmdb:close(D),
14+
Dir0 = elmdb:dispose(D),
1515
Dir = "./mytestdb1/",
16-
?debugFmt("teardown.......... @dir=~ts", [Dir]),
17-
[file:delete(F) || F <- filelib:wildcard(Dir ++ "*")],
18-
file:del_dir(Dir).
16+
?debugFmt("teardown.......... @path=~ts", [Dir0]),
17+
ok.
1918

2019

2120
list_db(D) ->

0 commit comments

Comments
 (0)