Move expiration out of gen_server for ets cache backend

This commit is contained in:
Daniil Fedotov 2016-06-01 13:37:03 +01:00
parent bdad054fd7
commit dd9db448f9
1 changed files with 5 additions and 4 deletions

View File

@ -32,7 +32,9 @@
start_link() -> gen_server2:start_link({local, ?MODULE}, ?MODULE, [], []). start_link() -> gen_server2:start_link({local, ?MODULE}, ?MODULE, [], []).
get(Key) -> gen_server2:call(?MODULE, {get, Key}). get(Key) -> gen_server2:call(?MODULE, {get, Key}).
put(Key, Value, TTL) -> gen_server2:cast(?MODULE, {put, Key, Value, TTL}). put(Key, Value, TTL) ->
Expiration = expiration(TTL),
gen_server2:cast(?MODULE, {put, Key, Value, TTL, Expiration}).
delete(Key) -> gen_server2:call(?MODULE, {delete, Key}). delete(Key) -> gen_server2:call(?MODULE, {delete, Key}).
init(_Args) -> init(_Args) ->
@ -52,9 +54,9 @@ handle_call({delete, Key}, _From, State = #state{cache = Table, timers = Timers}
do_delete(Key, Table, Timers), do_delete(Key, Table, Timers),
{reply, ok, State}. {reply, ok, State}.
handle_cast({put, Key, Value, TTL}, State = #state{cache = Table, timers = Timers}) -> handle_cast({put, Key, Value, TTL, Expiration},
State = #state{cache = Table, timers = Timers}) ->
do_delete(Key, Table, Timers), do_delete(Key, Table, Timers),
Expiration = expiration(TTL),
ets:insert(Table, {Key, {Expiration, Value}}), ets:insert(Table, {Key, {Expiration, Value}}),
{ok, TRef} = timer:apply_after(TTL, rabbit_auth_cache_ets, delete, [Key]), {ok, TRef} = timer:apply_after(TTL, rabbit_auth_cache_ets, delete, [Key]),
ets:insert(Timers, {Key, TRef}), ets:insert(Timers, {Key, TRef}),
@ -69,7 +71,6 @@ code_change(_OldVsn, State, _Extra) ->
terminate(_Reason, State = #state{}) -> terminate(_Reason, State = #state{}) ->
State. State.
do_delete(Key, Table, Timers) -> do_delete(Key, Table, Timers) ->
true = ets:delete(Table, Key), true = ets:delete(Table, Key),
case ets:lookup(Timers, Key) of case ets:lookup(Timers, Key) of