From 9f0ae92b4f4c0762214092cf8d50675d01c847ab Mon Sep 17 00:00:00 2001 From: Filipe David Borba Manana Date: Tue, 1 Feb 2011 06:47:32 +0000 Subject: Backport COUCHDB-1008 from trunk (revision 1055592) The motivation for this backport is to prevent the "nodelay" option, under section "httpd", from reaching version 1.1. This patch introduces the "socket_options" configuration parameter which is more generic - it allows nodelay as well as other socket options to be specified. Not adding this patch to 1.1.x would imply still supporting the "nodelay" parameter in future releases to avoid breaking the configuration API. git-svn-id: https://svn.apache.org/repos/asf/couchdb/branches/1.1.x@1065922 13f79535-47bb-0310-9956-ffa450edef68 --- src/couchdb/couch_httpd.erl | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/couchdb/couch_httpd.erl b/src/couchdb/couch_httpd.erl index dc98957c..47d2edb7 100644 --- a/src/couchdb/couch_httpd.erl +++ b/src/couchdb/couch_httpd.erl @@ -57,8 +57,6 @@ start_link(Name, Options) -> % will restart us and then we will pick up the new settings. BindAddress = couch_config:get("httpd", "bind_address", any), - NoDelay = "true" == couch_config:get("httpd", "nodelay", "false"), - DefaultSpec = "{couch_httpd_db, handle_request}", DefaultFun = make_arity_1_fun( couch_config:get("httpd", "default_handler", DefaultSpec) @@ -82,7 +80,17 @@ start_link(Name, Options) -> UrlHandlers = dict:from_list(UrlHandlersList), DbUrlHandlers = dict:from_list(DbUrlHandlersList), DesignUrlHandlers = dict:from_list(DesignUrlHandlersList), + {ok, ServerOptions} = couch_util:parse_term( + couch_config:get("httpd", "server_options", "[]")), + {ok, SocketOptions} = couch_util:parse_term( + couch_config:get("httpd", "socket_options", "[]")), Loop = fun(Req)-> + case SocketOptions of + [] -> + ok; + _ -> + ok = mochiweb_socket:setopts(Req:get(socket), SocketOptions) + end, apply(?MODULE, handle_request, [ Req, DefaultFun, UrlHandlers, DbUrlHandlers, DesignUrlHandlers ]) @@ -90,11 +98,10 @@ start_link(Name, Options) -> % and off we go - {ok, Pid} = case mochiweb_http:start(Options ++ [ + {ok, Pid} = case mochiweb_http:start(Options ++ ServerOptions ++ [ {loop, Loop}, {name, Name}, - {ip, BindAddress}, - {nodelay,NoDelay} + {ip, BindAddress} ]) of {ok, MochiPid} -> {ok, MochiPid}; {error, Reason} -> @@ -109,6 +116,10 @@ start_link(Name, Options) -> ?MODULE:stop(); ("httpd", "default_handler") -> ?MODULE:stop(); + ("httpd", "server_options") -> + ?MODULE:stop(); + ("httpd", "socket_options") -> + ?MODULE:stop(); ("httpd_global_handlers", _) -> ?MODULE:stop(); ("httpd_db_handlers", _) -> -- cgit v1.2.3