Pass Stack tuple module to handle_request_int
Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/repo Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/commit/52c75f93 Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/tree/52c75f93 Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/diff/52c75f93 Branch: refs/heads/split_out_httpd_stack Commit: 52c75f93ec70cc5b9f2ca1f3ff9efad0252f251c Parents: 557ceb3 Author: ILYA Khlopotov <iil...@ca.ibm.com> Authored: Fri Feb 26 13:18:56 2016 -0800 Committer: ILYA Khlopotov <iil...@ca.ibm.com> Committed: Tue Mar 1 08:35:09 2016 -0800 ---------------------------------------------------------------------- src/couch_httpd.erl | 12 +++++++++++- src/couch_httpd_handler.erl | 29 +++++++++++++++-------------- src/couch_httpd_rewrite.erl | 10 ++++++---- 3 files changed, 32 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/52c75f93/src/couch_httpd.erl ---------------------------------------------------------------------- diff --git a/src/couch_httpd.erl b/src/couch_httpd.erl index c0e2338..929a9b7 100644 --- a/src/couch_httpd.erl +++ b/src/couch_httpd.erl @@ -83,7 +83,8 @@ accepted_encodings/1, verify_is_server_admin/1, get_delayed_req/1, - chunked_response_buffer_size/0 + chunked_response_buffer_size/0, + port/1 ]). -export([ @@ -528,6 +529,15 @@ get_delayed_req(Resp) -> chunked_response_buffer_size() -> config:get_integer("httpd", "chunked_response_buffer", 1490). +port(StackId) when is_atom(StackId) -> + integer_to_list(mochiweb_socket_server:get(StackId, port)); +port(#httpd{stack = Stack}) -> + Stack:port(); +port(#httpd_resp{stack = Stack}) -> + Stack:port(); +port(StackName) when is_list(StackName) -> + port(list_to_existing_atom(StackName)). + %% ================ %% Helper functions http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/52c75f93/src/couch_httpd_handler.erl ---------------------------------------------------------------------- diff --git a/src/couch_httpd_handler.erl b/src/couch_httpd_handler.erl index a1f6eb2..69c47ee 100644 --- a/src/couch_httpd_handler.erl +++ b/src/couch_httpd_handler.erl @@ -22,8 +22,8 @@ ]). -export([ - handle_request/1, - handle_request_int/1 + handle_request/2, + handle_request_int/2 ]). -export([ @@ -82,20 +82,20 @@ stop() -> catch mochiweb_http:stop(https), mochiweb_http:stop(?MODULE). -handle_request(MochiReq0) -> +handle_request(Stack, MochiReq0) -> erlang:put(?REWRITE_COUNT, 0), MochiReq = couch_httpd_vhost:dispatch_host(MochiReq0), - handle_request_int(MochiReq). + handle_request_int(Stack, MochiReq). -handle_request_int(MochiReq) -> +handle_request_int(Stack, MochiReq) -> Begin = os:timestamp(), - case config:get("chttpd", "socket_options") of - undefined -> - ok; - SocketOptsCfg -> - {ok, SocketOpts} = couch_util:parse_term(SocketOptsCfg), - ok = mochiweb_socket:setopts(MochiReq:get(socket), SocketOpts) - end, + + case Stack:socket_options() of + undefined -> + ok; + SocketOpts -> + ok = mochiweb_socket:setopts(MochiReq:get(socket), SocketOpts) + end. % for the path, use the raw path with the query string and fragment % removed, but URL quoting left intact @@ -161,7 +161,8 @@ handle_request_int(MochiReq) -> requested_path_parts = [?l2b(couch_httpd:unquote(Part)) || Part <- string:tokens(RequestedPath, "/")], user_ctx = erlang:erase(pre_rewrite_user_ctx), - auth = erlang:erase(pre_rewrite_auth) + auth = erlang:erase(pre_rewrite_auth), + stack = Stack }, % put small token on heap to keep requests synced to backend calls @@ -393,7 +394,7 @@ is_http(_) -> false. make_uri(Req, Raw) -> - Port = integer_to_list(mochiweb_socket_server:get(chttpd, port)), + Port = couch_httpd:port(Req), Url = list_to_binary(["http://", config:get("httpd", "bind_address"), ":", Port, "/", Raw]), Headers = [ http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/52c75f93/src/couch_httpd_rewrite.erl ---------------------------------------------------------------------- diff --git a/src/couch_httpd_rewrite.erl b/src/couch_httpd_rewrite.erl index 1caaeb7..b42e05f 100644 --- a/src/couch_httpd_rewrite.erl +++ b/src/couch_httpd_rewrite.erl @@ -53,7 +53,8 @@ get_rules(#doc{body={Props}}) -> couch_util:get_value(<<"rewrites">>, Props). -do_rewrite(#httpd{mochi_req=MochiReq}=Req, {Props}=Rewrite) when is_list(Props) -> +do_rewrite(#httpd{mochi_req=MochiReq, stack=Stack}=Req, {Props}=Rewrite) + when is_list(Props) -> case couch_util:get_value(<<"code">>, Props) of undefined -> Method = rewrite_method(Req, Rewrite), @@ -66,7 +67,7 @@ do_rewrite(#httpd{mochi_req=MochiReq}=Req, {Props}=Rewrite) when is_list(Props) Headers), NewMochiReq:cleanup(), couch_log:debug("rewrite to ~p", [Path]), - couch_httpd:handle_request_int(NewMochiReq); + couch_httpd_handler:handle_request_int(Stack, NewMochiReq); Code -> couch_httpd:send_response( Req, @@ -79,7 +80,8 @@ do_rewrite(#httpd{mochi_req=MochiReq}=Req, {Props}=Rewrite) when is_list(Props) end; do_rewrite(#httpd{method=Method, path_parts=[_DbName, <<"_design">>, _DesignName, _Rewrite|PathParts], - mochi_req=MochiReq}=Req, + mochi_req=MochiReq, + stack=Stack}=Req, Rules) when is_list(Rules) -> % create dispatch list from rules Prefix = path_prefix(Req), @@ -123,7 +125,7 @@ do_rewrite(#httpd{method=Method, % cleanup, It force mochiweb to reparse raw uri. MochiReq1:cleanup(), - couch_httpd:handle_request_int(MochiReq1). + couch_httpd_handler:handle_request_int(Stack, MochiReq1). rewrite_method(#httpd{method=Method}, {Props}) ->