let us move to the dev list. - Yongming Zhao 赵永明
在 2014年4月24日,上午5:52,Norm Paxton <norman.pax...@familysearch.org> 写道: > Regarding the previously raised issue about natural invalidation of PUT/POST > requests: > Further testing revealed that the solution provided in the previous email was > incorrect. > > I have been testing with the attached patch (patch against 4.1.2), which with > fairly extensive testing appears to be working well. However there are three > concerns with it: > 1> The patch calls do_cache_delete_all_alts() directly, rather than using > the state machine to specify the ‘next_action’. Without having a detailed > knowledge of the state machine and valid next-states, I felt it was safer to > do this – at least for proof of concept pending a more complete patch. > Looking for suggestion on correct TRANSACT_RETURN or next_action for this, or > if direct call rather than state machine management is correct in this case. > 2> The invalidation happens at the entry of the PUT/POST rather than at > the exit/return to client. This would not normally be a problem. However I > have a use case where a POST calls a separate webapp to validate the data, > which then calls back with a GET using the ID. This GET in the middle of the > POST caches the object again, before the POST took effect. > Looking for suggestions on where to put the invalidation so that it happens > at the exit. (Answer to <1> may correct <2>) > 3> This patch only invalidates alternates if the requested object is in > the cache. > Scenario: (Think large multi-faceted web application with multiple client > plugins, where some plugins use XML and others use JSON) > GET application/xml puts the object in the cache. POST application/json > tries to find itself in the cache, but non-existent so doesn’t invalidate the > alternates. The now-stale application/xml version of the object stays in the > cache. > Looking for suggestions to invalidate alternates even if the > requested object is not in the cache. > > Thanks in advance. > > -Norm Paxton > > From: Norm Paxton [mailto:norman.pax...@familysearch.org] > Sent: Wednesday, February 05, 2014 11:49 AM > To: us...@trafficserver.apache.org > Subject: RE: Cache invalidation for varying media types > > Whereas our desire is that a PUT or POST of one content-type causes an > invalidation not only of that instance of the object, but also of all > alternates of that object, does it make sense to simply add the PUT and POST > as additional options to the two s->method checks in > HttpTransact::delete_all_document_alternates_and_return(), as follows? > > if ((s->method != HTTP_WKSIDX_GET) && (s->method == HTTP_WKSIDX_DELETE || > s->method == HTTP_WKSIDX_PURGE)) { > > to: > > if ((s->method != HTTP_WKSIDX_GET) && (s->method == HTTP_WKSIDX_DELETE || > s->method == HTTP_WKSIDX_PURGE || > s->method == HTTP_WKSIDX_POST || s->method == HTTP_WKSIDX_PUT)) { > > and > > if (s->method == HTTP_WKSIDX_PURGE || (valid_max_forwards && max_forwards > <= 0)) { > > to: > > if (s->method == HTTP_WKSIDX_PURGE || s->method == HTTP_WKSIDX_POST || > s->method == HTTP_WKSIDX_PUT || > (valid_max_forwards && max_forwards <= 0)) { > > > I have built and tested as such, and it behaves at a high level as we desire. > Will we experience unanticipated side-effects from doing this? Is there a > suite of tests that I can run to ensure that all other behavior is unaffected? > > Thanks. > > -Norm Paxton > > From: Norm Paxton [mailto:norman.pax...@familysearch.org] > Sent: Monday, February 03, 2014 4:01 PM > To: us...@trafficserver.apache.org > Subject: Cache invalidation for varying media types > > There was a thread in June or 2013 regarding cache invalidation of multiple > media types. > (thread: > http://mail-archives.apache.org/mod_mbox/trafficserver-users/201306.mbox/%3ccdd7790c.27424%25steve.ow...@email.disney.com%3E) > > Summary of the initial question (Steve Owens): > Is there a configuration (Vary header, > proxy.config.http.cache.vary_default_*, etc) that would cause that a PUT or > POST on a specific URL would cause a cache invalidation on all variant media > types of that URL? > > Summary of ultimate response (Leif Hedstrom): > This sounds like PURGE, but not currently in PUT or POST. We could look at > putting that behavior into PUT/POST. > > My revisit: > > Has any action been taken on this? (I have searched the changes.log and not > found anything pertinent, but it is possible that I missed something) > I have a REST api serving data with both ‘application/json’ and > ‘application/xml’ content-types for each URL. Different clients will consume > one or both of these content-types. When a POST is invoked with > ‘application/json’, my assumption is that the cache server should invalidate > the object for ‘application/xml’ as well, as this is a variant representation > of the same object. In my testing, I consistently get unexpected (according > to my understanding and expectations) results: > Here’s a summarized log of what I see > > GET application/xml TCP_HIT > baseline > GET application/json TCP_HIT > baseline > > POST application/xml TCP_REFRESH_MISS expected > GET application/json TCP_HIT > unexpected/incorrect/stale data > GET application/xml TCP_MISS > expected > GET application/xml TCP_HIT > expected > > I have tried setting the ‘proxy.config.http.cache.vary_default_text’ and > ‘…vary_default_other’ to Accept, and also setting the Vary header to Accept > in my response, all to no avail. I have also tried Accept values of > “text/html”, “text/json”, “text/xml”, “text/plain” – in case th > e’proxy.config.http.cache.vary_default_text’ only looks at ‘text/’ media type > prefixes, also with no luck. (Based on ATS documentation, and other sources, > I am lead to believe that the correct header to Vary on is Accept, as opposed > to Content-Type. Correct?) > > I have confirmed that I can invoke a ‘PURGE’ on the URL, which will cause > desired end-results, but this requires that upon any PUT/POST request, I will > need to, as part of my processing, explicitly invoke a PURGE in code to > invalidate the cache for that object, which is undesirable. For some > developers/situations, it may even be prohibitive. > > Is there plans to change the behavior in a future release, or am I stuck > with self-invoking a PURGE request inside code handling my PUT/POST request? > Or are there other options for configuring this that I have not found/tried? > > Thanks > > -Norm Paxton > > > > > NOTICE: This email message is for the sole use of the intended recipient(s) > and may contain confidential and privileged information. Any unauthorized > review, use, disclosure or distribution is prohibited. If you are not the > intended recipient, please contact the sender by reply email and destroy all > copies of the original message. > > > > NOTICE: This email message is for the sole use of the intended recipient(s) > and may contain confidential and privileged information. Any unauthorized > review, use, disclosure or distribution is prohibited. If you are not the > intended recipient, please contact the sender by reply email and destroy all > copies of the original message. > > > > NOTICE: This email message is for the sole use of the intended recipient(s) > and may contain confidential and privileged information. Any unauthorized > review, use, disclosure or distribution is prohibited. If you are not the > intended recipient, please contact the sender by reply email and destroy all > copies of the original message. > > <0001-Invalidate-PUT-and-POST.patch>