SunRiseGG 3 лет назад
Родитель
Сommit
2fd4693ea9
4 измененных файлов с 17 добавлено и 5 удалено
  1. 3 2
      include/backend.hrl
  2. 6 1
      src/stores/kvs_fs.erl
  3. 5 2
      src/stores/kvs_mnesia.erl
  4. 3 0
      src/stores/kvs_rocks.erl

+ 3 - 2
include/backend.hrl

@@ -1,9 +1,10 @@
 -ifndef(BACKEND_HRL).
 -define(BACKEND_HRL, true).
--define(BACKEND, [db/0,get/3,put/2,delete/3,index/3,dump/0,start/0,stop/0,destroy/1,
-                  join/2,leave/1,dir/0,create_table/2,add_table_index/2,seq/2,all/2,count/1,version/0]).
+-define(BACKEND, [db/0,get/3,put/1,put/2,delete/3,index/3,dump/0,start/0,stop/0,destroy/0,destroy/1,
+                  join/2,leave/0,leave/1,dir/0,create_table/2,add_table_index/2,seq/2,all/2,count/1,version/0]).
 -compile({no_auto_import,[get/1,put/2]}).
 -include("kvs.hrl").
+-spec put(tuple() | list(tuple())) -> ok | {error,any()}.
 -spec put(tuple() | list(tuple()), #kvs{}) -> ok | {error,any()}.
 -spec get(term() | any(), any(), #kvs{}) -> {ok,any()} | {error,not_found}.
 -spec delete(term(), any(), #kvs{}) -> ok | {error,not_found}.

+ 6 - 1
src/stores/kvs_fs.erl

@@ -11,11 +11,15 @@ start()     -> ok.
 
 stop()      -> ok.
 
+destroy()   -> ok.
+
 destroy(_)  -> ok.
 
 version()   -> {version,"KVS FS"}.
 
-leave(_)     -> ok.
+leave()     -> ok.
+
+leave(_)    -> ok.
 
 dir()       -> [ {table,F} || F <- filelib:wildcard("data/*"), filelib:is_dir(F) ].
 
@@ -35,6 +39,7 @@ get(TableName, Key, _) ->
          {ok,Binary} -> {ok,binary_to_term(Binary,[safe])};
          {error,Reason} -> {error,Reason} end.
 
+put(R) -> put(R,db()).
 put(Records,X) when is_list(Records) -> lists:map(fun(Record) -> put(Record,X) end, Records);
 put(Record,_) ->
     TableName = element(1,Record),

+ 5 - 2
src/stores/kvs_mnesia.erl

@@ -10,8 +10,10 @@
 db()       -> "".
 start()    -> mnesia:start().
 stop()     -> mnesia:stop().
-destroy(_)  -> [mnesia:delete_table(T)||{_,T}<-kvs:dir()], mnesia:delete_schema([node()]), ok.
-leave(_)    -> ok.
+destroy()  -> [mnesia:delete_table(T)||{_,T}<-kvs:dir()], mnesia:delete_schema([node()]), ok.
+destroy(_) -> [mnesia:delete_table(T)||{_,T}<-kvs:dir()], mnesia:delete_schema([node()]), ok.
+leave()    -> ok.
+leave(_)   -> ok.
 version()  -> {version,"KVS MNESIA"}.
 dir()      -> [{table,T}||T<-mnesia:system_info(local_tables)].
 join([], _)   -> mnesia:start(), mnesia:change_table_copy_type(schema, node(), disc_copies), initialize();
@@ -34,6 +36,7 @@ index(Tab,Key,Value) ->
     lists:flatten(many(fun() -> mnesia:index_read(Tab,Value,Key) end)).
 
 get(RecordName, Key, _) -> just_one(fun() -> mnesia:read(RecordName, Key) end).
+put(R)                  -> put(R,db()).
 put(Records, _) when is_list(Records) -> void(fun() -> lists:foreach(fun mnesia:write/1, Records) end);
 put(Record, X) -> put([Record], X).
 delete(Tab, Key, _) ->

+ 3 - 0
src/stores/kvs_rocks.erl

@@ -95,11 +95,13 @@ ref_env(Db)       -> list_to_atom("rocks_ref_" ++ Db).
 db()              -> application:get_env(kvs,rocks_name,"rocksdb").
 start()           -> ok.
 stop()            -> ok.
+destroy()         -> destroy(db()).
 destroy(Db)       -> rocksdb:destroy(Db, []).
 version()         -> {version,"KVS ROCKSDB"}.
 dir()             -> [].
 ref()             -> ref(db()).
 ref(Db)           -> application:get_env(kvs,ref_env(Db),[]).
+leave()           -> leave(db()).
 leave(Db)         -> case ref(Db) of [] -> skip; X -> rocksdb:close(X), application:set_env(kvs,ref_env(Db),[]), ok end.
 join(_,Db)        ->
               application:start(rocksdb),
@@ -130,6 +132,7 @@ get(Tab, Key, Db) ->
          not_found -> {error,not_found};
          {ok,Bin} -> {ok,bt(Bin)} end.
 
+put(Record) -> put(Record,db()).
 put(Records,Db) when is_list(Records) -> lists:map(fun(Record) -> put(Record,Db) end, Records);
 put(Record,Db) -> rocksdb:put(ref(Db), key(Record), term_to_binary(Record), [{sync,true}]).
 delete(Feed, Id, Db) -> rocksdb:delete(ref(Db), key(Feed,Id), []).