Writing hooks for Perlbal

Elliot F elliotf-danga-perlbal at gratuitous.net
Sun Oct 8 19:11:53 UTC 2006

I would suggest taking a look at the code around the 
backend_client_assigned hook.  If you haven't already, take a look at 
the doc/hacking/hooks.txt file.

I'm not sure, but your problem may quickly get much more complex.  I 
would not be surprised if you have to make your own hook somewhere, or 
modify perlbal.

If the 'backend_client_assigned' hook isn't enough, I'm assuming you 
would want to look at './lib/Perlbal/BackendHTTP.pm', and specifically 
the 'assign_client' sub around line 159.  I'm not saying this is the 
answer, but it would be where I would start looking.

Hope that helps,


Raistlin Majere wrote:
> Alright, I have the plugin/callback being called.  Looks like I just 
> needed to add "plugins = MyPlugin" (where MyPlugin is the package in the 
> Perlbal/Plugin directory).
> The callback functionality looks useful for polling things and reacting 
> accordingly, I've implemented this, however I am curious how to rewrite 
> a request to a different backend server.
> Ideally I'd like to be able to be able to:
> Accept a request to a virtualhost
> Verify that the backend server is up and running
> if it's not then hold the request while I either:
>     a) bring the backend server up
>     b) rewrite the request to a different server
> Any ideas how to redirect the request, POST data, etc to a different 
> machine?
>> Raistlin,
>> Take a look at registering a callback that perlbal will trigger every 
>> N seconds.  AtomStream.pm has it being used.  It's called 
>> 'Perlbal::Socket::register_callback'.  You would be able to do 
>> whatever check(s) you want, and react accordingly (mark it as down 
>> somehow, reconfigure perlbal, etc.)  And it wouldn't be doing it for 
>> every request.
>> Just make sure you don't block.  :)
>> Elliot
>> Raistlin Majere wrote:
>>> I've installed and configured perlbal and have run into some 
>>> difficulties.  I've setup perlbal to be a reverse proxy so that it 
>>> correctly proxies virtualhosts to the appropriate servers.  (i.e. 
>>> vhost1.example.com, vhost2.example.com correctly reverse proxies for 
>>> vhost1.com and vhost2.com respectively) This is working perfectly, 
>>> and wasn't too difficult to configure.
>>> However now I want to write some code that will:
>>> First verify that the backend server is alive
>>> Second that the backend server can answer requests on the port I'm 
>>> trying to talk to
>>> And if it's NOT alive and able to respond to requests that I can 
>>> redirect requests to a different server, or execute some code to 
>>> bring the downed server up, before retrying.
>>> I've tried to use the Perlbal::ClientProxy "start_proxy_request" 
>>> hook, however that seems to affect each and every request (i.e. each 
>>> html page, graphic, etc.)
>>> I need to be able to check to see if the backend server is alive, and 
>>> if it's not, tell Perlbal: "Whoa hold your horeses" long enough for 
>>> me to bring a server up (I can do this with some scripts I have), and 
>>> then redirect the request to the new server.
>>> Any help or advice would be greatly appreciated.

More information about the perlbal mailing list