Re: additional lbmethods in mod_proxy_balancer

2009-03-03 Thread Florian S.
Hi,

Ok, thanks, it works now. As expected, a very stupid fault.
The tip with nm was great, but the target system is an appliance without
GNU Dev Tools, so some stress to find out with nm that some updates were
'forgotten'. As you have foreseen, there was a problem with the config
of update-server, the repo, the compile-server and the file-server. 
Bad pseudo-open-source upgrade-mechanism stuff on that machine..

Have a nice day,
Florian Schröder



Am Montag, den 02.03.2009, 18:57 +0100 schrieb Rainer Jung:
 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.0 +0100
 +++ mod_proxy_balancer.c2009-03-02 17:58:57.0 +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



Re: additional lbmethods in mod_proxy_balancer

2009-03-02 Thread 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


Re: additional lbmethods in mod_proxy_balancer

2009-03-02 Thread Florian S.
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.

Thanks in advance,
Florian Schröder


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



Re: additional lbmethods in mod_proxy_balancer

2009-03-02 Thread Rainer Jung

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.0 +0100
+++ mod_proxy_balancer.c2009-03-02 17:58:57.0 +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