diff options
author | Vlad Ionescu <vlad@lshift.net> | 2009-09-22 10:56:14 +0100 |
---|---|---|
committer | Vlad Ionescu <vlad@lshift.net> | 2009-09-22 10:56:14 +0100 |
commit | ec84371d2499ae34f061a2f5a067eafdf7873fa3 (patch) | |
tree | 66a071e76a33a92f9bc093ddf4caa4444fd81adf /src | |
parent | fb9cb12ac7cde685389aee9488131446a44b40dc (diff) | |
parent | 879fea84045d606716454fbaaecd39f84be69782 (diff) | |
download | rabbitmq-server-ec84371d2499ae34f061a2f5a067eafdf7873fa3.tar.gz |
merging bug21644 into default
Diffstat (limited to 'src')
-rw-r--r-- | src/rabbit_load.erl | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/rabbit_load.erl b/src/rabbit_load.erl index 7bf85347..6ef638cb 100644 --- a/src/rabbit_load.erl +++ b/src/rabbit_load.erl @@ -41,7 +41,7 @@ -ifdef(use_specs). -type(erlang_node() :: atom()). --type(load() :: {{non_neg_integer(), float()}, erlang_node()}). +-type(load() :: {{non_neg_integer(), integer() | 'unknown'}, erlang_node()}). -spec(local_load/0 :: () -> load()). -spec(remote_loads/0 :: () -> [load()]). -spec(pick/0 :: () -> erlang_node()). @@ -52,8 +52,11 @@ local_load() -> LoadAvg = case whereis(cpu_sup) of - undefined -> 0.0; - _Other -> cpu_sup:avg1() + undefined -> unknown; + _ -> case cpu_sup:avg1() of + L when is_integer(L) -> L; + {error, timeout} -> unknown + end end, {{statistics(run_queue), LoadAvg}, node()}. @@ -65,8 +68,12 @@ remote_loads() -> pick() -> RemoteLoads = remote_loads(), {{RunQ, LoadAvg}, Node} = local_load(), - %% add bias towards current node - AdjustedLoadAvg = LoadAvg * ?FUDGE_FACTOR, + %% add bias towards current node; we rely on Erlang's term order + %% of SomeFloat < local_unknown < unknown. + AdjustedLoadAvg = case LoadAvg of + unknown -> local_unknown; + _ -> LoadAvg * ?FUDGE_FACTOR + end, Loads = [{{RunQ, AdjustedLoadAvg}, Node} | RemoteLoads], {_, SelectedNode} = lists:min(Loads), SelectedNode. |