This is an automated email from the ASF dual-hosted git repository. jaydoane pushed a commit to branch time-unit-parameterization in repository https://gitbox.apache.org/repos/asf/couchdb-ets-lru.git
commit 70abf7929a03e3a6c0469d054aedd33f75001a32 Author: Jay Doane <jaydo...@apache.org> AuthorDate: Wed Feb 20 19:48:29 2019 -0800 Change ctime to strict monotonic time --- src/ets_lru.erl | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/ets_lru.erl b/src/ets_lru.erl index 7db0c19..0f6fdb2 100644 --- a/src/ets_lru.erl +++ b/src/ets_lru.erl @@ -12,7 +12,7 @@ -module(ets_lru). -behaviour(gen_server). --vsn(1). +-vsn(2). -export([ @@ -53,7 +53,7 @@ key :: term(), val :: term(), atime :: strict_monotonic_time(), - ctime :: time_value() + ctime :: strict_monotonic_time() }). -record(st, { @@ -179,11 +179,10 @@ handle_call({insert, Key, Val}, _From, St) -> true = ets:delete(St#st.atimes, ATime), true = ets:insert(St#st.atimes, {NewATime, Key}); [] -> - NewCTime = element(1, NewATime), - Entry = #entry{key=Key, val=Val, atime=NewATime, ctime=NewCTime}, + Entry = #entry{key=Key, val=Val, atime=NewATime, ctime=NewATime}, true = ets:insert(St#st.objects, Entry), true = ets:insert(St#st.atimes, {NewATime, Key}), - true = ets:insert(St#st.ctimes, {NewCTime, Key}) + true = ets:insert(St#st.ctimes, {NewATime, Key}) end, {reply, ok, St, 0}; @@ -286,9 +285,8 @@ trim_lifetime(#st{max_lifetime=Max}=St) -> case ets:first(St#st.ctimes) of '$end_of_table' -> ok; - CTime -> - TimeDiff = Now - CTime, - case TimeDiff > Max of + CTime = {Time, _} -> + case Now - Time > Max of true -> [{CTime, Key}] = ets:lookup(St#st.ctimes, CTime), Pattern = #entry{key=Key, atime='$1', _='_'}, @@ -324,9 +322,9 @@ next_timeout(St) -> case ets:first(St#st.ctimes) of '$end_of_table' -> infinity; - CTime -> + {Time, _} -> Now = erlang:monotonic_time(St#st.time_unit), - TimeDiff = Now - CTime, + TimeDiff = Now - Time, erlang:max(St#st.max_lifetime - TimeDiff, 0) end.