httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rainer Jung <rainer.j...@kippdata.de>
Subject Re: additional lbmethods in mod_proxy_balancer
Date Mon, 02 Mar 2009 17:57:22 GMT
On 02.03.2009 18:02, Florian S. wrote:
> Hi,
>
> First, thanks for your reply.
> Here the outline of my config:
>
> <VirtualHost *:1234>
>    # [...]
>    ProxyPass / balancer://lb/
>    ProxyPassReverse / balancer://lb/
> </VirtualHost>
>
> <Proxy balancer://lb>
>    # That works fine:
>    ProxySet lbmethod=byrequests
> 	
>    # This would lead to the error I mentioned:
>    #ProxySet lbmethod=byfoobar
>
>    # And several members:
>    BalancerMember http://xxx.xxx.xxx.xxx loadfactor=1
>    ProxyHTMLURLMap http://xxx.xxx.xxx.xxx http://yyy.yyy.yyy.yyy:1234
>    Header edit Location ^http://xxx.xxx.xxx.xxx
> http://yyy.yyy.yyy.yyy:1234
> </Proxy>
>
> It could look like that my changes were lost during the entire build
> process. But I checked after the configuring that the patch had been
> applied. Compiling runs without any issues.

Indeed, it works for me (tested with 2.2.11 on Solaris using gcc).

I used exactly your code lines:

Here's a patch format:

--- mod_proxy_balancer.c.orig   2008-12-07 19:06:34.000000000 +0100
+++ mod_proxy_balancer.c        2009-03-02 17:58:57.000000000 +0100
@@ -1210,6 +1210,89 @@

  }

+static proxy_worker *find_best_byfoobar(proxy_balancer *balancer,
+                                request_rec *r)
+{

... now copied in the contents of find_best_bybusyness
     and replaced "busyness" by foobar in the log messages ...

+}
+
  /*
   * How to add additional lbmethods:
   *   1. Create func which determines "best" candidate worker
@@ -1237,6 +1320,13 @@
      NULL
  };

+static const proxy_balancer_method byfoobar =
+{
+    "byfoobar",
+    &find_best_byfoobar,
+    NULL
+};
+

  static void ap_proxy_balancer_register_hook(apr_pool_t *p)
  {
@@ -1255,6 +1345,7 @@
      ap_register_provider(p, PROXY_LBMETHOD, "bytraffic", "0", &bytraffic);
      ap_register_provider(p, PROXY_LBMETHOD, "byrequests", "0", 
&byrequests);
      ap_register_provider(p, PROXY_LBMETHOD, "bybusyness", "0", 
&bybusyness);
+    ap_register_provider(p, PROXY_LBMETHOD, "byfoobar", "0", &byfoobar);
  }

  module AP_MODULE_DECLARE_DATA proxy_balancer_module = {


It compiles and works, I can see in the DEBUG log line, that it is using 
the correct method.

To check whether foobar is in the compiled module, I did:

% nm ./.libs/mod_proxy_balancer.so|grep foobar
[59]    |     90348|      12|OBJT |LOCL |0    |23     |byfoobar
[217]   |      6696|     616|FUNC |LOCL |0    |12     |find_best_byfoobar

So at least I can see, that the symbols are in there. You can check the 
same with your build result.

Regards,

Rainer

> Am Montag, den 02.03.2009, 17:46 +0100 schrieb Rainer Jung:
>> What's you balancer configuration leading to the cited error?
>>
>> On 02.03.2009 16:34, Florian S. wrote:
>>> Hi everyone!
>>>
>>> I'm desperately trying to implement an additional loadbalancing
>>> algorithm. Did anyone succeeded in declaring own methods?
>>>
>>> The httpd-users-list did not give any reply, so I'll try it here once
>>> again.
>>>
>>> I'm not able to find the error since I adapted the major part from the
>>> original. After patching and compiling my 2.2.11, the standard methods
>>> still work fine, but mine does not seem to exist:
>>>
>>> My error is:
>>> ProxySet: unknown lbmethod lbmethod=byfoobar
>>>
>>> I changed the mod_proxy_balancer.c three times, as required:
>>>
>>> I added my function:
>>> static proxy_worker *find_best_byfoobar(proxy_balancer *balancer,
>>> request_rec *r)
>>>
>>> I added the struct:
>>> static const proxy_balancer_method byfoobar =
>>> {
>>>       "byfoobar",
>>>       &find_best_byfoobar,
>>>       NULL
>>> };
>>>
>>> And I finally registered it by inserting:
>>> ap_register_provider(p, PROXY_LBMETHOD, "byfoobar", "0",&byfoobar);
>>> in the
>>> static void ap_proxy_balancer_register_hook(apr_pool_t *p)
>>>
>>> Very strange, since I did everything exactly in the same way as it had
>>> been done for the built-in methods.
>>>
>>> Hoping that I'm posting to the right list
>>> and
>>> Thanks in advance,
>>>
>>> Florian Schröder

Mime
View raw message