From d6c411269c1159016c80ff6d244f1f9124f19329 Mon Sep 17 00:00:00 2001 From: Paul Joseph Davis Date: Sat, 3 Oct 2009 19:53:03 +0000 Subject: 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 --- src/couchdb/couch_uuids.erl | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) (limited to 'src/couchdb/couch_uuids.erl') diff --git a/src/couchdb/couch_uuids.erl b/src/couchdb/couch_uuids.erl index 24d81aad..e1851e1d 100644 --- a/src/couchdb/couch_uuids.erl +++ b/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. -- cgit v1.2.3