Просмотр исходного кода

kvs:add from now on is transactional aware

Namdak Tonpa 9 лет назад
Родитель
Сommit
366316a500
2 измененных файлов с 6 добавлено и 1 удалено
  1. 4 1
      src/kvs.erl
  2. 2 0
      src/store/store_mnesia.erl

+ 4 - 1
src/kvs.erl

@@ -138,7 +138,10 @@ link(Record,#kvs{mod=_Store}=Driver) ->
               {ok, Exists} -> ensure_link(Exists, Driver);
         {error, not_found} -> {error, not_found} end.
 
-add(Record, #kvs{mod=_Store}=Driver) when is_tuple(Record) ->
+add(Record, #kvs{mod=store_mnesia}=Driver) when is_tuple(Record) -> store_mnesia:add(Record);
+add(Record, #kvs{mod=Store}=Driver) when is_tuple(Record) -> append(Record,Driver).
+
+append(Record, #kvs{mod=_Store}=Driver) when is_tuple(Record) ->
     Id = element(#iterator.id, Record),
     Name = rname(element(1,Record)),
     generation(Name, Id),

+ 2 - 0
src/store/store_mnesia.erl

@@ -1,6 +1,7 @@
 -module(store_mnesia).
 -copyright('Synrc Research Center s.r.o.').
 -include("config.hrl").
+-include("kvs.hrl").
 -include("metainfo.hrl").
 -include_lib("stdlib/include/qlc.hrl").
 -compile(export_all).
@@ -61,4 +62,5 @@ just_one(Fun) ->
         [_|_] -> {error, duplicated};
         Error -> Error end.
 
+add(Record) -> mnesia:activity(transaction,fun() -> kvs:append(Record,#kvs{mod=?MODULE}) end).
 context() -> kvs:config(kvs,mnesia_context,async_dirty).