On Tue, 04 Oct 2011 17:39:48 -0600, Alex Rousskov wrote:
> On 10/04/2011 04:19 PM, Amos Jeffries wrote:
>> On Tue, 04 Oct 2011 08:30:47 -0600, Alex Rousskov wrote:
>>>>>>>>> We got a malformed max-stale value. We have only
>>>>>>>>> two options when it comes to that value interpretation, I 
>>>>>>>>> think:
>>>>>>>>>
>>>>>>>>>    A1. Treat it as valueless max-stale.
>>>>>>>>>    A2. Ignore it completely.
>
>>>>>>>>> we have three options when it comes to forwarding the
>>>>>>>>> malformed directive:
>>>>>>>>>
>>>>>>>>>    B1. Forward our own valid directive.
>>>>>>>>>    B2. Forward nothing.
>>>>>>>>>    B3. Forward the malformed directive.
>
>
>>> A1 has a side effect of serving a possibly "too stale" object to 
>>> the
>>> client. You may be confused by the old source code comments (now 
>>> fixed
>>> by Kinkie) that valueless max-stale means "always stale". It 
>>> actually
>>> means "never stale". Thus, A1 and B1 convert "possibly stale at 
>>> some
>>> unknown point in time" to "never stale" which feels like a bad 
>>> idea.
>>
>> I was going by the RFC 2616 section 14.9.3 clause on max-stale:
>>  "If no value is assigned to max-stale, then the client is willing 
>> to
>> accept a stale response of any age."
>>
>> Treating it compliantly as valueless when a value was sent (but not
>> understood or malformed) means the client will get incorrect
>> overly-stale objects.
>
> Not sure why you call such treatment "compliant", but yes, that is
> exactly why I oppose A1: I do not want to make things worse by 
> serving
> overly-stale objects.
 Thats what the RFC said. valueless == anything -> very,very,very stale 
 is fine.
 Very nasty, but compliant.
>
>
>> If we want the client _never_ to get stale objects then it must be
>> treated as max-stale=0 to override both the local max_stale 
>> directives
>> and the RFC "anything" behaviour of valueless field.
>
> Indeed. I think that would be even better than A2! Let me call it A0 
> to
> avoid conflicts with previously mentioned options:
>
>   A0. Treat it as max-stale=0.
>   A1. Treat it as valueless max-stale.
>   A2. Ignore it completely.
>
> A0 is the safest, most "conservative" option IMO.
>
>
>>>> I think we might have to get around this by using the max_stale
>>>> directive (or refresh_pattern override value) to limit the 
>>>> max-stale
>>>> value relayed upstream from the current Squid. If we consider this 
>>>> to be
>>>> an administrative override determining that this Squid will not 
>>>> emit
>>>> objects older than max_stale its reasonable to shrink the 
>>>> requested
>>>> staleness range from the valueless "anything" and ensure we get an
>>>> object as current as we want, within the wider range of what the 
>>>> client
>>>> wants.
>>>
>>> When max-stale=value is malformed, we do not know whether we shrink 
>>> or
>>> extend it by supplying our own value. That is why I think A2 is the 
>>> only
>>> acceptable option for Squid internal interpretation and B2 and B3 
>>> are
>>> the only acceptable options for forwarding.
>>>
>>
>> If we do A2, ignoring the header text entirely results in using the
>> max_stale directives local values.
>
> I did not think of a local config taking over in the simulated 
> absence
> of a max-stale directive. If the client-supplied max-stale always 
> takes
> priority over a local config, than A0 becomes even more attractive!
>
 The result of what I ported from squid-2 was supposed to be:
   max_stale overridden by refresh_pattern max-stale=, overridden by CC 
 header max-stale[=], overridden by CC no-cache.
>
>> If we do A1, the RFC requires "anything" and our max_stale 
>> directives
>> will always be smaller or equal to that. Usually smaller (1 week) so 
>> a
>> slight gain in worst-case freshness over a bare assumption of 
>> "anything".
>
> but still possibly a lot more stale than the client can tolerate. I 
> see
> no reason to do A1 if we can do A0. Do you?
>
 I can't. Agreed.
 Amos
Received on Wed Oct 05 2011 - 01:05:52 MDT
This archive was generated by hypermail 2.2.0 : Wed Oct 05 2011 - 12:00:03 MDT