Skip to content

Commit 222db8d

Browse files
author
Vlad Ionescu
committed
merging bug21644 into default
2 parents b56db47 + aafc8c9 commit 222db8d

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

src/rabbit_load.erl

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
-ifdef(use_specs).
4242

4343
-type(erlang_node() :: atom()).
44-
-type(load() :: {{non_neg_integer(), float()}, erlang_node()}).
44+
-type(load() :: {{non_neg_integer(), integer() | 'unknown'}, erlang_node()}).
4545
-spec(local_load/0 :: () -> load()).
4646
-spec(remote_loads/0 :: () -> [load()]).
4747
-spec(pick/0 :: () -> erlang_node()).
@@ -52,8 +52,11 @@
5252

5353
local_load() ->
5454
LoadAvg = case whereis(cpu_sup) of
55-
undefined -> 0.0;
56-
_Other -> cpu_sup:avg1()
55+
undefined -> unknown;
56+
_ -> case cpu_sup:avg1() of
57+
L when is_integer(L) -> L;
58+
{error, timeout} -> unknown
59+
end
5760
end,
5861
{{statistics(run_queue), LoadAvg}, node()}.
5962

@@ -65,8 +68,12 @@ remote_loads() ->
6568
pick() ->
6669
RemoteLoads = remote_loads(),
6770
{{RunQ, LoadAvg}, Node} = local_load(),
68-
%% add bias towards current node
69-
AdjustedLoadAvg = LoadAvg * ?FUDGE_FACTOR,
71+
%% add bias towards current node; we rely on Erlang's term order
72+
%% of SomeFloat < local_unknown < unknown.
73+
AdjustedLoadAvg = case LoadAvg of
74+
unknown -> local_unknown;
75+
_ -> LoadAvg * ?FUDGE_FACTOR
76+
end,
7077
Loads = [{{RunQ, AdjustedLoadAvg}, Node} | RemoteLoads],
7178
{_, SelectedNode} = lists:min(Loads),
7279
SelectedNode.

0 commit comments

Comments
 (0)