Browse Source

destroy impl

dxt 4 years ago
parent
commit
2a3837cf95
6 changed files with 18 additions and 14 deletions
  1. 2 1
      include/api.hrl
  2. 4 4
      include/cursors.hrl
  3. 2 0
      src/kvs.erl
  4. 1 1
      src/stores/kvs_mnesia.erl
  5. 3 3
      src/stores/kvs_rocks.erl
  6. 6 5
      test/old_test.exs

+ 2 - 1
include/api.hrl

@@ -1,6 +1,6 @@
 -ifndef(API_HRL).
 -define(API_HRL, true).
--define(API,[start/0,stop/0,leave/0,leave/1,
+-define(API,[start/0,stop/0,leave/0,leave/1,destroy/0,
              join/0,join/1,modules/0,cursors/0,get/2,get/3,put/1,put/2,index/3,delete/2,
              table/1,tables/0,dir/0,initialize/2,seq/2,all/1,all/2,count/1,ver/0]).
 -include("metainfo.hrl").
@@ -9,6 +9,7 @@
 -spec dir() -> list({'table',atom()}).
 -spec ver() -> {'version',string()}.
 -spec leave() -> ok.
+-spec destroy() -> ok.
 -spec join() -> ok | {error,any()}.
 -spec join(Node :: string()) -> [{atom(),any()}].
 -spec modules() -> list(atom()).

+ 4 - 4
include/cursors.hrl

@@ -3,13 +3,13 @@
 
 -record(writer, { id    = [] :: term(),
                   count =  0 :: integer(),
-                  cache = [] :: [] | integer() | {term(),term()},
-                  args  = [] :: term(),
+                  cache = [] :: [] | {term(),term()} | {term(),term(),term()},
+                  args  = [] :: [] | term(),
                   first = [] :: [] | tuple() } ).
 -record(reader, { id    = [] :: [] | integer(),
                 pos   =  0 :: integer() | atom(),
-                cache = [] :: [] | integer() | {term(),term()},
-                args  = 0 :: term(),
+                cache = [] :: [] | {term(),term()} | {term(),term(),term()},
+                args  = [] :: [] | integer() | term(),
                 feed  = [] :: term(),
                 seek = [] :: term(),
                 count = 0 :: integer(),

+ 2 - 0
src/kvs.erl

@@ -54,6 +54,7 @@ join()             -> join    ([],    #kvs{mod=dba()}).
 dump()             -> dump    (#kvs{mod=dba()}).
 join(Node)         -> join    (Node,  #kvs{mod=dba()}).
 leave()            -> leave   (#kvs{mod=dba()}).
+destroy()          -> destroy (#kvs{mod=dba()}).
 count(Table)       -> count   (Table, #kvs{mod=dba()}).
 put(Record)        -> ?MODULE:put     (Record, #kvs{mod=dba()}).
 fold(Fun,Acc,T,S,C,D) -> fold (Fun,Acc,T,S,C,D, #kvs{mod=dba()}).
@@ -100,6 +101,7 @@ start(#kvs{mod=DBA}) -> DBA:start().
 stop_kvs(#kvs{mod=DBA}) -> DBA:stop().
 join(Node,#kvs{mod=DBA}) -> DBA:join(Node).
 leave(#kvs{mod=DBA}) -> DBA:leave().
+destroy(#kvs{mod=DBA}) -> DBA:destroy().
 ver(#kvs{mod=DBA}) -> DBA:version().
 tables() -> lists:flatten([ (M:metainfo())#schema.tables || M <- modules() ]).
 table(Name) when is_atom(Name) -> lists:keyfind(Name,#table.name,tables());

+ 1 - 1
src/stores/kvs_mnesia.erl

@@ -42,7 +42,7 @@ count(RecordName) -> mnesia:table_info(RecordName, size).
 all(R) -> lists:flatten(many(fun() -> L= mnesia:all_keys(R), [ mnesia:read({R, G}) || G <- L ] end)).
 seq([],[]) ->
   case os:type() of
-       {win32,nt} -> {Mega,Sec,Micro} = erlang:now(), integer_to_list((Mega*1000000+Sec)*1000000+Micro);
+       {win32,nt} -> {Mega,Sec,Micro} = erlang:timestamp(), integer_to_list((Mega*1000000+Sec)*1000000+Micro);
                 _ -> erlang:integer_to_list(element(2,hd(lists:reverse(erlang:system_info(os_monotonic_time_source)))))
   end;
 seq(RecordName, Incr) -> mnesia:dirty_update_counter({id_seq, RecordName}, Incr).

+ 3 - 3
src/stores/kvs_rocks.erl

@@ -10,10 +10,10 @@ bt([])     -> [];
 bt(X)      -> binary_to_term(X).
 start()    -> ok.
 stop()     -> ok.
-destroy()  -> rocksdb:destroy(application:get_env(kvs,rocks_name,"rocksdb")).
+destroy()  -> rocksdb:destroy(application:get_env(kvs,rocks_name,"rocksdb"), []).
 version()  -> {version,"KVS ROCKSDB"}.
 dir()      -> [].
-leave() -> case ref() of [] -> skip; X -> rocksdb:close(X), application:set_env(kvs,rocks_ref,[]), X end.
+leave() -> case ref() of [] -> skip; X -> rocksdb:close(X), application:set_env(kvs,rocks_ref,[]), ok end.
 join(_) -> application:start(rocksdb),
            leave(), {ok, Ref} = rocksdb:open(application:get_env(kvs,rocks_name,"rocksdb"), [{create_if_missing, true}]),
            initialize(),
@@ -91,7 +91,7 @@ cut(_,_,_,_,_,_,_,C) -> C.
 
 seq(_,_) ->
   case os:type() of
-       {win32,nt} -> {Mega,Sec,Micro} = erlang:now(), integer_to_list((Mega*1000000+Sec)*1000000+Micro);
+       {win32,nt} -> {Mega,Sec,Micro} = erlang:timestamp(), integer_to_list((Mega*1000000+Sec)*1000000+Micro);
                 _ -> erlang:integer_to_list(element(2,hd(lists:reverse(erlang:system_info(os_monotonic_time_source)))))
   end.
 

+ 6 - 5
test/old_test.exs

@@ -4,7 +4,7 @@ defmodule OLD.Test do
   use ExUnit.Case, async: true
   require KVS
 
-  setup do: (on_exit(fn -> :ok = :kvs.leave();:ok = :kvs_rocks.destroy() end);:kvs.join())
+  setup do: (on_exit(fn -> :ok = :kvs.leave();:ok = :kvs.destroy() end);:kvs.join())
 
   test "basic" do
     id1 = {:basic, :kvs.seq([], [])}
@@ -25,7 +25,7 @@ defmodule OLD.Test do
     r2 = :kvs.save(:kvs.reader(id2))
     x1 = :kvs.take(KVS.reader(:kvs.load_reader(KVS.reader(r1, :id)), args: 20))
     x2 = :kvs.take(KVS.reader(:kvs.load_reader(KVS.reader(r2, :id)), args: 20))
-    b = :kvs.feed(id1)
+    b = KVS.reader(:kvs.feed(id1), :args)
 
     case :application.get_env(:kvs, :dba_st, :kvs_st) do
       :kvs_st ->
@@ -38,6 +38,7 @@ defmodule OLD.Test do
     end
 
     assert KVS.reader(x1, :args) == b
+
     assert length(KVS.reader(x1, :args)) == length(KVS.reader(x2, :args))
     assert x == length(b)
   end
@@ -69,8 +70,8 @@ defmodule OLD.Test do
     :lists.map(fn _ -> :kvs.append({:"$msg", [], [], [], [], []}, id) end, :lists.seq(1, x))
     KVS.reader(id: rid) = :kvs.save(:kvs.reader(id))
     t = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: 20))
-    b = :kvs.feed(id)
-    # mnesia
+    b = KVS.reader(:kvs.feed(id), :args)
+    #: mnesia
     assert KVS.reader(t, :args) == b
   end
 
@@ -85,7 +86,7 @@ defmodule OLD.Test do
     :kvs.save(KVS.reader(t, dir: 1))
     log("t:", t)
     n = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: 5))
-    b = :kvs.feed(id)
+    b = KVS.reader(:kvs.feed(id), :args)
     log("n:", n)
     assert KVS.reader(n, :args) == KVS.reader(t, :args)
     assert KVS.reader(t, :args) == b