On 12/12/2014 09:44 AM, Jan Kaluža wrote:
> On 12/11/2014 03:05 PM, Plüm, Rüdiger, Vodafone Group wrote:
>>
>>
>>> -----Original Message-----
>>> From: Jan Kaluža [mailto:jkal...@redhat.com]
>>> Sent: Donnerstag, 11. Dezember 2014 14:40
>>> To: dev@httpd.apache.org
>>> Subject: Re: [PATCH] Balancers, VirtualHost and ProxyPass
>>>
>>> On 12/11/2014 08:47 AM, Jan Kaluža wrote:
>>>> On 12/10/2014 08:21 PM, Ruediger Pluem wrote:
>>>>>
>>>>>
>>>>> On 12/10/2014 02:21 PM, Jan Kaluža wrote:
>>>>>> On 12/10/2014 01:49 PM, Plüm, Rüdiger, Vodafone Group wrote:
>>>>>>> But this way we lose the base ones that are not touched in the
>>>>>>> virtual host and e.g. are only used by rewriterules.
>>>>>>> So we should transfer the base ones to the merged array in any case
>>>>>>> and update them where needed.
>>>>>>
>>>>>> Hm, you are right. Check the new version attached to this email.
>>>>>
>>>>> But this one changes the parent configuration. So if you have two
>>>>> virtual hosts and in each you change a different
>>>>> parameter of the parent the later one has *both* changes, not only
>>>>> one. So you would need to do a copy of these
>>>>> balancers first and adjust the copy. Then only add the adjusted copy
>>>>> to the result. For the base balancers not matching
>>>>> the override balancers just add them to the result untouched. Same for
>>>>> the override ones, as you already do
>>>>
>>>> That makes sense, thanks. I will work on it and send updated patch.
>>>
>>> I have to admit that this feature is starting to be more time-consuming
>>> than I thought :). The attached patch should address all the issues
>>> pointed by Yann and Rüdiger.
>>
>> Looks fine in general. Details:
> 
> I hope I've finally fixed everything now :), see the attached patch please. I 
> really appreciate your reviews here!

Looks good. One thing though: I think apr_array_cat is still wrong since we 
only copied a *pointer* to the array with
*b2 = *b1. So apr_array_cat adjusts the original array from the base. I guess 
we should do:

apr_array_cat(tmp.errstatuses, b2->errstatuses);
b2->errstatuses = tmp.errstatuses;

Of course this is only fine when the order of the errstatuses array doesn't 
matter. Otherwise:

 b2->errstatuses = apr_array_append(b2->errstatuses, tmp.errstatuses);

And from order perspective, maybe:

return apr_array_append(p, tocopy, overrides);

If order doesn't matter I guess

apr_array_cat(overrides, tocopy);
return overrides;

would be also fine.

Regards

Rüdiger

Reply via email to