diff options
| author | Matthew Sackman <matthew@lshift.net> | 2009-08-17 12:59:52 +0100 |
|---|---|---|
| committer | Matthew Sackman <matthew@lshift.net> | 2009-08-17 12:59:52 +0100 |
| commit | 7665d669957721b0e1046116834928af696800fd (patch) | |
| tree | 67d10559da16a4bbdfe07278704b35310c5f76ec | |
| parent | 75dbcf5a4d97f568d1e2db4fb8ffaf88f876c1d2 (diff) | |
| download | rabbitmq-server-git-7665d669957721b0e1046116834928af696800fd.tar.gz | |
if memsup isn't runnig, we get back {0,0,undefined} from memsup:get_memory_data/0. Thus adjust maths to cope with this. In the absence of memsup, we don't hand out tokens at all, so everything stays in mixed mode all the time, and we can cheerfully run out of memory (another good reason for the manual pin_to_disk stuff).
| -rw-r--r-- | src/rabbit_queue_mode_manager.erl | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/rabbit_queue_mode_manager.erl b/src/rabbit_queue_mode_manager.erl index 22d858673a..fa3b27e93f 100644 --- a/src/rabbit_queue_mode_manager.erl +++ b/src/rabbit_queue_mode_manager.erl @@ -183,10 +183,13 @@ init([]) -> %% todo, fix up this call as os_mon may not be running {MemTotal, MemUsed, _BigProc} = memsup:get_memory_data(), MemAvail = MemTotal - MemUsed, + TPB = if MemAvail == 0 -> 0; + true -> ?TOTAL_TOKENS / MemAvail + end, {ok, #state { available_tokens = ?TOTAL_TOKENS, mixed_queues = dict:new(), callbacks = dict:new(), - tokens_per_byte = ?TOTAL_TOKENS / MemAvail, + tokens_per_byte = TPB, lowrate = priority_queue:new(), hibernate = queue:new(), disk_mode_pins = sets:new(), @@ -350,7 +353,9 @@ code_change(_OldVsn, State, _Extra) -> {ok, State}. add_to_lowrate(Pid, Alloc, Lazy) -> - Bucket = trunc(math:log(Alloc)), %% log base e + Bucket = if Alloc == 0 -> 0; %% can't take log(0) + true -> trunc(math:log(Alloc)) %% log base e + end, priority_queue:in({Pid, Bucket, Alloc}, Bucket, Lazy). find_queue(Pid, Mixed) -> |
