Skip to content

Commit 17aa9b7

Browse files
committed
fixes
1 parent 34193d6 commit 17aa9b7

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

deps/rabbit/src/rabbit_presence.erl

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
-define(SERVER, ?MODULE).
2323
-define(INTERVAL, 1000).
24+
-define(CUTOFF, ?INTERVAL * 3).
2425

2526
-record(?MODULE, {tbl :: ets:table(),
2627
nodes = [] :: [node()]}).
@@ -38,7 +39,7 @@ list_present() ->
3839
%% TODO: change return type to ok | error?
3940
exit(presence_server_not_running);
4041
_ ->
41-
Cutoff = erlang:system_time(millisecond) - 5000,
42+
Cutoff = erlang:system_time(millisecond) - ?CUTOFF,
4243
[N || {N, SeenMs} <- ets:tab2list(?MODULE),
4344
%% if it hasn't been seen since the cutoff
4445
SeenMs > Cutoff,
@@ -52,10 +53,10 @@ start_link() ->
5253

5354
init([]) ->
5455
process_flag(trap_exit, true),
55-
Ref = ets:new(?MODULE, [set, named_table, public]),
56+
Ref = ets:new(?MODULE, [set, named_table, protected]),
57+
_ = erlang:send_after(?INTERVAL, self(), beat),
5658
Nodes = rabbit_nodes:list_members(),
57-
beat_all(Nodes),
58-
erlang:send_after(?INTERVAL, self(), beat),
59+
_ = beat_all(Nodes),
5960
{ok, #?MODULE{tbl = Ref,
6061
nodes = Nodes}}.
6162

@@ -69,27 +70,33 @@ handle_info(beat, #?MODULE{tbl = _Tbl,
6970
nodes = Nodes} = State) ->
7071
_ = erlang:send_after(?INTERVAL, self(), beat),
7172
_ = beat_all(Nodes),
72-
{noreply, State};
73+
%% this will only be efficient to do this often once list_members
74+
%% make use of the ra_leaderboard rather than calling into the local
75+
%% khepri process
76+
case rabbit_nodes:list_members() of
77+
Nodes ->
78+
{noreply, State};
79+
NewNodes ->
80+
{noreply, State#?MODULE{nodes = NewNodes}}
81+
end;
7382
handle_info({hb, Node}, #?MODULE{tbl = Tbl,
7483
nodes = _Nodes} = State) ->
7584
ets:insert(Tbl, {Node, erlang:system_time(millisecond)}),
7685
{noreply, State};
77-
handle_info({terminate, Node}, #?MODULE{tbl = Tbl,
78-
nodes = _Nodes} = State) ->
79-
ets:delete(Tbl, Node),
86+
handle_info({terminate, Node}, #?MODULE{tbl = Tbl} = State) ->
87+
_ = ets:delete(Tbl, Node),
8088
{noreply, State};
8189
handle_info(_Msg, State) ->
8290
{noreply, State}.
8391

8492
terminate(_Reason, #?MODULE{nodes = Nodes}) ->
85-
%% only send terminate if reason is `shutdown`?
93+
%% TODO: only send terminate if reason is `shutdown`?
8694
_ = send_terminate(Nodes),
8795
ok.
8896

8997
code_change(_OldVsn, State, _Extra) ->
9098
{ok, State}.
9199

92-
93100
%% INTERNAL
94101

95102
beat_all(Nodes) ->

0 commit comments

Comments
 (0)