Skip to content

Commit 72261e5

Browse files
author
Peter Tihanyi
committed
Eliminate warning logs when a node not reachable, by not to try spawning perform_read_worker on it
1 parent fb6edd4 commit 72261e5

2 files changed

Lines changed: 23 additions & 9 deletions

File tree

src/pes_promise.erl

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
-export_type([promise/0, pes_promise_reply/0]).
1717

1818
%% API
19-
-export([async/2, await/1, await/2, reply/2, fake_reply/1, fake_reply/2, resolved/1]).
19+
-export([async/2, await/1, await/2, reply/2, fake_reply/1, fake_reply/2, resolved/1, fake_down_reply/1]).
2020

2121
-spec async({module(), node()} | pid(), term()) -> promise().
2222
async(Target, Command) ->
@@ -62,6 +62,16 @@ fake_reply(Pid, Reply) ->
6262
send(Pid, #promise_reply{ref = Ref, result = Reply}),
6363
{promise, Ref}.
6464

65+
-spec fake_down_reply({module(), node()} | pid()) -> promise().
66+
fake_down_reply(Target) ->
67+
fake_down_reply(self(), Target).
68+
69+
-spec fake_down_reply(pid(), {module(), node()} | pid()) -> promise().
70+
fake_down_reply(Pid, Target) ->
71+
Ref = make_ref(),
72+
send(Pid, {'DOWN', Ref, process, Target, noconnection}),
73+
{promise, Ref}.
74+
6575
-spec send(pid() | {atom(), node()} | reference(), term()) -> ok.
6676
send(To, Msg) ->
6777
erlang:send(To, Msg, [nosuspend, noconnect]),

src/pes_server.erl

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,16 @@ read({Server, Node}, Id) when Node =:= node() ->
6161
Result = pes_promise:fake_reply(do_read(Server, Id)),
6262
pes_stat:count([server, request_count]),
6363
Result;
64-
read({Server, Node}, Id) ->
64+
read({Server, Node} = Target, Id) ->
6565
% spawn a process on remote send a message is way faster than an rpc call.
66-
Pid = spawn(Node, ?MODULE, perform_read_worker, [Server]),
67-
pes_promise:async(Pid, {read, Id});
66+
case pes_cluster:is_node_alive(Node) of
67+
true ->
68+
Pid = spawn(Node, ?MODULE, perform_read_worker, [Server]),
69+
pes_promise:async(Pid, {read, Id});
70+
false ->
71+
% fake promise, fake down message
72+
pes_promise:fake_down_reply(Target)
73+
end;
6874
read(Node, Id) ->
6975
async(Node, {read, Id}).
7076

@@ -88,15 +94,13 @@ force_repair(Node, Id, NewTerm, Value) ->
8894
async(Node, {repair, Id, NewTerm, Value}).
8995

9096
-spec async(target(), term()) -> pes_promise:promise().
91-
async({Server, Node}, Command) ->
97+
async({_Server, Node} = Target, Command) ->
9298
case pes_cluster:is_node_alive(Node) of
9399
true -> %
94-
pes_promise:async({Server, Node}, Command);
100+
pes_promise:async(Target, Command);
95101
false ->
96102
% fake promise, fake down message
97-
Ref = make_ref(),
98-
self() ! {'DOWN', Ref, process, {Server, Node}, noconnection},
99-
{promise, Ref}
103+
pes_promise:fake_down_reply(Target)
100104
end.
101105

102106
-spec start_link(atom()) -> {ok, pid()}.

0 commit comments

Comments
 (0)