Skip to content

Commit c61cb8c

Browse files
Add clear cache function
1 parent 5bcdc80 commit c61cb8c

File tree

6 files changed

+41
-5
lines changed

6 files changed

+41
-5
lines changed

deps/rabbitmq_auth_backend_cache/src/rabbit_auth_backend_cache.erl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
-export([user_login_authentication/2, user_login_authorization/2,
1515
check_vhost_access/3, check_resource_access/4, check_topic_access/4,
16-
expiry_timestamp/1]).
16+
expiry_timestamp/1, clear_cache_cluster_wide/0, clear_cache/0]).
1717

1818
%% API
1919

@@ -66,6 +66,16 @@ expiry_timestamp(_) -> never.
6666
%% Implementation
6767
%%
6868

69+
clear_cache_cluster_wide() ->
70+
Nodes = rabbit_nodes:list_running(),
71+
rabbit_misc:append_rpc_all_nodes(Nodes, ?MODULE, clear_cache, []).
72+
73+
clear_cache() ->
74+
{ok, AuthCache} = application:get_env(rabbitmq_auth_backend_cache,
75+
cache_module),
76+
rabbit_log:warning("Clearing auth_backend_cache"),
77+
AuthCache:clear().
78+
6979
with_cache(BackendType, {F, A}, Fun) ->
7080
{ok, AuthCache} = application:get_env(rabbitmq_auth_backend_cache,
7181
cache_module),
@@ -105,3 +115,5 @@ should_cache(Result, Fun) ->
105115
{refusal, true} -> true;
106116
_ -> false
107117
end.
118+
119+

deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache.erl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
-callback delete(term()) -> ok.
1717

18+
-callback clear() -> ok.
19+
1820
expiration(TTL) ->
1921
erlang:system_time(milli_seconds) + TTL.
2022

deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_dict.erl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
-include("rabbit_auth_backend_cache.hrl").
1616

1717
-export([start_link/0,
18-
get/1, put/3, delete/1]).
18+
get/1, put/3, delete/1, clear/0]).
1919

2020
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
2121
terminate/2, code_change/3]).
@@ -28,6 +28,8 @@ put(Key, Value, TTL) -> gen_server:cast(?MODULE, {put, Key, Value, TTL}).
2828

2929
delete(Key) -> gen_server:call(?MODULE, {delete, Key}, ?CACHE_OPERATION_TIMEOUT).
3030

31+
clear() -> gen_server:cast(?MODULE, clear).
32+
3133
init(_Args) -> {ok, nostate}.
3234

3335
handle_call({get, Key}, _From, nostate) ->
@@ -40,6 +42,10 @@ handle_call({delete, Key}, _From, nostate) ->
4042
do_delete(Key),
4143
{reply, ok, nostate}.
4244

45+
handle_cast(clear, nostate) ->
46+
_ = erlang:erase(),
47+
{noreply, nostate};
48+
4349
handle_cast({put, Key, Value, TTL}, nostate) ->
4450
erlang:put({items, Key}, Value),
4551
{ok, TRef} = timer:apply_after(TTL, rabbit_auth_cache_dict, delete, [Key]),

deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_ets.erl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
-behaviour(rabbit_auth_cache).
1616

1717
-export([start_link/0,
18-
get/1, put/3, delete/1]).
18+
get/1, put/3, delete/1, clear/0]).
1919

2020
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
2121
terminate/2, code_change/3]).
@@ -36,6 +36,8 @@ put(Key, Value, TTL) ->
3636

3737
delete(Key) -> gen_server:call(?MODULE, {delete, Key}, ?CACHE_OPERATION_TIMEOUT).
3838

39+
clear() -> gen_server:cast(?MODULE, clear).
40+
3941
init([]) ->
4042
{ok, #state{cache = ets:new(?MODULE, [set, private]),
4143
timers = ets:new(auth_cache_ets_timers, [set, private])}}.
@@ -53,6 +55,10 @@ handle_call({delete, Key}, _From, State = #state{cache = Table, timers = Timers}
5355
do_delete(Key, Table, Timers),
5456
{reply, ok, State}.
5557

58+
handle_cast(clear, State = #state{cache = Table}) ->
59+
ets:delete_all_objects(Table),
60+
{noreply, State};
61+
5662
handle_cast({put, Key, Value, TTL, Expiration},
5763
State = #state{cache = Table, timers = Timers}) ->
5864
do_delete(Key, Table, Timers),

deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_ets_segmented.erl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
-behaviour(rabbit_auth_cache).
1111

1212
-export([start_link/1,
13-
get/1, put/3, delete/1]).
13+
get/1, put/3, delete/1, clear/0]).
1414
-export([gc/0]).
1515

1616
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
@@ -43,6 +43,11 @@ delete(Key) ->
4343
|| Table <- gen_server:call(?MODULE, get_segment_tables, ?CACHE_OPERATION_TIMEOUT)],
4444
ok.
4545

46+
clear() ->
47+
_ = [ets:delete_all_objects(Table)
48+
|| Table <- gen_server:call(?MODULE, get_segment_tables, ?CACHE_OPERATION_TIMEOUT)],
49+
ok.
50+
4651
gc() ->
4752
case whereis(?MODULE) of
4853
undefined -> ok;

deps/rabbitmq_auth_backend_cache/src/rabbit_auth_cache_ets_segmented_stateless.erl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
-include("rabbit_auth_backend_cache.hrl").
1313

1414
-export([start_link/1,
15-
get/1, put/3, delete/1]).
15+
get/1, put/3, delete/1, clear/0]).
1616
-export([gc/0]).
1717

1818
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
@@ -47,6 +47,11 @@ delete(Key) ->
4747
|| Table <- get_all_segment_tables()],
4848
ok.
4949

50+
clear() ->
51+
_ = [ets:delete_all_objects(Table)
52+
|| Table <- get_all_segment_tables()],
53+
ok.
54+
5055
gc() ->
5156
case whereis(?MODULE) of
5257
undefined -> ok;

0 commit comments

Comments
 (0)