From 7ff80825a16b91ef2c0374776f0d140068153d0b Mon Sep 17 00:00:00 2001 From: nsensfel Date: Wed, 12 Dec 2018 16:57:44 +0100 Subject: Moving TO's DB system to its own repository. --- src/ataxia_client.erl | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 src/ataxia_client.erl (limited to 'src/ataxia_client.erl') diff --git a/src/ataxia_client.erl b/src/ataxia_client.erl new file mode 100644 index 0000000..f1b96e1 --- /dev/null +++ b/src/ataxia_client.erl @@ -0,0 +1,158 @@ +-module(ataxia_client). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export +( + [ + insert_at/5, + insert/4, + remove/3, + fetch/3, + reserve/3, + commit/1 + ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec get_debug_db_node () -> node(). +get_debug_db_node () -> list_to_atom("db_node@" ++ net_adm:localhost()). + +-spec get_random_db_node () -> node(). +get_random_db_node () -> + get_debug_db_node(). + +-spec get_db_node_for (binary()) -> node(). +get_db_node_for (_ObjectID) -> + get_debug_db_node(). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec insert_at + ( + atom(), + binary(), + ataxia_security:permission(), + ataxia_security:permission(), + any() + ) + -> 'ok'. +insert_at (DB, ObjectID, ReadPerm, WritePerm, Value) -> + DBNode = get_db_node_for(ObjectID), + + {atomic, _} = + rpc:call + ( + DBNode, + db_access, + insert_at, + [DB, ObjectID, ReadPerm, WritePerm, Value] + ), + + io:format + ( + "~nshr_database:insert_at(~p) ! ~p -> ok.~n", + [{DB, ObjectID, ReadPerm, WritePerm, Value}, DBNode] + ), + + ok. + +-spec insert + ( + atom(), + ataxia_security:permission(), + ataxia_security:permission(), + any() + ) + -> {'ok', binary()}. +insert (DB, ReadPerm, WritePerm, Value) -> + DBNode = get_random_db_node(), + + {atomic, {ok, ID}} = + rpc:call(DBNode, db_access, insert, [DB, ReadPerm, WritePerm, Value]), + + io:format + ( + "~nshr_database:insert(~p) ! ~p -> ok.~n", + [{DB, ReadPerm, WritePerm, Value}, DBNode] + ), + + {ok, ID}. + +-spec fetch + ( + atom(), + binary(), + ataxia_security:user() + ) + -> ({'ok', any()} | 'not_found'). +fetch (DB, ObjectID, Cred) -> + DBNode = get_db_node_for(ObjectID), + + {atomic, Reply} = rpc:call(DBNode, db_access, read, [DB, ObjectID, Cred]), + + io:format + ( + "~nshr_database:fetch(~p) ! ~p -> ~p.~n", + [{DB, ObjectID, Cred}, DBNode, Reply] + ), + + Reply. + +-spec commit (shr_db_query:type()) -> 'ok'. +commit (Query) -> + DBNode = get_db_node_for(shr_db_query:get_entry_id(Query)), + + {atomic, ok} = rpc:call(DBNode, db_access, query, [Query]), + + io:format("~nshr_database:commit(~p) ! ~p -> ok.~n", [Query, DBNode]), + + ok. + +-spec remove + ( + atom(), + binary(), + ataxia_security:user() + ) + -> ('ok' | 'not_found'). +remove (DB, ObjectID, Cred) -> + DBNode = get_db_node_for(ObjectID), + + {atomic, _} = rpc:call(DBNode, db_access, remove, [DB, ObjectID, Cred]), + + io:format + ( + "~nshr_database:remove(~p) ! ~p -> ok.~n", + [{DB, ObjectID, Cred}, DBNode] + ), + + ok. + +-spec reserve + ( + atom(), + binary(), + ataxia_security:user() + ) + -> ('ok' | 'not_found'). +reserve (DB, ObjectID, Cred) -> + DBNode = get_db_node_for(ObjectID), + + {atomic, _} = rpc:call(DBNode, db_access, reserve, [DB, ObjectID, Cred]), + + io:format + ( + "~nshr_database:reserve(~p) ! ~p -> ok.~n", + [{DB, ObjectID, Cred}, DBNode] + ), + + ok. -- cgit v1.2.3-70-g09d2