Use config app instead of couch_config BugzID: 13179
Project: http://git-wip-us.apache.org/repos/asf/couchdb-mem3/repo Commit: http://git-wip-us.apache.org/repos/asf/couchdb-mem3/commit/c2c5478a Tree: http://git-wip-us.apache.org/repos/asf/couchdb-mem3/tree/c2c5478a Diff: http://git-wip-us.apache.org/repos/asf/couchdb-mem3/diff/c2c5478a Branch: refs/heads/import Commit: c2c5478af2a72d10fc0a2855fca77b0ac55baed4 Parents: 2e9b66b Author: Adam Kocoloski <[email protected]> Authored: Tue Feb 26 21:18:13 2013 -0500 Committer: Adam Kocoloski <[email protected]> Committed: Tue Feb 26 21:18:13 2013 -0500 ---------------------------------------------------------------------- src/mem3.app.src | 2 +- src/mem3.erl | 6 +++--- src/mem3_nodes.erl | 4 ++-- src/mem3_shards.erl | 32 ++++++++++++++++++++------------ src/mem3_sync.erl | 10 +++++----- src/mem3_util.erl | 8 ++++---- 6 files changed, 35 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/couchdb-mem3/blob/c2c5478a/src/mem3.app.src ---------------------------------------------------------------------- diff --git a/src/mem3.app.src b/src/mem3.app.src index 5a3f790..22c3d67 100644 --- a/src/mem3.app.src +++ b/src/mem3.app.src @@ -10,5 +10,5 @@ mem3_sync_nodes, mem3_sup ]}, - {applications, [kernel, stdlib, sasl, crypto, mochiweb, couch, rexi, twig]} + {applications, [kernel, stdlib, config, sasl, crypto, mochiweb, couch, rexi, twig]} ]}. http://git-wip-us.apache.org/repos/asf/couchdb-mem3/blob/c2c5478a/src/mem3.erl ---------------------------------------------------------------------- diff --git a/src/mem3.erl b/src/mem3.erl index 86a3a4b..854a1f1 100644 --- a/src/mem3.erl +++ b/src/mem3.erl @@ -79,7 +79,7 @@ shards(DbName) when is_list(DbName) -> shards(list_to_binary(DbName)); shards(DbName) -> ShardDbName = - list_to_binary(couch_config:get("mem3", "shard_db", "dbs")), + list_to_binary(config:get("mem3", "shard_db", "dbs")), case DbName of ShardDbName -> %% shard_db is treated as a single sharded db to support calls to db_info @@ -157,7 +157,7 @@ choose_shards(DbName, Nodes, Options) -> true -> ok end, Q = mem3_util:to_integer(couch_util:get_value(q, Options, - couch_config:get("cluster", "q", "8"))), + config:get("cluster", "q", "8"))), %% rotate to a random entry in the nodelist for even distribution {A, B} = lists:split(crypto:rand_uniform(1,length(Nodes)+1), Nodes), RotatedNodes = B ++ A, @@ -166,7 +166,7 @@ choose_shards(DbName, Nodes, Options) -> get_placement(Options) -> case couch_util:get_value(placement, Options) of undefined -> - case couch_config:get("cluster", "placement") of + case config:get("cluster", "placement") of undefined -> undefined; PlacementStr -> http://git-wip-us.apache.org/repos/asf/couchdb-mem3/blob/c2c5478a/src/mem3_nodes.erl ---------------------------------------------------------------------- diff --git a/src/mem3_nodes.erl b/src/mem3_nodes.erl index 0abb693..7574558 100644 --- a/src/mem3_nodes.erl +++ b/src/mem3_nodes.erl @@ -95,7 +95,7 @@ code_change(_OldVsn, State, _Extra) -> %% internal functions initialize_nodelist() -> - DbName = couch_config:get("mem3", "node_db", "nodes"), + DbName = config:get("mem3", "node_db", "nodes"), {ok, Db} = mem3_util:ensure_exists(DbName), {ok, _, Db} = couch_btree:fold(Db#db.id_tree, fun first_fold/3, Db, []), % add self if not already present @@ -120,7 +120,7 @@ first_fold(#full_doc_info{id=Id}=DocInfo, _, Db) -> {ok, Db}. listen_for_changes(Since) -> - DbName = couch_config:get("mem3", "node_db", "nodes"), + DbName = config:get("mem3", "node_db", "nodes"), {ok, Db} = mem3_util:ensure_exists(DbName), Args = #changes_args{ feed = "continuous", http://git-wip-us.apache.org/repos/asf/couchdb-mem3/blob/c2c5478a/src/mem3_shards.erl ---------------------------------------------------------------------- diff --git a/src/mem3_shards.erl b/src/mem3_shards.erl index 9443a00..0300ab3 100644 --- a/src/mem3_shards.erl +++ b/src/mem3_shards.erl @@ -14,13 +14,15 @@ -module(mem3_shards). -behaviour(gen_server). +-behaviour(config_listener). -export([init/1, terminate/2, code_change/3]). -export([handle_call/3, handle_cast/2, handle_info/2]). +-export([handle_config_change/5]). -export([start_link/0]). -export([for_db/1, for_docid/2, get/3, local/1, fold/2]). --export([set_max_size/1, config_change/3]). +-export([set_max_size/1]). -record(st, { max_size = 25000, @@ -87,7 +89,7 @@ local(DbName) -> lists:filter(Pred, for_db(DbName)). fold(Fun, Acc) -> - DbName = couch_config:get("mem3", "shards_db", "dbs"), + DbName = config:get("mem3", "shards_db", "dbs"), {ok, Db} = mem3_util:ensure_exists(DbName), FAcc = {Db, Fun, Acc}, try @@ -101,18 +103,18 @@ fold(Fun, Acc) -> set_max_size(Size) when is_integer(Size), Size > 0 -> gen_server:call(?MODULE, {set_max_size, Size}). -config_change("mem3", "shard_cache_size", SizeList) -> +handle_config_change("mem3", "shard_cache_size", SizeList, _, _) -> Size = list_to_integer(SizeList), - ok = gen_server:call(?MODULE, {set_max_size, Size}, infinity); -config_change("mem3", "shard_db", _DbName) -> - ok = gen_server:call(?MODULE, shard_db_changed, infinity). + {ok, gen_server:call(?MODULE, {set_max_size, Size}, infinity)}; +handle_config_change("mem3", "shard_db", _DbName, _, _) -> + {ok, gen_server:call(?MODULE, shard_db_changed, infinity)}. init([]) -> ets:new(?SHARDS, [bag, protected, named_table, {keypos,#shard.dbname}]), ets:new(?DBS, [set, protected, named_table]), ets:new(?ATIMES, [ordered_set, protected, named_table]), - ok = couch_config:register(fun ?MODULE:config_change/3), - SizeList = couch_config:get("mem3", "shard_cache_size", "25000"), + ok = config:listen_for_changes(?MODULE, nil), + SizeList = config:get("mem3", "shard_cache_size", "25000"), {Pid, _} = spawn_monitor(fun() -> listen_for_changes(get_update_seq()) end), {ok, #st{ max_size = list_to_integer(SizeList), @@ -156,6 +158,12 @@ handle_info({'DOWN', _, _, Pid, Reason}, #st{changes_pid=Pid}=St) -> handle_info({start_listener, Seq}, St) -> {NewPid, _} = spawn_monitor(fun() -> listen_for_changes(Seq) end), {noreply, St#st{changes_pid=NewPid}}; +handle_info({gen_event_EXIT, {config_listener, ?MODULE}, _Reason}, State) -> + erlang:send_after(5000, self(), restart_config_listener), + {noreply, State}; +handle_info(restart_config_listener, State) -> + ok = config:listen_for_changes(?MODULE, nil), + {noreply, State}; handle_info(_Msg, St) -> {noreply, St}. @@ -183,13 +191,13 @@ fold_fun(#doc_info{}=DI, _, {Db, UFun, UAcc}) -> end. get_update_seq() -> - DbName = couch_config:get("mem3", "shards_db", "dbs"), + DbName = config:get("mem3", "shards_db", "dbs"), {ok, Db} = mem3_util:ensure_exists(DbName), couch_db:close(Db), Db#db.update_seq. listen_for_changes(Since) -> - DbName = couch_config:get("mem3", "shards_db", "dbs"), + DbName = config:get("mem3", "shards_db", "dbs"), {ok, Db} = mem3_util:ensure_exists(DbName), Args = #changes_args{ feed = "continuous", @@ -228,7 +236,7 @@ changes_callback(timeout, _) -> ok. load_shards_from_disk(DbName) when is_binary(DbName) -> - X = ?l2b(couch_config:get("mem3", "shard_db", "dbs")), + X = ?l2b(config:get("mem3", "shard_db", "dbs")), {ok, Db} = mem3_util:ensure_exists(X), try load_shards_from_db(Db, DbName) @@ -252,7 +260,7 @@ load_shards_from_disk(DbName, DocId)-> [S || #shard{range = [B,E]} = S <- Shards, B =< HashKey, HashKey =< E]. create_if_missing(Name) -> - DbDir = couch_config:get("couchdb", "database_dir"), + DbDir = config:get("couchdb", "database_dir"), Filename = filename:join(DbDir, ?b2l(Name) ++ ".couch"), case filelib:is_regular(Filename) of true -> http://git-wip-us.apache.org/repos/asf/couchdb-mem3/blob/c2c5478a/src/mem3_sync.erl ---------------------------------------------------------------------- diff --git a/src/mem3_sync.erl b/src/mem3_sync.erl index a0eb8f1..6fda545 100644 --- a/src/mem3_sync.erl +++ b/src/mem3_sync.erl @@ -65,7 +65,7 @@ remove_node(Node) -> init([]) -> process_flag(trap_exit, true), - Concurrency = couch_config:get("mem3", "sync_concurrency", "10"), + Concurrency = config:get("mem3", "sync_concurrency", "10"), gen_event:add_handler(mem3_events, mem3_sync_event, []), {ok, Pid} = start_update_notifier(), initial_sync(), @@ -328,16 +328,16 @@ local_dbs() -> [nodes_db(), shards_db(), users_db()]. nodes_db() -> - ?l2b(couch_config:get("mem3", "node_db", "nodes")). + ?l2b(config:get("mem3", "node_db", "nodes")). shards_db() -> - ?l2b(couch_config:get("mem3", "shard_db", "dbs")). + ?l2b(config:get("mem3", "shard_db", "dbs")). users_db() -> - ?l2b(couch_config:get("couch_httpd_auth", "authentication_db", "_users")). + ?l2b(config:get("couch_httpd_auth", "authentication_db", "_users")). maybe_redirect(Node) -> - case couch_config:get("mem3.redirects", atom_to_list(Node)) of + case config:get("mem3.redirects", atom_to_list(Node)) of undefined -> Node; Redirect -> http://git-wip-us.apache.org/repos/asf/couchdb-mem3/blob/c2c5478a/src/mem3_util.erl ---------------------------------------------------------------------- diff --git a/src/mem3_util.erl b/src/mem3_util.erl index e21aaf3..17b03c8 100644 --- a/src/mem3_util.erl +++ b/src/mem3_util.erl @@ -69,12 +69,12 @@ attach_nodes([S | Rest], Acc, [Node | Nodes], UsedNodes) -> attach_nodes(Rest, [S#shard{node=Node} | Acc], Nodes, [Node | UsedNodes]). open_db_doc(DocId) -> - DbName = ?l2b(couch_config:get("mem3", "shard_db", "dbs")), + DbName = ?l2b(config:get("mem3", "shard_db", "dbs")), {ok, Db} = couch_db:open(DbName, []), try couch_db:open_doc(Db, DocId, []) after couch_db:close(Db) end. write_db_doc(Doc) -> - DbName = ?l2b(couch_config:get("mem3", "shard_db", "dbs")), + DbName = ?l2b(config:get("mem3", "shard_db", "dbs")), write_db_doc(DbName, Doc, true). write_db_doc(DbName, #doc{id=Id, body=Body} = Doc, ShouldMutate) -> @@ -100,7 +100,7 @@ write_db_doc(DbName, #doc{id=Id, body=Body} = Doc, ShouldMutate) -> delete_db_doc(DocId) -> gen_server:cast(mem3_shards, {cache_remove, DocId}), - DbName = ?l2b(couch_config:get("mem3", "shard_db", "dbs")), + DbName = ?l2b(config:get("mem3", "shard_db", "dbs")), delete_db_doc(DbName, DocId, true). delete_db_doc(DbName, DocId, ShouldMutate) -> @@ -153,7 +153,7 @@ to_integer(N) when is_list(N) -> list_to_integer(N). n_val(undefined, NodeCount) -> - n_val(couch_config:get("cluster", "n", "3"), NodeCount); + n_val(config:get("cluster", "n", "3"), NodeCount); n_val(N, NodeCount) when is_list(N) -> n_val(list_to_integer(N), NodeCount); n_val(N, NodeCount) when is_integer(NodeCount), N > NodeCount ->
