This is an automated email from the ASF dual-hosted git repository. rnewson pushed a commit to branch 1523-bye-bye-5986-rnewson in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 9f4e76152c7ed7b76f0ec25d4ef41218810f61eb Author: Joan Touzet <[email protected]> AuthorDate: Mon Oct 14 16:42:26 2019 +0100 extract get_httpd_handlers function --- src/couch/src/couch_httpd.erl | 58 ++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/src/couch/src/couch_httpd.erl b/src/couch/src/couch_httpd.erl index 3cdfc0c..2baeb4b 100644 --- a/src/couch/src/couch_httpd.erl +++ b/src/couch/src/couch_httpd.erl @@ -104,38 +104,14 @@ start_link(Name, Options) -> Else -> Else end, ok = validate_bind_address(BindAddress), - DefaultFun = make_arity_1_fun("{couch_httpd_db, handle_request}"), - - {ok, HttpdGlobalHandlers} = application:get_env(httpd_global_handlers), - - UrlHandlersList = lists:map( - fun({UrlKey, SpecStr}) -> - {?l2b(UrlKey), make_arity_1_fun(SpecStr)} - end, HttpdGlobalHandlers), - - {ok, HttpdDbHandlers} = application:get_env(httpd_db_handlers), - - DbUrlHandlersList = lists:map( - fun({UrlKey, SpecStr}) -> - {?l2b(UrlKey), make_arity_2_fun(SpecStr)} - end, HttpdDbHandlers), - - {ok, HttpdDesignHandlers} = application:get_env(httpd_design_handlers), - DesignUrlHandlersList = lists:map( - fun({UrlKey, SpecStr}) -> - {?l2b(UrlKey), make_arity_3_fun(SpecStr)} - end, HttpdDesignHandlers), - - UrlHandlers = dict:from_list(UrlHandlersList), - DbUrlHandlers = dict:from_list(DbUrlHandlersList), - DesignUrlHandlers = dict:from_list(DesignUrlHandlersList), {ok, ServerOptions} = couch_util:parse_term( config:get("httpd", "server_options", "[]")), {ok, SocketOptions} = couch_util:parse_term( config:get("httpd", "socket_options", "[]")), set_auth_handlers(), + Handlers = get_httpd_handlers(), % ensure uuid is set so that concurrent replications % get the same value. @@ -148,9 +124,7 @@ start_link(Name, Options) -> _ -> ok = mochiweb_socket:setopts(Req:get(socket), SocketOptions) end, - apply(?MODULE, handle_request, [ - Req, DefaultFun, UrlHandlers, DbUrlHandlers, DesignUrlHandlers - ]) + apply(?MODULE, handle_request, [Req | Handlers]) end, % set mochiweb options @@ -187,6 +161,34 @@ set_auth_handlers() -> auth_handler_name(SpecStr) -> lists:nth(?HANDLER_NAME_IN_MODULE_POS, re:split(SpecStr, "[\\W_]", [])). +get_httpd_handlers() -> + {ok, HttpdGlobalHandlers} = application:get_env(httpd_global_handlers), + + UrlHandlersList = lists:map( + fun({UrlKey, SpecStr}) -> + {?l2b(UrlKey), make_arity_1_fun(SpecStr)} + end, HttpdGlobalHandlers), + + {ok, HttpdDbHandlers} = application:get_env(httpd_db_handlers), + + DbUrlHandlersList = lists:map( + fun({UrlKey, SpecStr}) -> + {?l2b(UrlKey), make_arity_2_fun(SpecStr)} + end, HttpdDbHandlers), + + {ok, HttpdDesignHandlers} = application:get_env(httpd_design_handlers), + + DesignUrlHandlersList = lists:map( + fun({UrlKey, SpecStr}) -> + {?l2b(UrlKey), make_arity_3_fun(SpecStr)} + end, HttpdDesignHandlers), + + UrlHandlers = dict:from_list(UrlHandlersList), + DbUrlHandlers = dict:from_list(DbUrlHandlersList), + DesignUrlHandlers = dict:from_list(DesignUrlHandlersList), + DefaultFun = make_arity_1_fun("{couch_httpd_db, handle_request}"), + [DefaultFun, UrlHandlers, DbUrlHandlers, DesignUrlHandlers]. + % SpecStr is a string like "{my_module, my_fun}" % or "{my_module, my_fun, <<"my_arg">>}" make_arity_1_fun(SpecStr) ->
