You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ii...@apache.org on 2016/03/01 21:01:09 UTC
[36/50] couch-httpd commit: updated refs/heads/split_out_httpd_stack
to e44a372
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 <ii...@ca.ibm.com>
Authored: Fri Feb 26 13:18:56 2016 -0800
Committer: ILYA Khlopotov <ii...@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}) ->