Adding some config options
Adam Jacob
adam at hjksolutions.com
Fri May 18 17:59:10 UTC 2007
Are these additions okay? Is there a better way to accomplish these things?
Can it get into a perlbal release, so we don't have to maintain a private
branch? :)
Thanks!
Adam
On Fri, May 11, 2007 at 04:26:26PM -0700, Adam Jacob wrote:
> Attached is a patch that adds two new config options:
>
> 1. max_idle_time
>
> This sets the max_idle_time in the ClientHTTPBase class. We were running into
> a situation where the default (30 seconds) wasn't quite long enough, causing
> the ClientProxy to close the connections. It had a "FixMe:" above it anyway,
> asking for a config option... so here it is.
>
> I had some trouble seeing how to get the value of the configuration option out
> of the Service object, due to the Perlbal::Socket's _do_cleanup method calling
> the sub from the class, not an object.
>
> I worked around it by setting up an "our $MaxIdleTime = 30;" in
> ClientHTTPBase, which gets set to the configuration value when an object is
> instantiated.
>
> If you let me know a better way, I'll be happy to fix it up.
>
> 2. verify_backend_path
>
> One of our backend applications was unable to answer an OPTIONS request for '*'. This variable allows the path of the OPTIONS request to be configurable. It defaults to the current value of '*'.
>
> Thanks for a great piece of software,
>
> Adam
>
> --
> HJK Solutions - We Launch Startups - http://www.hjksolutions.com
> Adam Jacob, Senior Partner
> T: (206) 508-4759 E: adam at hjksolutions.com
> Index: lib/Perlbal/ClientHTTPBase.pm
> ===================================================================
> --- lib/Perlbal/ClientHTTPBase.pm (revision 673)
> +++ lib/Perlbal/ClientHTTPBase.pm (working copy)
> @@ -62,6 +62,8 @@
> zip application/zip
> )};
>
> +our $MaxIdleTime = 30;
> +
> # ClientHTTPBase
> sub new {
> my ($class, $service, $sock, $selector_svc) = @_;
> @@ -76,7 +78,8 @@
> $self->{requests} = 0;
> $self->{scratch} = {};
> $self->{selector_svc} = $selector_svc;
> -
> + $MaxIdleTime = $self->{service}->{max_idle_time};
> +
> $self->state('reading_headers');
>
> bless $self, ref $class || $class;
> @@ -764,8 +767,9 @@
> return $self->send_response(500, $msg);
> }
>
> -# FIXME: let this be configurable?
> -sub max_idle_time { 30; }
> +sub max_idle_time {
> + $MaxIdleTime;
> +}
>
> sub event_err { my $self = shift; $self->close('error'); }
> sub event_hup { my $self = shift; $self->close('hup'); }
> Index: lib/Perlbal/BackendHTTP.pm
> ===================================================================
> --- lib/Perlbal/BackendHTTP.pm (revision 673)
> +++ lib/Perlbal/BackendHTTP.pm (working copy)
> @@ -343,7 +343,7 @@
> !$self->{has_attention} && !defined $NoVerify{$self->{ipport}}) {
>
> # the backend should be able to answer this incredibly quickly.
> - $self->write("OPTIONS * HTTP/1.0\r\nConnection: keep-alive\r\n\r\n");
> + $self->write("OPTIONS " . $self->{service}->{verify_backend_path} . " HTTP/1.0\r\nConnection: keep-alive\r\n\r\n");
> $self->watch_read(1);
> $self->{waiting_options} = 1;
> $self->{content_length_remain} = undef;
> Index: lib/Perlbal/Service.pm
> ===================================================================
> --- lib/Perlbal/Service.pm (revision 673)
> +++ lib/Perlbal/Service.pm (working copy)
> @@ -40,6 +40,7 @@
> 'persist_client', # bool: persistent connections for clients
> 'persist_backend', # bool: persistent connections for backends
> 'verify_backend', # bool: get attention of backend before giving it clients (using OPTIONS)
> + 'verify_backend_path', # Path for the OPTIONS check
> 'max_backend_uses', # max requests to send per kept-alive backend (default 0 = unlimited)
> 'connect_ahead', # scalar: number of spare backends to connect to in advance all the time
> 'buffer_size', # int: specifies how much data a ClientProxy object should buffer from a backend
> @@ -93,6 +94,7 @@
> 'enable_error_retries', # bool: whether we should retry requests after errors
> 'error_retry_schedule', # string of comma-separated seconds (full or partial) to delay between retries
> 'latency', # int: milliseconds of latency to add to request
> + 'max_idle_time', # Time in seconds before timing out idle Proxy or Backend connections.
>
> # stats:
> '_stat_requests', # total requests to this service
> @@ -170,6 +172,12 @@
> check_type => "bool",
> check_role => "reverse_proxy",
> },
> +
> + 'verify_backend_path' => {
> + des => "What path the OPTIONS request sent by verify_backend should use. Default is '*'.",
> + default => '*',
> + check_role => "reverse_proxy",
> + },
>
> 'max_backend_uses' => {
> check_role => "reverse_proxy",
> @@ -464,6 +472,13 @@
> check_role => "selector",
> check_type => "int",
> },
> +
> + 'max_idle_time' => {
> + des => "Maximum time (in seconds) before expiring Client Proxy and Backend HTTP connections.",
> + default => 30,
> + check_type => "int",
> + check_role => "*"
> + },
>
> 'enable_ssl' => {
> des => "Enable SSL to the client.",
--
HJK Solutions - We Launch Startups - http://www.hjksolutions.com
Adam Jacob, Senior Partner
T: (206) 508-4759 E: adam at hjksolutions.com
More information about the perlbal
mailing list