You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by sh...@apache.org on 2015/07/07 01:34:38 UTC
[1/2] trafficserver git commit: Revert "TS-3656: Activating follow
redirection in send server response hook does not work for post. This closes
#215."
Repository: trafficserver
Updated Branches:
refs/heads/master 46156a8d8 -> 4282d3353
Revert "TS-3656: Activating follow redirection in send server response hook does not work for post. This closes #215."
This reverts commit 999946e47a90324ff8bfcbb22d40493e89463599.
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/00cb6981
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/00cb6981
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/00cb6981
Branch: refs/heads/master
Commit: 00cb6981e1ccad93e963018b7a75075bade32246
Parents: 5defa51
Author: shinrich <sh...@yahoo-inc.com>
Authored: Mon Jul 6 18:33:03 2015 -0500
Committer: shinrich <sh...@yahoo-inc.com>
Committed: Mon Jul 6 18:33:03 2015 -0500
----------------------------------------------------------------------
proxy/http/HttpSM.cc | 34 +++++++++++++++++++---------------
proxy/http/HttpTunnel.cc | 27 ++++++++++++++++++++++++---
proxy/http/HttpTunnel.h | 7 ++++++-
3 files changed, 49 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/00cb6981/proxy/http/HttpSM.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
index cbcc34b..afbdf3a 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -1835,6 +1835,14 @@ HttpSM::state_read_server_response_header(int event, void *data)
t_state.transact_return_point = HttpTransact::HandleResponse;
t_state.api_next_action = HttpTransact::SM_ACTION_API_READ_RESPONSE_HDR;
+ // if exceeded limit deallocate postdata buffers and disable redirection
+ if (enable_redirection && (redirection_tries < HttpConfig::m_master.number_of_redirections)) {
+ ++redirection_tries;
+ } else {
+ tunnel.deallocate_redirect_postdata_buffers();
+ enable_redirection = false;
+ }
+
do_api_callout();
break;
case PARSE_CONT:
@@ -3155,6 +3163,7 @@ HttpSM::tunnel_handler_ua(int event, HttpTunnelConsumer *c)
ink_assert(ua_entry->vc == c->vc);
if (close_connection) {
// If the client could be pipelining, we need to set the ua_session into half close mode
+
if (t_state.client_info.pipeline_possible == true && c->producer->vc_type != HT_STATIC && event == VC_EVENT_WRITE_COMPLETE) {
ua_session->set_half_close_flag();
}
@@ -3404,6 +3413,8 @@ HttpSM::tunnel_handler_for_partial_post(int event, void * /* data ATS_UNUSED */)
tunnel.deallocate_buffers();
tunnel.reset();
+ tunnel.allocate_redirect_postdata_producer_buffer();
+
t_state.redirect_info.redirect_in_process = false;
if (post_failed) {
@@ -5316,20 +5327,17 @@ HttpSM::do_setup_post_tunnel(HttpVC_t to_vc_type)
// if redirect_in_process and redirection is enabled add static producer
if (t_state.redirect_info.redirect_in_process && enable_redirection &&
- (tunnel.postbuf && tunnel.postbuf->postdata_copy_buffer_start != NULL)) {
+ (tunnel.postbuf && tunnel.postbuf->postdata_copy_buffer_start != NULL && tunnel.postbuf->postdata_producer_buffer != NULL)) {
post_redirect = true;
// copy the post data into a new producer buffer for static producer
- int64_t alloc_index = buffer_size_to_index(t_state.hdr_info.request_content_length);
- MIOBuffer *postdata_producer_buffer = new_MIOBuffer(alloc_index);
- IOBufferReader *postdata_producer_reader = postdata_producer_buffer->alloc_reader();
- postdata_producer_buffer->write(tunnel.postbuf->postdata_copy_buffer_start);
- int64_t post_bytes = postdata_producer_reader->read_avail();
+ tunnel.postbuf->postdata_producer_buffer->write(tunnel.postbuf->postdata_copy_buffer_start);
+ int64_t post_bytes = tunnel.postbuf->postdata_producer_reader->read_avail();
transfered_bytes = post_bytes;
- p = tunnel.add_producer(HTTP_TUNNEL_STATIC_PRODUCER, post_bytes, postdata_producer_reader, (HttpProducerHandler)NULL, HT_STATIC,
- "redirect static agent post");
+ p = tunnel.add_producer(HTTP_TUNNEL_STATIC_PRODUCER, post_bytes, tunnel.postbuf->postdata_producer_reader,
+ (HttpProducerHandler)NULL, HT_STATIC, "redirect static agent post");
// the tunnel has taken over the buffer and will free it
- postdata_producer_buffer = NULL;
- postdata_producer_reader = NULL;
+ tunnel.postbuf->postdata_producer_buffer = NULL;
+ tunnel.postbuf->postdata_producer_reader = NULL;
} else {
int64_t alloc_index;
// content length is undefined, use default buffer size
@@ -5358,8 +5366,6 @@ HttpSM::do_setup_post_tunnel(HttpVC_t to_vc_type)
ua_buffer_reader->consume(client_request_body_bytes);
p = tunnel.add_producer(ua_entry->vc, post_bytes - transfered_bytes, buf_start, &HttpSM::tunnel_handler_post_ua, HT_HTTP_CLIENT,
"user agent post");
- post_buffer = NULL;
- buf_start = NULL;
}
ua_entry->in_tunnel = true;
@@ -7309,10 +7315,8 @@ void
HttpSM::do_redirect()
{
DebugSM("http_redirect", "[HttpSM::do_redirect]");
- // if exceeded limit deallocate postdata buffers and disable redirection
- if (!enable_redirection || (redirection_tries++ >= HttpConfig::m_master.number_of_redirections)) {
+ if (!enable_redirection || redirection_tries >= HttpConfig::m_master.number_of_redirections) {
tunnel.deallocate_redirect_postdata_buffers();
- enable_redirection = false;
return;
}
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/00cb6981/proxy/http/HttpTunnel.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpTunnel.cc b/proxy/http/HttpTunnel.cc
index 571d512..c5eb009 100644
--- a/proxy/http/HttpTunnel.cc
+++ b/proxy/http/HttpTunnel.cc
@@ -920,9 +920,9 @@ HttpTunnel::producer_run(HttpTunnelProducer *p)
}
// YTS Team, yamsat Plugin
- // Allocate and copy partial POST data to buffers for possible later use in redirect.
- // Check for the various parameters including the maximum configured post data size
- if (p->alive && sm->t_state.method == HTTP_WKSIDX_POST && (p->vc_type == HT_HTTP_CLIENT)) {
+ // Allocate and copy partial POST data to buffers. Check for the various parameters
+ // including the maximum configured post data size
+ if (p->alive && sm->t_state.method == HTTP_WKSIDX_POST && sm->enable_redirection && (p->vc_type == HT_HTTP_CLIENT)) {
Debug("http_redirect", "[HttpTunnel::producer_run] client post: %" PRId64 " max size: %" PRId64 "",
p->buffer_start->read_avail(), HttpConfig::m_master.post_copy_size);
@@ -1622,6 +1622,19 @@ HttpTunnel::copy_partial_post_data()
}
// YTS Team, yamsat Plugin
+// Allocate a new buffer for static producers
+void
+HttpTunnel::allocate_redirect_postdata_producer_buffer()
+{
+ int64_t alloc_index = buffer_size_to_index(sm->t_state.hdr_info.request_content_length);
+
+ ink_release_assert(postbuf->postdata_producer_buffer == NULL);
+
+ postbuf->postdata_producer_buffer = new_MIOBuffer(alloc_index);
+ postbuf->postdata_producer_reader = postbuf->postdata_producer_buffer->alloc_reader();
+}
+
+// YTS Team, yamsat Plugin
// Allocating the post data buffers
void
HttpTunnel::allocate_redirect_postdata_buffers(IOBufferReader *ua_reader)
@@ -1637,10 +1650,13 @@ HttpTunnel::allocate_redirect_postdata_buffers(IOBufferReader *ua_reader)
postbuf->ua_buffer_reader = ua_reader;
postbuf->postdata_copy_buffer = new_MIOBuffer(alloc_index);
postbuf->postdata_copy_buffer_start = postbuf->postdata_copy_buffer->alloc_reader();
+ allocate_redirect_postdata_producer_buffer();
} else {
// Reset the buffer readers
postbuf->postdata_copy_buffer->dealloc_reader(postbuf->postdata_copy_buffer_start);
postbuf->postdata_copy_buffer_start = postbuf->postdata_copy_buffer->alloc_reader();
+ postbuf->postdata_producer_buffer->dealloc_reader(postbuf->postdata_producer_reader);
+ postbuf->postdata_producer_reader = postbuf->postdata_producer_buffer->alloc_reader();
}
}
@@ -1653,6 +1669,11 @@ HttpTunnel::deallocate_redirect_postdata_buffers()
Debug("http_redirect", "[HttpTunnel::deallocate_postdata_copy_buffers]");
if (postbuf != NULL) {
+ if (postbuf->postdata_producer_buffer != NULL) {
+ free_MIOBuffer(postbuf->postdata_producer_buffer);
+ postbuf->postdata_producer_buffer = NULL;
+ postbuf->postdata_producer_reader = NULL; // deallocated by the buffer
+ }
if (postbuf->postdata_copy_buffer != NULL) {
free_MIOBuffer(postbuf->postdata_copy_buffer);
postbuf->postdata_copy_buffer = NULL;
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/00cb6981/proxy/http/HttpTunnel.h
----------------------------------------------------------------------
diff --git a/proxy/http/HttpTunnel.h b/proxy/http/HttpTunnel.h
index 3bfac74..db760a6 100644
--- a/proxy/http/HttpTunnel.h
+++ b/proxy/http/HttpTunnel.h
@@ -260,12 +260,16 @@ struct HttpTunnelProducer {
class PostDataBuffers
{
public:
- PostDataBuffers() : postdata_copy_buffer(NULL), postdata_copy_buffer_start(NULL), ua_buffer_reader(NULL)
+ PostDataBuffers()
+ : postdata_producer_buffer(NULL), postdata_copy_buffer(NULL), postdata_producer_reader(NULL), postdata_copy_buffer_start(NULL),
+ ua_buffer_reader(NULL)
{
Debug("http_redirect", "[PostDataBuffers::PostDataBuffers]");
}
+ MIOBuffer *postdata_producer_buffer;
MIOBuffer *postdata_copy_buffer;
+ IOBufferReader *postdata_producer_reader;
IOBufferReader *postdata_copy_buffer_start;
IOBufferReader *ua_buffer_reader;
};
@@ -310,6 +314,7 @@ public:
// YTS Team, yamsat Plugin
void copy_partial_post_data();
+ void allocate_redirect_postdata_producer_buffer();
void allocate_redirect_postdata_buffers(IOBufferReader *ua_reader);
void deallocate_redirect_postdata_buffers();
[2/2] trafficserver git commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/trafficserver
Posted by sh...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/trafficserver
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/4282d335
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/4282d335
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/4282d335
Branch: refs/heads/master
Commit: 4282d335366d716fd0ee860e40446f7e49052d0f
Parents: 00cb698 46156a8
Author: shinrich <sh...@yahoo-inc.com>
Authored: Mon Jul 6 18:34:24 2015 -0500
Committer: shinrich <sh...@yahoo-inc.com>
Committed: Mon Jul 6 18:34:24 2015 -0500
----------------------------------------------------------------------
tools/slow_log_report.pl | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------