@@ -109,8 +109,8 @@ fetch(T) ->
109109clean (T ) ->
110110 gen_statem :call (? MODULE ,{clean ,T }).
111111
112- reset (T ) ->
113- gen_statem :cast (? MODULE ,{reset ,T }).
112+ reset (D ) ->
113+ gen_statem :cast (? MODULE ,{reset ,D }).
114114
115115score (R ,C ) ->
116116 gen_statem :cast (? MODULE ,{{score ,R },C }).
@@ -334,8 +334,8 @@ common({call,From},{fetch,T},[O,Q]) ->
334334 {next_state ,offset ,[O ,Q ,#{from => From , tid => T , ets => external , order => fetch }],[{next_event ,internal ,{score ,{previous ,{? SCORE_OFFSET ,O }}}}]};
335335common ({call ,From },{clean ,T },[O ,Q ]) ->
336336 {next_state ,offset ,[O ,Q ,#{from => From , tid => T , ets => external , order => clean }],[{next_event ,internal ,{score ,{previous ,{? SCORE_OFFSET ,O }}}}]};
337- common (cast ,{reset ,T },[O ,Q ]) ->
338- NQ = resetting (T ,Q ),
337+ common (cast ,{reset ,D },[O ,Q ]) ->
338+ NQ = resetting (D ,Q ),
339339 {keep_state ,[O ,NQ ]};
340340common (cast ,{{score ,_R },_S },_StateData ) ->
341341 keep_state_and_data ;
@@ -743,6 +743,36 @@ scoring(L,U,R) ->
743743 L1 + L2
744744 end .
745745
746+ resetting ({_ ,KL },Q ) ->
747+ put (reset ,0 ),
748+ lists :foreach (
749+ fun (K ) ->
750+ ets :delete (? ETS_KEYS_TABLE_NAME ,K ),
751+ C = erase (K ),
752+ if
753+ (C - 1 ) div ? MAX_LIMIT == 0 ->
754+ N = list_to_atom (" o0" ++ integer_to_list ((C - 1 ) div ? MIN_LIMIT )),
755+ case whereis (N ) of
756+ undefined ->
757+ lfu_exact_score_sup :start ([(C - 1 ) div ? MIN_LIMIT ,0 ]),
758+ lfu_exact_score :reset (N ,K );
759+ _ ->
760+ lfu_exact_score :reset (N ,K )
761+ end ;
762+ true ->
763+ N = list_to_atom (" o" ++ integer_to_list ((C - 1 ) div ? MAX_LIMIT )),
764+ case whereis (N ) of
765+ undefined ->
766+ lfu_quick_score_sup :start ([(C - 1 ) div ? MAX_LIMIT ,0 ]),
767+ lfu_quick_score :reset (N ,K );
768+ true ->
769+ lfu_quick_score :reset (N ,K )
770+ end
771+ end ,
772+ put (reset ,get (reset )+ 1 )
773+ end ,
774+ KL ),
775+ Q - erase (reset );
746776resetting (T ,Q ) ->
747777 put (reset ,0 ),
748778 ets :info (T ) =/= undefined andalso
0 commit comments