Browse Source

clean ets cache

221V 2 years ago
parent
commit
fd8a4d826c
1 changed files with 28 additions and 0 deletions
  1. 28 0
      src/token_bucket.erl

+ 28 - 0
src/token_bucket.erl

@@ -47,6 +47,7 @@ start_link() ->
 
 init([]) ->
   ets:new(users_rps_counters_table, [set, named_table, { keypos, 1 }, private]), % Key = {Timestamp, User_Id}
+  self() ! clean_ets_cache,
   
   State = [],
   {ok, State}.
@@ -73,6 +74,13 @@ handle_cast(_Req, State) ->
   {noreply, State}.
 
 
+handle_info(clean_ets_cache, State) ->
+  erlang:send_after(5000, self(), clean_ets_cache),
+  
+  ok = clean_ets_cache_h(ets:first(users_rps_counters_table), get_timestamp_now() ),
+  {noreply, State};
+
+
 handle_info(_Request, State) ->
   {noreply, State}.
 
@@ -85,6 +93,26 @@ code_change(_OldVsn, State, _Extra) ->
   {ok, State}.
 
 
+%% helpers
 get_timestamp_now() ->
   erlang:system_time(second).
 
+
+clean_ets_cache_h({Time, _User_Id} = Key, Timestamp_Now) ->
+  Next = ets:next(users_rps_counters_table, Key),
+  case Time < Timestamp_Now of
+    true ->
+      ets:delete(users_rps_counters_table, Key);
+    _ ->
+      skip
+  end,
+  clean_ets_cache_h(Next, Timestamp_Now);
+
+%%clean_ets_cache_h('$end_of_table', _Timestamp_Now) -> ok;
+clean_ets_cache_h(_, _) ->
+  io:format("ets rows number after clean: ~p~n", [check_ets_count()]),
+  ok.
+
+
+check_ets_count() -> ets:info(users_rps_counters_table, 'size').
+