couchdb-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From fdman...@apache.org
Subject svn commit: r1064112 - /couchdb/trunk/src/couchdb/couch_auth_cache.erl
Date Thu, 27 Jan 2011 12:49:34 GMT
Author: fdmanana
Date: Thu Jan 27 12:49:34 2011
New Revision: 1064112

URL: http://svn.apache.org/viewvc?rev=1064112&view=rev
Log:
Avoid duplicated code and unnecessary generation of a list

Modified:
    couchdb/trunk/src/couchdb/couch_auth_cache.erl

Modified: couchdb/trunk/src/couchdb/couch_auth_cache.erl
URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_auth_cache.erl?rev=1064112&r1=1064111&r2=1064112&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_auth_cache.erl (original)
+++ couchdb/trunk/src/couchdb/couch_auth_cache.erl Thu Jan 27 12:49:34 2011
@@ -169,15 +169,7 @@ handle_call({new_max_cache_size, NewSize
     {reply, ok, State#state{max_cache_size = NewSize}};
 
 handle_call({new_max_cache_size, NewSize}, _From, State) ->
-    lists:foreach(
-        fun(_) ->
-            MruTime = ets:last(?BY_ATIME),
-            [{MruTime, UserName}] = ets:lookup(?BY_ATIME, MruTime),
-            true = ets:delete(?BY_ATIME, MruTime),
-            true = ets:delete(?BY_USER, UserName)
-        end,
-        lists:seq(1, State#state.cache_size - NewSize)
-    ),
+    free_mru_cache_entries(State#state.cache_size - NewSize),
     {reply, ok, State#state{max_cache_size = NewSize, cache_size = NewSize}};
 
 handle_call({fetch, UserName}, _From, State) ->
@@ -232,6 +224,8 @@ clear_cache(State) ->
     State#state{cache_size = 0}.
 
 
+add_cache_entry(_, _, _, #state{max_cache_size = 0} = State) ->
+    State;
 add_cache_entry(UserName, Credentials, ATime, State) ->
     case State#state.cache_size >= State#state.max_cache_size of
     true ->
@@ -243,16 +237,17 @@ add_cache_entry(UserName, Credentials, A
     true = ets:insert(?BY_USER, {UserName, {Credentials, ATime}}),
     State#state{cache_size = couch_util:get_value(size, ets:info(?BY_USER))}.
 
+free_mru_cache_entries(0) ->
+    ok;
+free_mru_cache_entries(N) when N > 0 ->
+    free_mru_cache_entry(),
+    free_mru_cache_entries(N - 1).
 
 free_mru_cache_entry() ->
-    case ets:last(?BY_ATIME) of
-    '$end_of_table' ->
-        ok;  % empty cache
-    MruTime ->
-        [{MruTime, UserName}] = ets:lookup(?BY_ATIME, MruTime),
-        true = ets:delete(?BY_ATIME, MruTime),
-        true = ets:delete(?BY_USER, UserName)
-    end.
+    MruTime = ets:last(?BY_ATIME),
+    [{MruTime, UserName}] = ets:lookup(?BY_ATIME, MruTime),
+    true = ets:delete(?BY_ATIME, MruTime),
+    true = ets:delete(?BY_USER, UserName).
 
 
 cache_hit(UserName, Credentials, ATime) ->



Mime
View raw message