DBI::Gofer::Execute - Executes Gofer requests and returns Gofer responses |
DBI::Gofer::Execute - Executes Gofer requests and returns Gofer responses
$executor = DBI::Gofer::Execute->new( { ...config... });
$response = $executor->execute_request( $request );
Accepts a DBI::Gofer::Request object, executes the requested DBI method calls, and returns a DBI::Gofer::Response object.
Any error, including any internal 'fatal' errors are caught and converted into a DBI::Gofer::Response object.
This module is usually invoked by a 'server-side' Gofer transport module.
They usually have names in the ``DBI::Gofer::Transport::*
'' namespace.
Examples include: the DBI::Gofer::Transport::stream manpage and the DBI::Gofer::Transport::mod_perl manpage.
If defined, it must be a reference to a subroutine that will 'check' the request. It is passed the request object and the executor as its only arguments.
The subroutine can either return the original request object or die with a suitable error message (which will be turned into a Gofer response).
It can also construct and return a new request that should be executed instead of the original request.
If defined, it must be a reference to a subroutine that will 'check' the response. It is passed the response object, the executor, and the request object. The sub may alter the response object and return undef, or return a new response object.
This mechanism can be used to, for example, terminate the service if specific database errors are seen.
If set, this DSN is always used instead of the one in the request.
If set, this DSN is used if forced_connect_dsn
is not set and the request does not contain a DSN itself.
A reference to a hash of connect()
attributes. Individual attributes in
forced_connect_attributes
will take precedence over corresponding attributes
in the request.
A reference to a hash of connect()
attributes. Individual attributes in the
request take precedence over corresponding attributes in default_connect_attributes
.
If set, the loaded drivers will be checked to ensure they don't have more than this number of cached connections. There is no default value. This limit is not enforced for every request.
If set, all the cached statement handles will be cleared once the number of cached statement handles rises above this limit. The default is 1000.
If true, then only the first result set will be fetched and returned in the response.
A reference to a data structure that can specify extra attributes to be returned in responses.
forced_response_attributes => { DriverName => { dbh => [ qw(dbh_attrib_name) ], sth => [ qw(sth_attrib_name) ], }, },
This can be useful in cases where the driver has not implemented the
private_attribute_info()
method and DBI::Gofer::Execute's own fallback list of
private attributes doesn't include the driver or attributes you need.
If set, specifies the number of recent requests and responses that should be
kept by the update_stats()
method for diagnostics. See the DBI::Gofer::Transport::mod_perl manpage.
Note that this setting can significantly increase memory use. Use with caution.
Enable forced random failures and/or delays for testing. See DBI_GOFER_RANDOM below.
Gofer needs to know about any driver-private attributes that should have their values sent back to the client.
If the driver doesn't support private_attribute_info()
method, and very few do,
then the module fallsback to using some hard-coded details, if available, for
the driver being used. Currently hard-coded details are available for the
mysql, Pg, Sybase, and SQLite drivers.
DBD::Gofer, DBD::Execute and related packages are well tested by executing the DBI test suite with DBI_AUTOPROXY configured to route all DBI calls via DBD::Gofer.
Because Gofer includes timeout and 'retry on error' mechanisms there is a need
for some way to trigger delays and/or errors. This can be done via the
forced_gofer_random
configuration item, or else the DBI_GOFER_RANDOM environment
variable.
The value of the forced_gofer_random
configuration item (or else the
DBI_GOFER_RANDOM environment variable) is treated as a series of tokens
separated by commas.
The tokens can be one of three types:
fail=0.05%
.
Negative values for R have special meaning, see below.
delay0.5=0.2%
. Negative values for R have special meaning, see below.
If R is an odd number (R % 2 == 1) then a message is logged via warn()
which
will be returned to, and echoed at, the client.
For example:
$executor = DBI::Gofer::Execute->new( { forced_gofer_random => "fail=0.01%,do,delay60=1%,execute", });
will cause the do()
method to fail for 0.01% of calls, and the execute()
method to
fail 0.01% of calls and be delayed by 60 seconds on 1% of calls.
If the percentage value (R
) is negative then instead of the failures being
triggered randomly (via the rand()
function) they are triggered via a sequence
number. In other words ``fail=-20%
'' will mean every fifth call will fail.
Each method has a distinct sequence number.
Tim Bunce, http://www.tim.bunce.name
Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See the perlartistic manpage.
DBI::Gofer::Execute - Executes Gofer requests and returns Gofer responses |