From 50d8dcda77661677c1bd2cf9a557afc6e065441b Mon Sep 17 00:00:00 2001 From: "Damien F. Katz" Date: Fri, 22 Aug 2008 17:37:04 +0000 Subject: Fix for couch_server process crash when databases that don't exist are attempted to be opened. Removed old comments and fixed the AllowRemoteRestart testing option. git-svn-id: https://svn.apache.org/repos/asf/incubator/couchdb/trunk@688129 13f79535-47bb-0310-9956-ffa450edef68 --- src/couchdb/couch_file.erl | 5 +++++ src/couchdb/couch_server.erl | 19 +++++++++---------- src/couchdb/couch_util.erl | 24 ------------------------ 3 files changed, 14 insertions(+), 34 deletions(-) diff --git a/src/couchdb/couch_file.erl b/src/couchdb/couch_file.erl index 5ccb521b..8101fdd2 100644 --- a/src/couchdb/couch_file.erl +++ b/src/couchdb/couch_file.erl @@ -45,6 +45,11 @@ open(Filepath, Options) -> {FdPid, ok} -> {ok, FdPid}; {FdPid, Error} -> + case process_info(self(), trap_exit) of + {trap_exit, true} -> + receive {'EXIT', FdPid, _} -> ok end; + _ -> ok + end, Error end; Error -> diff --git a/src/couchdb/couch_server.erl b/src/couchdb/couch_server.erl index 3fa23867..2844b443 100644 --- a/src/couchdb/couch_server.erl +++ b/src/couchdb/couch_server.erl @@ -25,7 +25,6 @@ -record(server,{ root_dir = [], dbname_regexp, - remote_restart=[], max_dbs_open=100, current_dbs_open=0 }). @@ -96,7 +95,7 @@ init([]) -> % will restart us and then we will pick up the new settings. RootDir = couch_config:get({"CouchDB", "RootDirectory"}, "."), - Options = couch_config:get({"CouchDB", "ServerOptions"}, []), + MaxDbsOpen = couch_config:get({"CouchDB", "MaxDbsOpen"}, "100"), Self = self(), ok = couch_config:register( fun({"CouchDB", "RootDirectory"}) -> @@ -109,12 +108,9 @@ init([]) -> ets:new(couch_dbs_by_pid, [set, private, named_table]), ets:new(couch_dbs_by_lru, [ordered_set, private, named_table]), process_flag(trap_exit, true), - MaxDbsOpen = proplists:get_value(max_dbs_open, Options), - RemoteRestart = proplists:get_value(remote_restart, Options), {ok, #server{root_dir=RootDir, dbname_regexp=RegExp, - max_dbs_open=MaxDbsOpen, - remote_restart=RemoteRestart}}. + max_dbs_open=MaxDbsOpen}}. terminate(_Reason, _Server) -> ok. @@ -264,10 +260,13 @@ handle_call({delete, DbName}, _From, Server) -> Error -> {reply, Error, Server} end; -handle_call(remote_restart, _From, #server{remote_restart=false}=Server) -> - {reply, ok, Server}; -handle_call(remote_restart, _From, #server{remote_restart=true}=Server) -> - exit(couch_server_sup, restart), +handle_call(remote_restart, _From, Server) -> + case couch_config:get({"CouchDB", "AllowRemoteRestart"}, "false") of + "true" -> + exit(couch_server_sup, restart); + _ -> + ok + end, {reply, ok, Server}. handle_cast(Msg, _Server) -> diff --git a/src/couchdb/couch_util.erl b/src/couchdb/couch_util.erl index 83f3e9a5..647d4d6e 100644 --- a/src/couchdb/couch_util.erl +++ b/src/couchdb/couch_util.erl @@ -136,30 +136,6 @@ implode([H|T], Sep, Acc) -> implode(T, Sep, [Sep,H|Acc]). -% This is a simple ini parser. it just converts the string -% contents of a file like this: -% -%; comments are ignored -%;commentedoutvariable=foo -%this is line that gets ignored because it has no equals sign -%[this line gets ignored because it starts with a bracket but doesn't end with one -%bloodtype=Ragu -%[Some Section] -%timeout=30 -%Default=zuh ; another comment (leading space or tab before a semi is necessary to be a comment if not at beginning of line) -%[Another Section] -%key with spaces=a value with stuff; and no comment -%oops="it doesn't qet quoted strings with semis quite right ; it thinks it's part comment" -% -%And converts it into this: -%[{{"","bloodtype"},"Ragu"}, -% {{"Some Section","timeout"},"30"}, -% {{"Some section","Default"}, "zuh"}, -% {{"Another Section", "key with spaces"}, "a value with stuff; and no comment"}, -% {{"Another Section", "oops"}, "\"it doesn't qet quoted strings with semis quite right"}] -% - - drv_port() -> case get(couch_drv_port) of undefined -> -- cgit v1.2.3