summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nordberg <linus@sunet.se>2019-06-30 23:22:02 +0200
committerLinus Nordberg <linus@sunet.se>2019-06-30 23:22:02 +0200
commitcf495efa541318719f1d8eeddecad96e6091aa0c (patch)
tree02907a21404051ef32e63bbcbcb06dbe533fb5b1
parenta0a85e3c0fe9ade9fb3c9171e99e2c8d0308293f (diff)
rename manager functions to reflect where the policy lives
Servers and remotes (soon renamed "clients") are not the ones implementing policy. They should therefore report events to the manager which then imposes policy.
-rw-r--r--p11p-daemon/src/p11p_remote.erl2
-rw-r--r--p11p-daemon/src/p11p_remote_manager.erl18
-rw-r--r--p11p-daemon/src/p11p_server.erl2
3 files changed, 11 insertions, 11 deletions
diff --git a/p11p-daemon/src/p11p_remote.erl b/p11p-daemon/src/p11p_remote.erl
index 200afdc..12f513d 100644
--- a/p11p-daemon/src/p11p_remote.erl
+++ b/p11p-daemon/src/p11p_remote.erl
@@ -78,7 +78,7 @@ handle_info({Port, {data, Data}}, #state{msg = Msg} = State) when Port == State#
{noreply, handle_remote_data(State, Msg, Data)};
handle_info({timeout, Timer, Port}, #state{token = TokName} = State) when Port == State#state.port, Timer == State#state.timer ->
lager:info("~p: rpc request timed out, exiting", [self()]),
- ok = p11p_remote_manager:timeout(TokName),
+ ok = p11p_remote_manager:server_change(timeout, [TokName]),
NewState = State#state{timer = undefined},
{stop, normal, NewState};
handle_info(Info, State) ->
diff --git a/p11p-daemon/src/p11p_remote_manager.erl b/p11p-daemon/src/p11p_remote_manager.erl
index 633a4aa..d2bbd11 100644
--- a/p11p-daemon/src/p11p_remote_manager.erl
+++ b/p11p-daemon/src/p11p_remote_manager.erl
@@ -12,8 +12,8 @@
%% API.
-export([start_link/0]).
--export([remote_for_token/1, kill_remote/2]). % For servers.
--export([timeout/1]). % For remotes.
+-export([remote_for_token/1, client_change/2]). % For servers.
+-export([server_change/2]). % For remotes.
%% Genserver callbacks.
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2,
@@ -44,11 +44,11 @@ start_link() ->
-spec remote_for_token(string()) -> pid().
remote_for_token(TokName) ->
gen_server:call(?MODULE, {remote_for_token, TokName}).
-kill_remote(TokName, Pid) ->
- gen_server:call(?MODULE, {kill_remote, {TokName, Pid}}).
+client_change(Change, Args) ->
+ gen_server:call(?MODULE, {client_change, Change, Args}).
-timeout(TokName) ->
- gen_server:call(?MODULE, {timeout, TokName}).
+server_change(Change, Args) ->
+ gen_server:call(?MODULE, {server_change, Change, Args}).
%% Genserver callbacks.
init([]) ->
@@ -68,7 +68,7 @@ handle_call({remote_for_token, TokName}, _From, #state{tokens = Tokens} = State)
_ ->
{reply, Pid, State}
end;
-handle_call({timeout, TokName}, _From, #state{tokens = Tokens} = State) ->
+handle_call({server_change, timeout, [TokName]}, _From, #state{tokens = Tokens} = State) ->
lager:debug("~p: ~s: timed out", [self(), TokName]),
%% TODO: do some code dedup with remote_for_token?
#{TokName := Token} = Tokens,
@@ -79,12 +79,12 @@ handle_call({timeout, TokName}, _From, #state{tokens = Tokens} = State) ->
NewState = State#state{tokens = Tokens#{TokName := NewToken}},
lager:debug("~p: ~s: updated token: ~p", [self(), TokName, NewToken]),
{reply, ok, NewState};
-handle_call({kill_remote, {TokName, Pid}}, From, #state{tokens = Tokens} = State) ->
+handle_call({client_change, client_gone, [TokName, Pid]}, From, #state{tokens = Tokens} = State) ->
lager:debug("~p: killing off remote ~p on request from ~p", [self(), Pid, From]),
gen_server:stop(Pid),
#{TokName := Token} = Tokens,
Remotes = Token#token.remotes,
- NewRemotes = lists:map(fun(E) ->
+ NewRemotes = lists:map(fun(E) -> % TODO: any risk of losing list order?
case E#remote.pid of
Pid -> E#remote{pid = undefined};
_ -> E
diff --git a/p11p-daemon/src/p11p_server.erl b/p11p-daemon/src/p11p_server.erl
index ed2c719..f0feec7 100644
--- a/p11p-daemon/src/p11p_server.erl
+++ b/p11p-daemon/src/p11p_server.erl
@@ -96,7 +96,7 @@ handle_info(Info, State) ->
terminate(_Reason, #state{socket = Socket, tokname = TokName, remote = Remote}) ->
lager:debug("~p: terminated", [self()]),
gen_tcp:close(Socket),
- p11p_remote_manager:kill_remote(TokName, Remote),
+ p11p_remote_manager:client_change(client_gone, [TokName, Remote]),
ok.
code_change(_OldVersion, State, _Extra) ->