Dear Larry,
On 22/02/12 18:16 -0800, Larry Lile wrote:
>On Wed, Feb 22, 2012 at 6:14 PM, Larry Lile <larry.lile@dreamworks.com> wrote:
> I've always just trapped for the disconnect at the operation,
> this is also a convenient place to check for referrals.
>
> # XXX Check for I/O Error on update, reconnect and
> # XXX retry if possible. This could be much more sophisticated.
> $ldap = ldap_open($ldap) and $result = $entry->update($ldap)
> if $result->code == LDAP_OPERATIONS_ERROR and
> $result->error =~ m!I/O Error!i;
>
> ldap_open is the same function I use to open an LDAP server
> normally. When passed an existing LDAP object it will attempt
> to shut it down as cleanly as possible.
But it seems that you are aiming for *non*-persistent connections; it
seems to me that you are closing the connection if it exists.
The problem there is that if there is a very high load, and there are
many connections and disconnections, it is possible to consume too
many TCP connections. (Our LDAP servers can be *very* busy).
What we are aiming for is to maintain a *persistent* LDAP connection,
but to determine when it has failed before depending on it.
> I haven't tested this code
> in a while, $result->error =~ m!I/O Error!i may not be correct
> since the latest updates to Net::LDAP.
>
>
> sub ldap_open
> {
> my $ldap = shift;
>
> ...
>
> if ($ldap)
> {
> warn "\nConnection to ", $ldap->{net_ldap_host},
> " broken, attempting to reconnect.\n"
> if $opt_v;
>
> # XXX Try to close the socket as best we can.
> close $ldap->{net_ldap_socket};
>
> foreach my $server (split(/\s+/, $ldap_opt{'host'}))
> {
> ($server, my $port) = split(/:/, $server, 2);
> $port = $ldap_opt{'port'} if ! $port;
> last if lc $server eq lc $ldap->{net_ldap_host};
> push @servers, shift @servers;
> }
> }
>
> The remainder of the code builds a connection to the LDAP server as usual
> returning it's object to the c
>
>
>Pardon the interruption there. =)
>
>The remainder of the code builds a connection to the LDAP server as usual
>returning it's object to the caller.
--
Nick Urbanik http://nicku.org 808-71011 nick.urbanik@optusnet.com.au
GPG: 7FFA CDC7 5A77 0558 DC7A 790A 16DF EC5B BB9D 2C24 ID: BB9D2C24
I disclaim, therefore I am.
Thread Previous
|
Thread Next