serrislew commented on code in PR #12092:
URL: https://github.com/apache/trafficserver/pull/12092#discussion_r1994245099
##########
plugins/cache_range_requests/cache_range_requests.cc:
##########
@@ -605,6 +642,60 @@ handle_cache_lookup_complete(TSHttpTxn txnp, txndata
*const txn_state)
}
}
}
+ } else if (TS_CACHE_LOOKUP_HIT_STALE == cachestat &&
txn_state->ident_check) {
+ TSMBuffer resp_buf = nullptr;
+ TSMLoc resp_loc = TS_NULL_MLOC;
+
+ pluginconfig const *const pc = txn_state->config;
+
+ if (TS_SUCCESS == TSHttpTxnCachedRespGet(txnp, &resp_buf, &resp_loc)) {
+ if (TS_HTTP_STATUS_OK == TSHttpHdrStatusGet(resp_buf, resp_loc)) {
+ // get the request identifier
+ TSMBuffer req_buf = nullptr;
+ TSMLoc req_loc = TS_NULL_MLOC;
+ if (TS_SUCCESS == TSHttpTxnClientReqGet(txnp, &req_buf, &req_loc)) {
+ TSMLoc const ident_loc = TSMimeHdrFieldFind(req_buf, req_loc,
pc->ident_header.data(), pc->ident_header.size());
+ if (TS_NULL_MLOC != ident_loc) {
+ DEBUG_LOG("Checking identifier against the '%s' header",
pc->ident_header.c_str());
+
+ int len = 0;
+ char const *const str = TSMimeHdrFieldValueStringGet(req_buf,
req_loc, ident_loc, -1, &len);
+
+ // determine which identifier has been provided
+ std::string_view const svreq(str, len);
+ std::string_view tag;
+ if (svreq.substr(0, Etag.length()) == Etag) {
+ DEBUG_LOG("Etag identifier provided in '%.*s'", len, str);
+ tag = Etag;
+ } else if (svreq.substr(0, LastModified.length()) ==
LastModified) {
+ DEBUG_LOG("Last-Modified indentifier provided in '%.*s'", len,
str);
+ tag = LastModified;
+ }
+
+ if (!tag.empty()) {
+ TSMLoc const id_loc = TSMimeHdrFieldFind(resp_buf, resp_loc,
tag.data(), tag.size());
+ if (TS_NULL_MLOC != id_loc) {
+ int len = 0;
+ char const *const str =
TSMimeHdrFieldValueStringGet(resp_buf, resp_loc, id_loc, 0, &len);
+ std::string_view const sv(str, len);
+
+ DEBUG_LOG("Checking cached '%.*s' against request '%.*s'",
len, str, (int)svreq.size(), svreq.data());
+
+ if (std::string_view::npos != svreq.rfind(sv)) {
Review Comment:
How does this check if the response is a MISS? Is it possible that the first
block is a MISS but the second block is STALE and we use the ident header so we
don't call parent or origin server since we mark it as FRESH?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]