diff options
| author | Daniil Fedotov <dfedotov@pivotal.io> | 2016-12-16 18:09:04 +0000 |
|---|---|---|
| committer | Daniil Fedotov <dfedotov@pivotal.io> | 2016-12-16 18:09:04 +0000 |
| commit | 806cd800b055a660988c5b1da6ae388bb72fa3a7 (patch) | |
| tree | 428d23c982f9b056935339c67f1f1ef36c2896e6 | |
| parent | 321abd47ccc97d3de3b0bcae388ea30299fd47a6 (diff) | |
| download | rabbitmq-server-git-806cd800b055a660988c5b1da6ae388bb72fa3a7.tar.gz | |
Replace dying_client_index and dying_clients set with a map
Required to decrease ETS tables usage per vhost
| -rw-r--r-- | src/rabbit_lager.erl | 1 | ||||
| -rw-r--r-- | src/rabbit_msg_store.erl | 39 |
2 files changed, 15 insertions, 25 deletions
diff --git a/src/rabbit_lager.erl b/src/rabbit_lager.erl index db918d69a9..c1ed613088 100644 --- a/src/rabbit_lager.erl +++ b/src/rabbit_lager.erl @@ -240,7 +240,6 @@ configure_extra_sinks(Sinks, []) -> Sinks. default_sink_config(rabbit_log_upgrade_lager_event, Sink) -> - io:format("I AM UPGRADE SINK"), Handlers = lager_handlers(application:get_env(rabbit, lager_handler_upgrade, tty)), diff --git a/src/rabbit_msg_store.erl b/src/rabbit_msg_store.erl index 81364c68bc..2da802e722 100644 --- a/src/rabbit_msg_store.erl +++ b/src/rabbit_msg_store.erl @@ -91,8 +91,6 @@ flying_ets, %% set of dying clients dying_clients, - %% index of file positions for client death messages - dying_client_index, %% map of references of all registered clients %% to callbacks clients, @@ -704,11 +702,9 @@ client_update_flying(Diff, MsgId, #client_msstate { flying_ets = FlyingEts, end. clear_client(CRef, State = #msstate { cref_to_msg_ids = CTM, - dying_clients = DyingClients, - dying_client_index = DyingIndex }) -> - ets:delete(DyingIndex, CRef), + dying_clients = DyingClients }) -> State #msstate { cref_to_msg_ids = dict:erase(CRef, CTM), - dying_clients = sets:del_element(CRef, DyingClients) }. + dying_clients = maps:remove(CRef, DyingClients) }. %%---------------------------------------------------------------------------- @@ -760,8 +756,6 @@ init([Name, BaseDir, ClientRefs, StartupFunState]) -> [ordered_set, public]), CurFileCacheEts = ets:new(rabbit_msg_store_cur_file, [set, public]), FlyingEts = ets:new(rabbit_msg_store_flying, [set, public]), - DyingIndex = ets:new(rabbit_msg_store_dying_client_index, - [set, public, {keypos, #dying_client.client_ref}]), {ok, FileSizeLimit} = application:get_env(rabbit, msg_store_file_size_limit), @@ -792,8 +786,7 @@ init([Name, BaseDir, ClientRefs, StartupFunState]) -> file_summary_ets = FileSummaryEts, cur_file_cache_ets = CurFileCacheEts, flying_ets = FlyingEts, - dying_clients = sets:new(), - dying_client_index = DyingIndex, + dying_clients = #{}, clients = Clients, successfully_recovered = CleanShutdown, file_size_limit = FileSizeLimit, @@ -871,14 +864,14 @@ handle_call({contains, MsgId}, From, State) -> handle_cast({client_dying, CRef}, State = #msstate { dying_clients = DyingClients, - dying_client_index = DyingIndex, current_file_handle = CurHdl, current_file = CurFile }) -> - DyingClients1 = sets:add_element(CRef, DyingClients), {ok, CurOffset} = file_handle_cache:current_virtual_offset(CurHdl), - true = ets:insert_new(DyingIndex, #dying_client{client_ref = CRef, - file = CurFile, - offset = CurOffset}), + DyingClients1 = maps:put(CRef, + #dying_client{client_ref = CRef, + file = CurFile, + offset = CurOffset}, + DyingClients), noreply(State #msstate { dying_clients = DyingClients1 }); handle_cast({client_delete, CRef}, @@ -1375,17 +1368,15 @@ blind_confirm(CRef, MsgIds, ActionTaken, State) -> %% msg and thus should be ignored. Note that this (correctly) returns %% false when testing to remove the death msg itself. should_mask_action(CRef, MsgId, - State = #msstate { dying_clients = DyingClients, - dying_client_index = DyingIndex }) -> - case {sets:is_element(CRef, DyingClients), index_lookup(MsgId, State)} of - {false, Location} -> + State = #msstate{dying_clients = DyingClients}) -> + case {maps:find(CRef, DyingClients), index_lookup(MsgId, State)} of + {error, Location} -> {false, Location}; - {true, not_found} -> + {{ok, _}, not_found} -> {true, not_found}; - {true, #msg_location { file = File, offset = Offset, - ref_count = RefCount } = Location} -> - [#dying_client { file = DeathFile, offset = DeathOffset }] = - ets:lookup(DyingIndex, CRef), + {{ok, Client}, #msg_location { file = File, offset = Offset, + ref_count = RefCount } = Location} -> + #dying_client{file = DeathFile, offset = DeathOffset} = Client, {case {{DeathFile, DeathOffset} < {File, Offset}, RefCount} of {true, _} -> true; {false, 0} -> false_if_increment; |
