This is an automated email from the ASF dual-hosted git repository. sorber pushed a commit to branch 6.2.x in repository https://git-dual.apache.org/repos/asf/trafficserver.git
commit f15396674429853dc7f5bcac15cb1b4d671ebb39 Author: Thomas Jackson <[email protected]> AuthorDate: Wed Apr 6 18:58:36 2016 -0700 TS-4328 Not retry if any bytes were sent Before we would still retry if the origin didn't error-- but just took a really long time. So, instead of only checking if the body was sent-- we can check the SM to see if we wrote any header bytes to the wire. If any bytes were sent the request cannot be retried. This closes #554 This also deprecates the `request_body_start` field, and as such removes it (cherry picked from commit f129996e1adaab399359cd248f4750a686d6bfc5) Conflicts: proxy/http/HttpTransact.h --- proxy/http/HttpSM.cc | 1 - proxy/http/HttpTransact.cc | 10 +++++++--- proxy/http/HttpTransact.h | 4 +--- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc index eabe0b5..2996250 100644 --- a/proxy/http/HttpSM.cc +++ b/proxy/http/HttpSM.cc @@ -5563,7 +5563,6 @@ HttpSM::do_setup_post_tunnel(HttpVC_t to_vc_type) IOBufferReader *buf_start = post_buffer->alloc_reader(); int64_t post_bytes = chunked ? INT64_MAX : t_state.hdr_info.request_content_length; - t_state.hdr_info.request_body_start = true; // Note: Many browsers, Netscape and IE included send two extra // bytes (CRLF) at the end of the post. We just ignore those // bytes since the sending them is not spec diff --git a/proxy/http/HttpTransact.cc b/proxy/http/HttpTransact.cc index b75850a..65dcc8a 100644 --- a/proxy/http/HttpTransact.cc +++ b/proxy/http/HttpTransact.cc @@ -6463,13 +6463,17 @@ HttpTransact::is_request_valid(State *s, HTTPHdr *incoming_request) // bool HttpTransact::is_request_retryable // -// If we started a POST/PUT tunnel then we can -// not retry failed requests +// In the general case once bytes have been sent on the wire the request cannot be retried. +// The reason we cannot retry is that the rfc2616 does not make any gaurantees about the +// retry-ability of a request. In fact in the reverse proxy case it is quite common for GET +// requests on the origin to fire tracking events etc. So, as a proxy once we have sent bytes +// on the wire to the server we cannot gaurantee that the request is safe to redispatch to another server. // bool HttpTransact::is_request_retryable(State *s) { - if (s->hdr_info.request_body_start == true) { + // If the connection was established-- we cannot retry + if (s->state_machine->server_request_hdr_bytes > 0) { return false; } diff --git a/proxy/http/HttpTransact.h b/proxy/http/HttpTransact.h index 31f9c58..4fddf58 100644 --- a/proxy/http/HttpTransact.h +++ b/proxy/http/HttpTransact.h @@ -798,7 +798,6 @@ public: bool trust_response_cl; ResponseError_t response_error; bool extension_method; - bool request_body_start; _HeaderInfo() : client_request(), @@ -814,8 +813,7 @@ public: client_req_is_server_style(false), trust_response_cl(false), response_error(NO_RESPONSE_HEADER_ERROR), - extension_method(false), - request_body_start(false) + extension_method(false) { } } HeaderInfo; -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
