not reproxying alternate files
Jonathan Steinert
hachi at kuiki.net
Fri Feb 29 22:33:48 UTC 2008
Eric Lambrecht wrote:
> hachi wrote:
>> Actually, I believe your bug is more complex than this.
>>
>> I hope you aren't using this patch in production, because in normal
>> operation the codepath of try_next is used, but use_reproxy_backend
>> is not. This patch causes t/35-reproxy to hang on the test it uses to
>> see if it fails from one url to the next, because it gets into an
>> infinite loop when it hits the failing URI.
>
> Hrmm... I'm not sure what you mean by 'normal operation'. You mean
> when perlbal isn't reproxying something? (which in our case that
> wouldn't be bad, as those machines only reproxy content..)
Sorry, normal was as opposed to 'unqueued backend reproxy'
When a reproxy request comes in and there's no backend for it yet, the
code path followed includes try_next (on failure) but
use_reproxy_backend isn't touched at all.
Basically, the t/35-reproxy test goes into an infinite loop with this
patch you supplied. So I think it's the wrong answer. What needs to be
known is how the state can transition us into use_reproxy_backend at
all. Which has to be either backends that are 'Keep-Alive' or when you
exceed the maximum number of allowed reproxy backends, which results in
queueing.
Firstly though, need a way to test those two possibilities to see if I'm
even on the right track... which I'll get back around to after I eat
some lunch.
>
>> I'm writing a test for this, but I suspect it happens when all your
>> reproxy backends are in use, and the reproxy requests start queueing.
>> I'm not sure though yet.
>
> Let me know if I can assist. I'll spend a little more time on this.
>
> Eric...
>
>
>>
>> hachi wrote:
>>> Thanks for catching this. Patch is being applied right now.
>>>
>>> I kept swearing that it was working fine, and the test I ran to
>>> confirm this showed it working as well. I had 3+ URLS in the list
>>> though, so that's why it was "working"
>>>
>>> Eric Lambrecht wrote:
>>>> We just noticed that our perlbal wasn't reproxying the alternate
>>>> files we gave to it via X-REPROXY-URL when the first file was
>>>> missing. We'd send this:
>>>>
>>>> X-REPROXY-URL: http://127.0.0.1/foo http://127.0.0.1/bar
>>>>
>>>> If 'foo' didn't exist on the remote server, perlbal was returning a
>>>> 503 response and not trying to get 'bar'.
>>>>
>>>> It's basically because both try_next_uri and use_reproxy_backend
>>>> shift items off the $ClientProxy->reproxy_uris array. The second
>>>> choice was being shifted off before we got a chance to try it.
>>>>
>>>> Funny that it took us 2 years to notice this...
>>>>
>>>> Eric...
>>>>
>>>>
>>>> --- ClientProxy.pm 2008-02-28 17:32:13.000000000 -0800
>>>> +++ ClientProxy.pm.new 2008-02-28 17:32:41.000000000 -0800
>>>> @@ -184,7 +184,6 @@
>>>> sub try_next_uri {
>>>> my Perlbal::ClientProxy $self = $_[0];
>>>>
>>>> - shift @{$self->{reproxy_uris}};
>>>> $self->{currently_reproxying} = undef;
>>>> $self->start_reproxy_uri();
>>>> }
>>>
>>
>
More information about the perlbal
mailing list