Permalink
Browse files

Fixes COUCHDB-517 UUID server restarts.

Patch by Robert Newson to avoid restarting the UUID gen_server on
configuration changes which leads to OTP supervisor shutdowns
when exceeding the restart frequency.



git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@821402 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information...
1 parent 7ccab9b commit d6c411269c1159016c80ff6d244f1f9124f19329 @davisp davisp committed Oct 3, 2009
Showing with 19 additions and 12 deletions.
  1. +19 −12 src/couchdb/couch_uuids.erl
@@ -41,18 +41,10 @@ utc_random() ->
list_to_binary(Prefix ++ couch_util:to_hex(crypto:rand_bytes(9))).
init([]) ->
- ok = couch_config:register(fun("uuids", _) -> ?MODULE:stop() end),
- AlgoStr = couch_config:get("uuids", "algorithm", "random"),
- case couch_util:to_existing_atom(AlgoStr) of
- random ->
- {ok, random};
- utc_random ->
- {ok, utc_random};
- sequential ->
- {ok, {sequential, new_prefix(), inc()}};
- Unknown ->
- throw({unknown_uuid_algorithm, Unknown})
- end.
+ ok = couch_config:register(
+ fun("uuids", _) -> gen_server:cast(?MODULE, change) end
+ ),
+ {ok, state()}.
terminate(_Reason, _State) ->
ok.
@@ -70,6 +62,8 @@ handle_call(create, _From, {sequential, Pref, Seq}) ->
{reply, Result, {sequential, Pref, Seq + inc()}}
end.
+handle_cast(change, _State) ->
+ {noreply, state()};
handle_cast(stop, State) ->
{stop, normal, State};
handle_cast(_Msg, State) ->
@@ -86,3 +80,16 @@ new_prefix() ->
inc() ->
crypto:rand_uniform(1, 16#ffe).
+
+state() ->
+ AlgoStr = couch_config:get("uuids", "algorithm", "random"),
+ case couch_util:to_existing_atom(AlgoStr) of
+ random ->
+ random;
+ utc_random ->
+ utc_random;
+ sequential ->
+ {sequential, new_prefix(), inc()};
+ Unknown ->
+ throw({unknown_uuid_algorithm, Unknown})
+ end.

0 comments on commit d6c4112

Please sign in to comment.