summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2018-08-10 16:46:05 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2018-08-10 16:46:05 +0200
commitd1ab7e7cfe14f2cad9774db47f4f1dd995e5b40c (patch)
treeb4833d2114cb12b2997d33549427a204140c134c /src/shared/io/shr_database.erl
parentcbae439196de8382d5218f11e7a3afd812a5ae52 (diff)
Adds some progress on user registration.
Diffstat (limited to 'src/shared/io/shr_database.erl')
-rw-r--r--src/shared/io/shr_database.erl126
1 files changed, 103 insertions, 23 deletions
diff --git a/src/shared/io/shr_database.erl b/src/shared/io/shr_database.erl
index 60327a5..c1792dc 100644
--- a/src/shared/io/shr_database.erl
+++ b/src/shared/io/shr_database.erl
@@ -10,8 +10,11 @@
-export
(
[
- insert/5,
+ insert_at/5,
+ insert/4,
+ remove/3,
fetch/3,
+ reserve/3,
commit/1
]
).
@@ -19,60 +22,137 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec get_db_node () -> node().
-get_db_node () -> list_to_atom("db_node@" ++ net_adm:localhost()).
+-spec get_debug_db_node () -> node().
+get_debug_db_node () -> list_to_atom("db_node@" ++ net_adm:localhost()).
--spec do_remote_operation (atom(), list(any())) ->
- (
- {'badrpc', any()}
- | {'aborted', any()}
- | {'atomic', ({'ok', any()} | 'ok' | 'not_found')}
- ).
-do_remote_operation (Op, Params) ->
- rpc:call(get_db_node(), db_access, Op, Params).
+-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
+-spec insert_at
(
atom(),
- any(),
+ binary(),
shr_db_user:permission(),
shr_db_user:permission(),
any()
)
-> 'ok'.
-insert (DB, ObjectID, ReadPerm, WritePerm, Value) ->
+insert_at (DB, ObjectID, ReadPerm, WritePerm, Value) ->
+ DBNode = get_db_node_for(ObjectID),
+
{atomic, _} =
- do_remote_operation(insert, [DB, ObjectID, ReadPerm, WritePerm, Value]),
+ rpc:call
+ (
+ DBNode,
+ db_access,
+ insert_at,
+ [DB, ObjectID, ReadPerm, WritePerm, Value]
+ ),
io:format
(
- "~nshr_database:insert(~p) -> ok.~n",
- [{DB, ObjectID, ReadPerm, WritePerm, Value}]
+ "~nshr_database:insert_at(~p) ! ~p -> ok.~n",
+ [{DB, ObjectID, ReadPerm, WritePerm, Value}, DBNode]
),
ok.
+-spec insert
+ (
+ atom(),
+ shr_db_user:permission(),
+ shr_db_user: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(),
- any(),
+ binary(),
shr_db_user:user()
)
-> ({'ok', any()} | 'not_found').
fetch (DB, ObjectID, Cred) ->
- {atomic, Reply} = do_remote_operation(read, [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.~n",
- [{DB, ObjectID, Cred}, Reply]
+ "~nshr_database:fetch(~p) ! ~p -> ~p.~n",
+ [{DB, ObjectID, Cred}, DBNode, Reply]
),
+
Reply.
-spec commit (shr_db_query:type()) -> 'ok'.
commit (Query) ->
- {atomic, ok} = do_remote_operation(query, [Query]),
- io:format("~nshr_database:commit(~p) -> ok.~n", [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(),
+ shr_db_user: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(),
+ shr_db_user: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.