summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien F. Katz <damien@apache.org>2008-08-22 17:37:04 +0000
committerDamien F. Katz <damien@apache.org>2008-08-22 17:37:04 +0000
commit50d8dcda77661677c1bd2cf9a557afc6e065441b (patch)
tree865eca95e2b21bf1d9f9de6212ca3f2a23b80dd4
parentd57e63bf4580f6a0615d5a4fae81df5bd3e7ea0a (diff)
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
-rw-r--r--src/couchdb/couch_file.erl5
-rw-r--r--src/couchdb/couch_server.erl19
-rw-r--r--src/couchdb/couch_util.erl24
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 ->