couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Benoit Chesneau <bchesn...@gmail.com>
Subject Re: svn commit: r1064076 - /couchdb/trunk/src/couchdb/couch_auth_cache.erl
Date Thu, 27 Jan 2011 11:09:51 GMT
I think we could remove the uses of lists call and just use pattern
matching here. I attached a patch that is doing that. Also I added a
guard in case there is no member items in the cache.

- benoît

---
 src/couchdb/couch_auth_cache.erl |   25 +++++++++++++++----------
 1 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/src/couchdb/couch_auth_cache.erl b/src/couchdb/couch_auth_cache.erl
index 033e160..9bd3450 100644
--- a/src/couchdb/couch_auth_cache.erl
+++ b/src/couchdb/couch_auth_cache.erl
@@ -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(_) ->
-            LruTime = ets:last(?BY_ATIME),
-            [{LruTime, UserName}] = ets:lookup(?BY_ATIME, LruTime),
-            true = ets:delete(?BY_ATIME, LruTime),
-            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) ->
@@ -223,7 +215,7 @@ terminate(_Reason, #state{db_notifier = Notifier}) ->

 code_change(_OldVsn, State, _Extra) ->
     {ok, State}.
-
+

 clear_cache(State) ->
     exec_if_auth_db(fun(AuthDb) -> catch couch_db:close(AuthDb) end),
@@ -243,6 +235,19 @@ add_cache_entry(UserName, Credentials, ATime, State) ->
     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(1) ->
+    ok;
+free_mru_cache_entries(Count) ->
+    case ets:last(?BY_ATIME) of
+    '$end_of_table' ->
+        ok;
+    LruTime ->
+        [{LruTime, UserName}] = ets:lookup(?BY_ATIME, LruTime),
+        true = ets:delete(?BY_ATIME, LruTime),
+        true = ets:delete(?BY_USER, UserName),
+        free_mru_cache_entries(Count-1)
+    end.
+

 free_mru_cache_entry() ->
     case ets:last(?BY_ATIME) of
-- 
1.7.3.4


On Thu, Jan 27, 2011 at 11:46 AM,  <fdmanana@apache.org> wrote:
> Author: fdmanana
> Date: Thu Jan 27 10:46:42 2011
> New Revision: 1064076
>
> URL: http://svn.apache.org/viewvc?rev=1064076&view=rev
> Log:
> Trivial small refactoring
>
> Shortening the code by using multiple function clauses.
>
> 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=1064076&r1=1064075&r2=1064076&view=diff
> ==============================================================================
> --- couchdb/trunk/src/couchdb/couch_auth_cache.erl (original)
> +++ couchdb/trunk/src/couchdb/couch_auth_cache.erl Thu Jan 27 10:46:42 2011
> @@ -110,11 +110,8 @@ init(_) ->
>     ok = couch_config:register(
>         fun("couch_httpd_auth", "auth_cache_size", SizeList) ->
>             Size = list_to_integer(SizeList),
> -            ok = gen_server:call(?MODULE, {new_max_cache_size, Size}, infinity)
> -        end
> -    ),
> -    ok = couch_config:register(
> -        fun("couch_httpd_auth", "authentication_db", DbName) ->
> +            ok = gen_server:call(?MODULE, {new_max_cache_size, Size}, infinity);
> +        ("couch_httpd_auth", "authentication_db", DbName) ->
>             ok = gen_server:call(?MODULE, {new_auth_db, ?l2b(DbName)}, infinity)
>         end
>     ),
> @@ -167,26 +164,21 @@ handle_call(auth_db_compacted, _From, St
>     ),
>     {reply, ok, State};
>
> +handle_call({new_max_cache_size, NewSize},
> +        _From, #state{cache_size = Size} = State) when NewSize >= Size ->
> +    {reply, ok, State#state{max_cache_size = NewSize}};
> +
>  handle_call({new_max_cache_size, NewSize}, _From, State) ->
> -    case NewSize >= State#state.cache_size of
> -    true ->
> -        ok;
> -    false ->
> -        lists:foreach(
> -            fun(_) ->
> -                LruTime = ets:last(?BY_ATIME),
> -                [{LruTime, UserName}] = ets:lookup(?BY_ATIME, LruTime),
> -                true = ets:delete(?BY_ATIME, LruTime),
> -                true = ets:delete(?BY_USER, UserName)
> -            end,
> -            lists:seq(1, State#state.cache_size - NewSize)
> -        )
> -    end,
> -    NewState = State#state{
> -        max_cache_size = NewSize,
> -        cache_size = lists:min([NewSize, State#state.cache_size])
> -    },
> -    {reply, ok, NewState};
> +    lists:foreach(
> +        fun(_) ->
> +            LruTime = ets:last(?BY_ATIME),
> +            [{LruTime, UserName}] = ets:lookup(?BY_ATIME, LruTime),
> +            true = ets:delete(?BY_ATIME, LruTime),
> +            true = ets:delete(?BY_USER, UserName)
> +        end,
> +        lists:seq(1, State#state.cache_size - NewSize)
> +    ),
> +    {reply, ok, State#state{max_cache_size = NewSize, cache_size = NewSize}};
>
>  handle_call({fetch, UserName}, _From, State) ->
>     {Credentials, NewState} = case ets:lookup(?BY_USER, UserName) of
>
>
>

Mime
View raw message