| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/ataxia_client.erl')
| -rw-r--r-- | src/ataxia_client.erl | 169 | 
1 files changed, 154 insertions, 15 deletions
| diff --git a/src/ataxia_client.erl b/src/ataxia_client.erl index 739320a..71f0d63 100644 --- a/src/ataxia_client.erl +++ b/src/ataxia_client.erl @@ -10,10 +10,23 @@  -export  (     [ +      % Only the user provided +      add/3, +      add_at/4, +      reserve/2, +      reserve_at/3, + +      % Both permissions provided        add/4,        add_at/5,        reserve/3, +      reserve_at/4, + +      % Lock provided +      add/5, +      add_at/6,        reserve/4, +      reserve_at/5,        fetch/3,        update/4, @@ -42,23 +55,127 @@ get_debug_db_node () -> list_to_atom("db_node@" ++ net_adm:localhost()).  get_random_db_node () ->     get_debug_db_node(). --spec get_db_node_for (binary()) -> node(). +-spec get_db_node_for (ataxia_id:type()) -> node().  get_db_node_for (_ObjectID) ->     get_debug_db_node().  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% ADD NEW ELEMENT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% +%%%% Providing only the user +%%%%  -spec add_at     (        atom(), -      binary(), +      ataxia_id:type(), +      ataxia_security:user(), +      any() +   ) +   -> ({'aborted', any()} | 'ok'). +add_at (DB, ID, User, Value) -> +   Permission = ataxia_permission:allow_only(User), + +   add_at(DB, ID, Permission, Permission, ataxia_lock:unlocked(), Value). + +-spec add +   ( +      atom(), +      ataxia_security:user(), +      any() +   ) +   -> ({'ok', ataxia_id:type()} | {'aborted', any()}). +add (DB, User, Value) -> +   Permission = ataxia_permission:allow_only(User), + +   add(DB, Permission, Permission, ataxia_lock:unlocked(), Value). + +-spec reserve +   ( +      atom(), +      ataxia_security:user() +   ) +   -> ({'ok', ataxia_id:type()} | {'aborted', any()}). +reserve (DB, User) -> +   Permission = ataxia_permission:allow_only(User), + +   reserve (DB, Permission, Permission, ataxia_lock:unlocked()). + +-spec reserve_at +   ( +      atom(), +      ataxia_security:user(), +      ataxia_id:type() +   ) +   -> ('ok' |  {'aborted', any()}). +reserve_at (DB, User, ID) -> +   Permission = ataxia_permission:allow_only(User), + +   reserve_at (DB, Permission, Permission, ataxia_lock:unlocked(), ID). + +%%%% +%%%% Providing No Lock +%%%% +-spec add_at +   ( +      atom(), +      ataxia_id:type(),        ataxia_security:permission(),        ataxia_security:permission(),        any()     )     -> ({'aborted', any()} | 'ok').  add_at (DB, ID, ReadPerm, WritePerm, Value) -> +   add_at(DB, ID, ReadPerm, WritePerm, ataxia_lock:unlocked(), Value). + +-spec add +   ( +      atom(), +      ataxia_security:permission(), +      ataxia_security:permission(), +      any() +   ) +   -> ({'ok', ataxia_id:type()} | {'aborted', any()}). +add (DB, ReadPerm, WritePerm, Value) -> +   add(DB, ReadPerm, WritePerm, ataxia_lock:unlocked(), Value). + +-spec reserve +   ( +      atom(), +      ataxia_security:permission(), +      ataxia_security:permission() +   ) +   -> ({'ok', ataxia_id:type()} | {'aborted', any()}). +reserve (DB, ReadPerm, WritePerm) -> +   reserve (DB, ReadPerm, WritePerm, ataxia_lock:unlocked()). + +-spec reserve_at +   ( +      atom(), +      ataxia_security:permission(), +      ataxia_security:permission(), +      ataxia_id:type() +   ) +   -> ('ok' |  {'aborted', any()}). +reserve_at (DB, ReadPerm, WritePerm, ID) -> +   reserve_at (DB, ReadPerm, WritePerm, ataxia_lock:unlocked(), ID). + +%%%% +%%%% Providing everything +%%%% +-spec add_at +   ( +      atom(), +      ataxia_id:type(), +      ataxia_security:permission(), +      ataxia_security:permission(), +      ataxia_lock:type(), +      any() +   ) +   -> ({'aborted', any()} | 'ok'). +add_at (DB, ID, ReadPerm, WritePerm, Lock, Value) ->     DBNode = get_db_node_for(ID),     Reply = @@ -67,13 +184,13 @@ add_at (DB, ID, ReadPerm, WritePerm, Value) ->           DBNode,           ataxia_server,           add_at, -         [DB, ID, ReadPerm, WritePerm, Value] +         [DB, ID, ReadPerm, WritePerm, Lock, Value]        ),     io:format     (        "~nataxia_client:add_at(~p) ! ~p -> ~p.~n", -      [{DB, ID, ReadPerm, WritePerm, Value}, DBNode, Reply] +      [{DB, ID, ReadPerm, WritePerm, Lock, Value}, DBNode, Reply]     ),     Reply. @@ -83,19 +200,26 @@ add_at (DB, ID, ReadPerm, WritePerm, Value) ->        atom(),        ataxia_security:permission(),        ataxia_security:permission(), +      ataxia_lock:type(),        any()     )     -> ({'ok', ataxia_id:type()} | {'aborted', any()}). -add (DB, ReadPerm, WritePerm, Value) -> +add (DB, ReadPerm, WritePerm, Lock, Value) ->     DBNode = get_random_db_node(),     Reply = -      rpc:call(DBNode, ataxia_server, add, [DB, ReadPerm, WritePerm, Value]), +      rpc:call +      ( +         DBNode, +         ataxia_server, +         add, +         [DB, ReadPerm, WritePerm, Lock, Value] +      ),     io:format     (        "~nataxia_client:add(~p) ! ~p -> ok.~n", -      [{DB, ReadPerm, WritePerm, Value}, DBNode] +      [{DB, ReadPerm, WritePerm, Lock, Value}, DBNode]     ),     Reply. @@ -104,40 +228,55 @@ add (DB, ReadPerm, WritePerm, Value) ->     (        atom(),        ataxia_security:permission(), -      ataxia_security:permission() +      ataxia_security:permission(), +      ataxia_lock:type()     )     -> ({'ok', ataxia_id:type()} | {'aborted', any()}). -reserve (DB, ReadPerm, WritePerm) -> +reserve (DB, ReadPerm, WritePerm, Lock) ->     DBNode = get_random_db_node(), -   Reply = rpc:call(DBNode, ataxia_server, reserve, [DB, ReadPerm, WritePerm]), +   Reply = +      rpc:call +      ( +         DBNode, +         ataxia_server, +         reserve, +         [DB, ReadPerm, WritePerm, Lock] +      ),     io:format     (        "~nataxia_client:reserve(~p) ! ~p -> ~p.~n", -      [{DB, ReadPerm, WritePerm}, DBNode, Reply] +      [{DB, ReadPerm, WritePerm, Lock}, DBNode, Reply]     ),     Reply. --spec reserve +-spec reserve_at     (        atom(),        ataxia_security:permission(),        ataxia_security:permission(), +      ataxia_lock:type(),        ataxia_id:type()     )     -> ('ok' |  {'aborted', any()}). -reserve (DB, ReadPerm, WritePerm, ID) -> +reserve_at (DB, ReadPerm, WritePerm, Lock, ID) ->     DBNode = get_db_node_for(ID),     Reply = -      rpc:call(DBNode, ataxia_server, reserve, [DB, ReadPerm, WritePerm, ID]), +      rpc:call +      ( +         DBNode, +         ataxia_server, +         reserve_at, +         [DB, ReadPerm, WritePerm, Lock, ID] +      ),     io:format     (        "~nataxia_client:reserve(~p) ! ~p -> ~p.~n", -      [{DB, ReadPerm, WritePerm, ID}, DBNode, Reply] +      [{DB, ReadPerm, WritePerm, Lock, ID}, DBNode, Reply]     ),     Reply. | 


