|
@@ -13,7 +13,7 @@ dir() -> [{table,T}||T<-mnesia:system_info(local_tables)].
|
|
join() -> mnesia:change_table_copy_type(schema, node(), disc_copies), initialize().
|
|
join() -> mnesia:change_table_copy_type(schema, node(), disc_copies), initialize().
|
|
join(Node) ->
|
|
join(Node) ->
|
|
mnesia:change_config(extra_db_nodes, [Node]),
|
|
mnesia:change_config(extra_db_nodes, [Node]),
|
|
- mnesia:change_table_copy_type(schema, node(), disc_copies),
|
|
|
|
|
|
+ mnesia:change_table_copy_type(schema, node(), kvs:config(kvs,mnesia_media,disc_copies)),
|
|
[{Tb, mnesia:add_table_copy(Tb, node(), Type)}
|
|
[{Tb, mnesia:add_table_copy(Tb, node(), Type)}
|
|
|| {Tb, [{N, Type}]} <- [{T, mnesia:table_info(T, where_to_commit)}
|
|
|| {Tb, [{N, Type}]} <- [{T, mnesia:table_info(T, where_to_commit)}
|
|
|| T <- mnesia:system_info(tables)], Node==N].
|
|
|| T <- mnesia:system_info(tables)], Node==N].
|
|
@@ -21,7 +21,7 @@ join(Node) ->
|
|
change_storage(Table,Type) -> mnesia:change_table_copy_type(Table, node(), Type).
|
|
change_storage(Table,Type) -> mnesia:change_table_copy_type(Table, node(), Type).
|
|
|
|
|
|
initialize() ->
|
|
initialize() ->
|
|
- kvs:info(?MODULE,"[store_mnesia] mnesia init.~n",[]),
|
|
|
|
|
|
+ kvs:info(?MODULE,"mnesia init.~n",[]),
|
|
mnesia:create_schema([node()]),
|
|
mnesia:create_schema([node()]),
|
|
[ kvs:init(store_mnesia,Module) || Module <- kvs:modules() ],
|
|
[ kvs:init(store_mnesia,Module) || Module <- kvs:modules() ],
|
|
mnesia:wait_for_tables([ T#table.name || T <- kvs:tables()],infinity).
|
|
mnesia:wait_for_tables([ T#table.name || T <- kvs:tables()],infinity).
|
|
@@ -35,23 +35,29 @@ get(RecordName, Key) -> just_one(fun() -> mnesia:read(RecordName, Key) end).
|
|
put(Records) when is_list(Records) -> void(fun() -> lists:foreach(fun mnesia:write/1, Records) end);
|
|
put(Records) when is_list(Records) -> void(fun() -> lists:foreach(fun mnesia:write/1, Records) end);
|
|
put(Record) -> put([Record]).
|
|
put(Record) -> put([Record]).
|
|
delete(Tab, Key) ->
|
|
delete(Tab, Key) ->
|
|
- case mnesia:transaction(fun()-> mnesia:delete({Tab, Key}) end) of
|
|
|
|
|
|
+ case mnesia:activity(context(),fun()-> mnesia:delete({Tab, Key}) end) of
|
|
{aborted,Reason} -> {error,Reason};
|
|
{aborted,Reason} -> {error,Reason};
|
|
- {atomic,_Result} -> ok end.
|
|
|
|
|
|
+ {atomic,_Result} -> ok;
|
|
|
|
+ X -> X end.
|
|
count(RecordName) -> mnesia:table_info(RecordName, size).
|
|
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)).
|
|
all(R) -> lists:flatten(many(fun() -> L= mnesia:all_keys(R), [ mnesia:read({R, G}) || G <- L ] end)).
|
|
next_id(RecordName, Incr) -> mnesia:dirty_update_counter({id_seq, RecordName}, Incr).
|
|
next_id(RecordName, Incr) -> mnesia:dirty_update_counter({id_seq, RecordName}, Incr).
|
|
-many(Fun) -> case mnesia:transaction(Fun) of {atomic, R} -> R; _ -> [] end.
|
|
|
|
-void(Fun) -> case mnesia:transaction(Fun) of {atomic, ok} -> ok; {aborted, Error} -> {error, Error} end.
|
|
|
|
-create_table(Name,Options) ->
|
|
|
|
|
|
+many(Fun) -> case mnesia:activity(context(),Fun) of {atomic, R} -> R; X -> X end.
|
|
|
|
+void(Fun) -> case mnesia:activity(context(),Fun) of {atomic, ok} -> ok; {aborted, Error} -> {error, Error}; X -> X end.
|
|
|
|
+create_table(Name,Options) ->
|
|
X = mnesia:create_table(Name, Options),
|
|
X = mnesia:create_table(Name, Options),
|
|
- kvs:info("Create table ~p ~nOptions ~p~nReturn ~p~n",[Name, Options,X]),
|
|
|
|
|
|
+ kvs:info(?MODULE,"Create table ~p ~nOptions ~p~nReturn ~p~n",[Name, Options,X]),
|
|
X.
|
|
X.
|
|
add_table_index(Record, Field) -> mnesia:add_table_index(Record, Field).
|
|
add_table_index(Record, Field) -> mnesia:add_table_index(Record, Field).
|
|
-exec(Q) -> F = fun() -> qlc:e(Q) end, {atomic, Val} = mnesia:transaction(F), Val.
|
|
|
|
|
|
+exec(Q) -> F = fun() -> qlc:e(Q) end, {atomic, Val} = mnesia:activity(context(),F), Val.
|
|
just_one(Fun) ->
|
|
just_one(Fun) ->
|
|
- case mnesia:transaction(Fun) of
|
|
|
|
|
|
+ case mnesia:activity(context(),Fun) of
|
|
{atomic, []} -> {error, not_found};
|
|
{atomic, []} -> {error, not_found};
|
|
{atomic, [R]} -> {ok, R};
|
|
{atomic, [R]} -> {ok, R};
|
|
{atomic, [_|_]} -> {error, duplicated};
|
|
{atomic, [_|_]} -> {error, duplicated};
|
|
|
|
+ [] -> {error, not_found};
|
|
|
|
+ [R] -> {ok,R};
|
|
|
|
+ [_|_] -> {error, duplicated};
|
|
Error -> Error end.
|
|
Error -> Error end.
|
|
|
|
+
|
|
|
|
+context() -> kvs:config(kvs,mnesia_context,async_dirty).
|