You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by da...@apache.org on 2008/08/19 01:51:51 UTC
svn commit: r686899 - in /incubator/couchdb/branches/runtimeconfig:
share/www/script/ src/couchdb/
Author: damien
Date: Mon Aug 18 16:51:50 2008
New Revision: 686899
URL: http://svn.apache.org/viewvc?rev=686899&view=rev
Log:
More refactoring work.
Modified:
incubator/couchdb/branches/runtimeconfig/share/www/script/couch_tests.js
incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_config.erl
incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_db_update_notifier.erl
incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_ft_query.erl
incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_httpd.erl
incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_log.erl
incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_query_servers.erl
incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_server_sup.erl
incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_util.erl
Modified: incubator/couchdb/branches/runtimeconfig/share/www/script/couch_tests.js
URL: http://svn.apache.org/viewvc/incubator/couchdb/branches/runtimeconfig/share/www/script/couch_tests.js?rev=686899&r1=686898&r2=686899&view=diff
==============================================================================
--- incubator/couchdb/branches/runtimeconfig/share/www/script/couch_tests.js [utf-8] (original)
+++ incubator/couchdb/branches/runtimeconfig/share/www/script/couch_tests.js [utf-8] Mon Aug 18 16:51:50 2008
@@ -1441,35 +1441,31 @@
if(debug) debugger;
var xhr;
- xhr = CouchDB.request("GET", "/_config/CouchDB/MaximumDocumentSize");
- T(xhr.status == 200);
- var res = JSON.parse(xhr.responseText);
- T(res.ok);
- var original_value = res.value
-
- xhr = CouchDB.request("POST", "/_config/CouchDB/MaximumDocumentSize", {"body":"1024"});
+ xhr = CouchDB.request("POST", "/_config/CouchDBTest/Test", {"body":"1024"});
T(xhr.status == 200);
var res = JSON.parse(xhr.responseText);
T(res.ok);
T(res.value == "1024");
+
+ restartServer();
- xhr = CouchDB.request("GET", "/_config/CouchDB/MaximumDocumentSize");
+ xhr = CouchDB.request("GET", "/_config/CouchDBTest/Test");
T(xhr.status == 200);
var res = JSON.parse(xhr.responseText);
T(res.ok);
T(res.value == "1024");
- xhr = CouchDB.request("DELETE", "/_config/CouchDB/MaximumDocumentSize");
+ xhr = CouchDB.request("DELETE", "/_config/CouchDBTest/Test");
T(xhr.status == 200);
var res = JSON.parse(xhr.responseText);
T(res.ok);
T(res.old_value == "1024");
- xhr = CouchDB.request("PUT", "/_config/CouchDB/MaximumDocumentSize", {"body": original_value});
+ xhr = CouchDB.request("PUT", "/_config/CouchDBTest/Test", {"body": "1024"});
T(xhr.status == 200);
var res = JSON.parse(xhr.responseText);
T(res.ok);
- T(res.value == original_value);
+ T(res.value == "1024");
}
};
Modified: incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_config.erl
URL: http://svn.apache.org/viewvc/incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_config.erl?rev=686899&r1=686898&r2=686899&view=diff
==============================================================================
--- incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_config.erl (original)
+++ incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_config.erl Mon Aug 18 16:51:50 2008
@@ -26,7 +26,7 @@
-export([store/2, register/1, register/2,
get/1, get/2,
lookup_match/1, lookup_match/2,
- dump/0, unset/1, load_ini_file/1]).
+ all/0, unset/1, load_ini_file/1]).
-record(config,
{notify_funs=[],
@@ -66,10 +66,7 @@
%% to ets::match(). Returns Default::any() if no Key is found
lookup_match(Key, Default) -> gen_server:call(?MODULE, {lookup_match, Key, Default}).
-%% @spec dump() -> ok:atom()
-%% @doc Dumps the current ets table with all configuration data.
-dump() -> gen_server:call(?MODULE, {dump, []}).
-
+all() -> gen_server:call(?MODULE, all).
register(Fun) -> gen_server:call(?MODULE, {register, Fun, self()}).
@@ -88,13 +85,6 @@
init(IniFiles) ->
ets:new(?MODULE, [named_table, set, protected]),
[ok = load_ini_file(IniFile) || IniFile <- IniFiles],
-
- % announce startup
- io:format("Apache CouchDB ~s (LogLevel=~s) is starting.~n", [
- couch_server:get_version(),
- ?MODULE:get({"Log", "Level"}, "info")
- ]),
-
{ok, #config{writeback_filename=lists:last(IniFiles)}}.
%% @doc see store/2
@@ -118,12 +108,8 @@
handle_call({lookup_match, Key, Default}, _From, Config) ->
{reply, fix_lookup_result(ets:match(?MODULE, Key), Default), Config};
-%% @doc See dump/0
-handle_call({dump, []}, _From, Config) ->
- KVs = lists:sort(ets:tab2list(?MODULE)),
- [io:format("[~s] ~s=~p~n", [Module, Variable, Value])
- || {{Module, Variable}, Value} <- KVs],
- {reply, ok, Config};
+handle_call(all, _From, Config) ->
+ {reply, lists:sort(ets:tab2list(?MODULE)), Config};
%% @doc See register/2
handle_call({register, Fun, Pid}, _From, #config{notify_funs=PidFuns}=Config) ->
Modified: incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_db_update_notifier.erl
URL: http://svn.apache.org/viewvc/incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_db_update_notifier.erl?rev=686899&r1=686898&r2=686899&view=diff
==============================================================================
--- incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_db_update_notifier.erl (original)
+++ incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_db_update_notifier.erl Mon Aug 18 16:51:50 2008
@@ -25,8 +25,6 @@
-export([start_link/1, notify/1]).
-export([init/1, terminate/2, handle_event/2, handle_call/2, handle_info/2, code_change/3,stop/1]).
--define(ERR_HANDLE, {Port, {exit_status, Status}} -> {stop, {unknown_error, Status}, {unknown_error, Status}, Port}).
-
start_link(Exec) ->
couch_event_sup:start_link(couch_db_update, {couch_db_update_notifier, make_ref()}, Exec).
Modified: incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_ft_query.erl
URL: http://svn.apache.org/viewvc/incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_ft_query.erl?rev=686899&r1=686898&r2=686899&view=diff
==============================================================================
--- incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_ft_query.erl (original)
+++ incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_ft_query.erl Mon Aug 18 16:51:50 2008
@@ -13,14 +13,12 @@
-module(couch_ft_query).
-behaviour(gen_server).
--export([start_link/1, execute/2]).
+-export([start_link/0, execute/2]).
-export([init/1, terminate/2, handle_call/3, handle_cast/2, handle_info/2,code_change/3, stop/0]).
--define(ERR_HANDLE, {Port, {exit_status, Status}} -> {stop, {unknown_error, Status}, {unknown_error, Status}, Port}).
-
-start_link(QueryExec) ->
- gen_server:start_link({local, couch_ft_query}, couch_ft_query, QueryExec, []).
+start_link() ->
+ gen_server:start_link({local, couch_ft_query}, couch_ft_query, [], []).
stop() ->
exit(whereis(couch_ft_query), close).
@@ -28,13 +26,25 @@
execute(DatabaseName, QueryString) ->
gen_server:call(couch_ft_query, {ft_query, DatabaseName, QueryString}).
-init(QueryExec) ->
- Port = open_port({spawn, QueryExec}, [{line, 1000}, exit_status, hide]),
- {ok, Port}.
+init([]) ->
+ ok = couch_config:register(
+ fun({"Search", "QueryServer"}) ->
+ ?MODULE:stop()
+ end),
+
+ case couch_config:get({"Search", "QueryServer"}, none) of
+ none ->
+ {ok, none};
+ QueryExec ->
+ Port = open_port({spawn, QueryExec}, [{line, 1000}, exit_status, hide]),
+ {ok, Port}
+ end.
terminate(_Reason, _Server) ->
ok.
+handle_call({ft_query, _Database, _QueryText}, _From, none) ->
+ {reply, {error, no_full_test_query_specified_in_config}, none};
handle_call({ft_query, Database, QueryText}, _From, Port) ->
% send the database name
true = port_command(Port, Database ++ "\n"),
Modified: incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_httpd.erl
URL: http://svn.apache.org/viewvc/incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_httpd.erl?rev=686899&r1=686898&r2=686899&view=diff
==============================================================================
--- incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_httpd.erl (original)
+++ incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_httpd.erl Mon Aug 18 16:51:50 2008
@@ -39,13 +39,12 @@
}).
start_link() ->
-
% read config and register for configuration changes
% just stop if one of the config settings change. couch_server_sup
% will restart us and then we will pick up the new settings.
- BindAddress = couch_config:get({"HTTPd", "BindAddress"}, "127.0.0.1"),
+ BindAddress = couch_config:get({"HTTPd", "BindAddress"}, any),
Port = couch_config:get({"HTTPd", "Port"}, "5984"),
DocumentRoot = couch_config:get({"HTTPd", "DocumentRoot"}, "../../share/www"),
@@ -65,10 +64,10 @@
({"HTTPd", "DocumentRoot"}) ->
?MODULE:stop()
end, Pid),
+
{ok, Pid}.
stop() ->
- io:format("asfasfSZfasdfasdfasfasdf"),
mochiweb_http:stop(?MODULE).
handle_request(config_change) ->
Modified: incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_log.erl
URL: http://svn.apache.org/viewvc/incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_log.erl?rev=686899&r1=686898&r2=686899&view=diff
==============================================================================
--- incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_log.erl (original)
+++ incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_log.erl Mon Aug 18 16:51:50 2008
@@ -52,7 +52,7 @@
?MODULE:stop()
end),
- Filename = couch_config:get({"Log", "File"}, "log.txt"),
+ Filename = couch_config:get({"Log", "File"}, "couchdb.log"),
Level = couch_config:get({"Log", "Level"},"info"),
{ok, Fd} = file:open(Filename, [append]),
Modified: incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_query_servers.erl
URL: http://svn.apache.org/viewvc/incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_query_servers.erl?rev=686899&r1=686898&r2=686899&view=diff
==============================================================================
--- incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_query_servers.erl (original)
+++ incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_query_servers.erl Mon Aug 18 16:51:50 2008
@@ -176,13 +176,15 @@
% just stop if one of the config settings change. couch_server_sup
% will restart us and then we will pick up the new settings.
- QueryServerList = couch_config:lookup_match(
- {{"CouchDB Query Servers", '$1'}, '$2'}, []),
+
ok = couch_config:register(
fun({"CouchDB Query Server" ++ _, _}) ->
?MODULE:stop()
end),
+ QueryServerList = couch_config:lookup_match(
+ {{"CouchDB Query Servers", '$1'}, '$2'}, []),
+
{ok, {QueryServerList, []}}.
terminate(_Reason, _Server) ->
@@ -232,9 +234,7 @@
{noreply, {QueryServerList, lists:keydelete(Port, 2, LangPorts)}};
_ ->
?LOG_ERROR("Unknown linked port/process crash: ~p", [Port])
- end;
-handle_info(_Whatever, {Cmd, Ports}) ->
- {noreply, {Cmd, Ports}}.
+ end.
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
Modified: incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_server_sup.erl
URL: http://svn.apache.org/viewvc/incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_server_sup.erl?rev=686899&r1=686898&r2=686899&view=diff
==============================================================================
--- incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_server_sup.erl (original)
+++ incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_server_sup.erl Mon Aug 18 16:51:50 2008
@@ -14,7 +14,7 @@
-behaviour(supervisor).
--export([start_link/1,stop/0,couch_config_start_link_wrapper/2]).
+-export([start_link/1,stop/0,couch_config_start_link_wrapper/2,start_primary_services/0]).
-include("couch_db.hrl").
@@ -46,8 +46,23 @@
end;
_ -> ok
end,
+
{ok, ConfigPid} = couch_config:start_link(IniFiles),
+ LogLevel = couch_config:get({"Log", "Level"}, "info"),
+ % announce startup
+ io:format("Apache CouchDB ~s (LogLevel=~s) is starting.~n", [
+ couch_server:get_version(),
+ LogLevel
+ ]),
+ case LogLevel of
+ "debug" ->
+ io:format("Configuration Settings ~p:~n", [IniFiles]),
+ [io:format(" [~s] ~s=~p~n", [Module, Variable, Value])
+ || {{Module, Variable}, Value} <- couch_config:all()];
+ _ -> ok
+ end,
+
LibDir =
case couch_config:get({"CouchDB", "UtilDriverDir"}, null) of
null ->
@@ -56,52 +71,22 @@
end,
ok = couch_util:start_driver(LibDir),
-
- ChildProcesses =
+ BaseServices =
+ {{one_for_all, 10, 3600},
[{couch_config,
{couch_server_sup, couch_config_start_link_wrapper, [IniFiles, ConfigPid]},
permanent,
brutal_kill,
worker,
- [couch_config]},
- {couch_log,
- {couch_log, start_link, []},
- permanent,
- brutal_kill,
- worker,
- [couch_server]},
- {couch_db_update_event,
- {gen_event, start_link, [{local, couch_db_update}]},
- permanent,
- 1000,
- supervisor,
dynamic},
- {couch_server,
- {couch_server, sup_start_link, []},
+ {couch_primary_services,
+ {couch_server_sup, start_primary_services, []},
permanent,
brutal_kill,
- worker,
- [couch_server]},
- {couch_query_servers,
- {couch_query_servers, start_link, []},
- permanent,
- brutal_kill,
- worker,
- [couch_query_servers]},
- {couch_view,
- {couch_view, start_link, []},
- permanent,
- brutal_kill,
- worker,
- [couch_view]},
- {couch_httpd,
- {couch_httpd, start_link, []},
- permanent,
- 1000,
supervisor,
- [couch_httpd]}
- ],
+ [couch_server_sup]}
+ ]},
% ensure these applications are running
@@ -109,8 +94,8 @@
application:start(crypto),
{ok, Pid} = supervisor:start_link(
- {local, couch_server_sup}, couch_server_sup, ChildProcesses),
- io:format("started"),
+ {local, couch_server_sup}, couch_server_sup, BaseServices),
+
% launch the icu bridge
% just restart if one of the config settings change.
@@ -119,16 +104,66 @@
?MODULE:stop()
end, Pid),
- % we only get where when startup was successful
- BindAddress = couch_config:get({"HTTPd", "BindAddress"}),
- Port = couch_config:get({"HTTPd", "Port"}),
- io:format("Apache CouchDB has started, see http://~s:~s/_utils/index.html~n",
- [BindAddress, Port]),
+ unlink(ConfigPid),
+
+ io:format("Apache CouchDB has started. Time to relax.~n"),
+
{ok, Pid}.
+start_primary_services() ->
+ supervisor:start_link(couch_server_sup,
+ {{one_for_one, 10, 3600},
+ [{couch_log,
+ {couch_log, start_link, []},
+ permanent,
+ brutal_kill,
+ worker,
+ [couch_log]},
+ {couch_db_update_event,
+ {gen_event, start_link, [{local, couch_db_update}]},
+ permanent,
+ brutal_kill,
+ supervisor,
+ dynamic},
+ {couch_server,
+ {couch_server, sup_start_link, []},
+ permanent,
+ brutal_kill,
+ supervisor,
+ [couch_server]},
+ {couch_query_servers,
+ {couch_query_servers, start_link, []},
+ permanent,
+ brutal_kill,
+ supervisor,
+ [couch_query_servers]},
+ {couch_view,
+ {couch_view, start_link, []},
+ permanent,
+ brutal_kill,
+ supervisor,
+ [couch_view]},
+ {couch_httpd,
+ {couch_httpd, start_link, []},
+ permanent,
+ brutal_kill,
+ supervisor,
+ [couch_httpd]},
+ {couch_ft_query,
+ {couch_ft_query, start_link, []},
+ permanent,
+ brutal_kill,
+ supervisor,
+ [couch_ft_query]},
+ {couch_db_update_notifier_sup,
+ {couch_db_update_notifier_sup, start_link, []},
+ permanent,
+ brutal_kill,
+ supervisor,
+ [couch_db_update_notifier_sup]}]}).
stop() ->
catch exit(whereis(couch_server_sup), normal).
-init(ChildProcesses) ->
- {ok, {{one_for_one, 10, 3600}, ChildProcesses}}.
+init(ChildSpecs) ->
+ {ok, ChildSpecs}.
Modified: incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_util.erl
URL: http://svn.apache.org/viewvc/incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_util.erl?rev=686899&r1=686898&r2=686899&view=diff
==============================================================================
--- incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_util.erl (original)
+++ incubator/couchdb/branches/runtimeconfig/src/couchdb/couch_util.erl Mon Aug 18 16:51:50 2008
@@ -26,9 +26,12 @@
% read config and register for configuration changes
case erl_ddll:load_driver(LibDir, "couch_erl_driver") of
- ok -> ok;
- {error, already_loaded} -> ok;
- {error, Error} -> exit(erl_ddll:format_error(Error))
+ ok ->
+ ok;
+ {error, already_loaded} ->
+ ok = erl_ddll:reload_driver(LibDir, "couch_erl_driver");
+ {error, Error} ->
+ exit(erl_ddll:format_error(Error))
end.
new_uuid() ->