diff options
author | Emile Joubert <emile@rabbitmq.com> | 2012-03-23 12:45:43 +0000 |
---|---|---|
committer | Emile Joubert <emile@rabbitmq.com> | 2012-03-23 12:45:43 +0000 |
commit | 98973773daa5a8a267157878676611d24e1f3add (patch) | |
tree | f9ab5b2f5f5a2527512af6c8e729f7f6fb184935 | |
parent | 8741f6b73c67c4b758cd876e5b364ab6a580f746 (diff) | |
download | rabbitmq-server-98973773daa5a8a267157878676611d24e1f3add.tar.gz |
Logging and types for setting disk free limit
-rw-r--r-- | src/disk_monitor.erl | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/src/disk_monitor.erl b/src/disk_monitor.erl index 03014b50..1229bd6e 100644 --- a/src/disk_monitor.erl +++ b/src/disk_monitor.erl @@ -40,10 +40,10 @@ -ifdef(use_specs). --spec(start_link/1 :: ({'absolute', integer()} | {'mem_relative', float()}) - -> rabbit_types:ok_pid_or_error()). +-type(disk_free_limit() :: (integer() | {'mem_relative', float()})). +-spec(start_link/1 :: (disk_free_limit()) -> rabbit_types:ok_pid_or_error()). -spec(get_disk_free_limit/0 :: () -> integer()). --spec(set_disk_free_limit/1 :: (integer()) -> 'ok'). +-spec(set_disk_free_limit/1 :: (disk_free_limit()) -> 'ok'). -spec(get_check_interval/0 :: () -> integer()). -spec(set_check_interval/1 :: (integer()) -> 'ok'). -spec(get_disk_free/0 :: () -> (integer() | 'unknown')). @@ -79,19 +79,16 @@ start_link(Args) -> init([Limit]) -> TRef = start_timer(?DEFAULT_DISK_CHECK_INTERVAL), State = #state { dir = dir(), - limit = Limit, timeout = ?DEFAULT_DISK_CHECK_INTERVAL, timer = TRef, alarmed = false}, - {ok, internal_update(State)}. + {ok, set_disk_limits(State, Limit)}. handle_call(get_disk_free_limit, _From, State) -> - {reply, State#state.limit, State}; + {reply, interpret_limit(State#state.limit), State}; handle_call({set_disk_free_limit, Limit}, _From, State) -> - State1 = State#state { limit = Limit }, - error_logger:info_msg("Disk free limit changed to ~p bytes.~n", [Limit]), - {reply, ok, internal_update(State1)}; + {reply, ok, set_disk_limits(State, Limit)}; handle_call(get_check_interval, _From, State) -> {reply, State#state.timeout, State}; @@ -128,17 +125,17 @@ code_change(_OldVsn, State, _Extra) -> % the partition / drive containing this directory will be monitored dir() -> rabbit_mnesia:dir(). +set_disk_limits(State, Limit) -> + State1 = State#state { limit = Limit }, + error_logger:info_msg("Disk free limit set to ~pMB~n", + [trunc(interpret_limit(Limit) / 1048576)]), + internal_update(State1). + internal_update(State = #state { limit = Limit, dir = Dir, alarmed = Alarmed}) -> CurrentFreeBytes = get_disk_free(Dir), - LimitBytes = case Limit of - {absolute, L} -> - L; - {mem_relative, R} -> - round(R * vm_memory_monitor:get_total_memory()) - end, -error_logger:info_msg("disk monitor comparing ~p and ~p~n",[CurrentFreeBytes,LimitBytes]), + LimitBytes = interpret_limit(Limit), NewAlarmed = CurrentFreeBytes < LimitBytes, case {Alarmed, NewAlarmed} of {false, true} -> @@ -175,6 +172,11 @@ parse_free_win32(CommandResult) -> [_, _Dir, Free, "bytes", "free"] = string:tokens(LastLine, " "), list_to_integer(Free). +interpret_limit({mem_relative, R}) -> + round(R * vm_memory_monitor:get_total_memory()); +interpret_limit(L) -> + L. + emit_update_info(State, CurrentFree, Limit) -> error_logger:info_msg( "Disk free space limit now ~p. Free bytes:~p Limit:~p~n", |