You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2014/03/28 17:26:11 UTC
git commit: TS-2554 Reorder the tests slightly,
such that the most common checks goes first
Repository: trafficserver
Updated Branches:
refs/heads/master f61b1b416 -> 82cc8c12a
TS-2554 Reorder the tests slightly, such that the most common checks goes first
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/82cc8c12
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/82cc8c12
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/82cc8c12
Branch: refs/heads/master
Commit: 82cc8c12ad8cf37efcc7dd61d749f74f40f10756
Parents: f61b1b4
Author: Leif Hedstrom <zw...@apache.org>
Authored: Fri Mar 28 10:24:20 2014 -0600
Committer: Leif Hedstrom <zw...@apache.org>
Committed: Fri Mar 28 10:24:20 2014 -0600
----------------------------------------------------------------------
.../background_fetch/background_fetch.cc | 57 +++++++++++---------
1 file changed, 32 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/82cc8c12/plugins/experimental/background_fetch/background_fetch.cc
----------------------------------------------------------------------
diff --git a/plugins/experimental/background_fetch/background_fetch.cc b/plugins/experimental/background_fetch/background_fetch.cc
index dc895f3..8a4e3e9 100644
--- a/plugins/experimental/background_fetch/background_fetch.cc
+++ b/plugins/experimental/background_fetch/background_fetch.cc
@@ -437,7 +437,12 @@ bg_fetch_cont(TSCont contp, TSEvent event, void* /* edata ATS_UNUSED */)
}
//////////////////////////////////////////////////////////////////////////////
-// Main "plugin".
+// Main "plugin". Before initiating a background fetch, this checks:
+//
+// 1. Is this an internal request? This avoid infinite loops...
+// 2. Is the response from origin a 206 (Partial)?
+// 3. Is the client request a GET request ?
+// 4. Finally, is the request / response cacheable as per current configs.
//
static int
cont_handle_response(TSCont /* contp ATS_UNUSED */, TSEvent /* event ATS_UNUSED */, void* edata)
@@ -445,33 +450,35 @@ cont_handle_response(TSCont /* contp ATS_UNUSED */, TSEvent /* event ATS_UNUSED
// ToDo: If we want to support per-remap configurations, we have to pass along the data here
TSHttpTxn txnp = static_cast<TSHttpTxn>(edata);
+ // 1. Make sure it's not an internal request first.
TSDebug(PLUGIN_NAME, "Testing: request is internal?");
if (TSHttpIsInternalRequest(txnp) != TS_SUCCESS) {
- TSMBuffer request;
- TSMLoc req_hdr;
-
- if (TS_SUCCESS == TSHttpTxnClientReqGet(txnp, &request, &req_hdr)) {
- int method_len;
- const char* method = TSHttpHdrMethodGet(request, req_hdr, &method_len);
-
- // Make sure it's not an internal request first, and then examine the Origin server response
- TSDebug(PLUGIN_NAME, "Testing: request is a GET?");
- if (TS_HTTP_METHOD_GET == method) {
- TSMBuffer response;
- TSMLoc resp_hdr;
-
- if (TS_SUCCESS == TSHttpTxnServerRespGet(txnp, &response, &resp_hdr)) {
- // ToDo: Check the MIME type first, to see if it's a type we care about.
- // ToDo: Such MIME types should probably be per remap rule.
-
- // Only deal with 206 responses on a GET request (partial content), anything else is irrelevant
- TSDebug(PLUGIN_NAME, "Testing: response is 206?");
- if (TS_HTTP_STATUS_PARTIAL_CONTENT == TSHttpHdrStatusGet(response, resp_hdr)) {
+ TSMBuffer response;
+ TSMLoc resp_hdr;
+
+ if (TS_SUCCESS == TSHttpTxnServerRespGet(txnp, &response, &resp_hdr)) {
+ // ToDo: Check the MIME type first, to see if it's a type we care about.
+ // ToDo: Such MIME types should probably be per remap rule.
+
+ // 2. Only deal with 206 responses from Origin
+ TSDebug(PLUGIN_NAME, "Testing: response is 206?");
+ if (TS_HTTP_STATUS_PARTIAL_CONTENT == TSHttpHdrStatusGet(response, resp_hdr)) {
+ TSMBuffer request;
+ TSMLoc req_hdr;
+
+ if (TS_SUCCESS == TSHttpTxnClientReqGet(txnp, &request, &req_hdr)) {
+ int method_len;
+ const char* method = TSHttpHdrMethodGet(request, req_hdr, &method_len);
+
+ // 3. And only deal with GET requests (ToDo: for now?)
+ TSDebug(PLUGIN_NAME, "Testing: request is a GET?");
+ if (TS_HTTP_METHOD_GET == method) {
// Temporarily change the response status to 200 OK, so we can reevaluate cacheability.
TSHttpHdrStatusSet(response, resp_hdr, TS_HTTP_STATUS_OK);
bool cacheable = TSHttpTxnIsCacheable(txnp, NULL, response);
TSHttpHdrStatusSet(response, resp_hdr, TS_HTTP_STATUS_PARTIAL_CONTENT);
+ // 4. Is the request / response cacheable?
TSDebug(PLUGIN_NAME, "Testing: request / response is cacheable?");
if (cacheable) {
BGFetchData* data = new BGFetchData();
@@ -486,12 +493,12 @@ cont_handle_response(TSCont /* contp ATS_UNUSED */, TSEvent /* event ATS_UNUSED
}
}
}
- // Release the response MLoc
- TSHandleMLocRelease(response, TS_NULL_MLOC, resp_hdr);
+ // Release the request MLoc
+ TSHandleMLocRelease(request, TS_NULL_MLOC, req_hdr);
}
}
- // Release the request MLoc
- TSHandleMLocRelease(request, TS_NULL_MLOC, req_hdr);
+ // Release the response MLoc
+ TSHandleMLocRelease(response, TS_NULL_MLOC, resp_hdr);
}
}