Bug in latest Perl Cache::Memcached module (1.21)
Boguk Maxim
astar at rambler-co.ru
Wed Jun 6 09:46:24 UTC 2007
Somehow first mail didnt get to maillist. So second attempt:
After update Perl memcached API to latest version i got some troubles
with disconnects to memcached server:
If perl code loose connection to memcached server i get spam warnings:
Use of uninitialized value in vec at
/usr/local/lib/perl5/site_perl/5.8.8/Cache/Memcached.pm line 360.
Use of uninitialized value in vec at
/usr/local/lib/perl5/site_perl/5.8.8/Cache/Memcached.pm line 367.
send() on closed socket $sock at
/usr/local/lib/perl5/site_perl/5.8.8/Cache/Memcached.pm line 368.
Use of uninitialized value in numeric gt (>) at
/usr/local/lib/perl5/site_perl/5.8.8/Cache/Memcached.pm line 371.
Use of uninitialized value in string eq at
/usr/local/lib/perl5/site_perl/5.8.8/Cache/Memcached.pm line 492.
And never attempt reconnect to memcached even if memcached full
available...
I looked into code and found some issues with how to %sock_map work:
First inside function sock_to_host element of %sock_map hash initialize
via:
$sock_map{$sock} = $host;
>From other hand we have 2 possible cleanup functions:
sub _dead_sock {
my ($sock, $ret, $dead_for) = @_;
if (my $ipport = $sock_map{\$sock}) {
my $now = time();
$host_dead{$ipport} = $now + $dead_for
if $dead_for;
delete $cache_sock{$ipport};
delete $sock_map{\$sock};
}
@buck2sock = ();
return $ret; # 0 or undef, probably, depending on what caller wants
}
sub _close_sock {
my ($sock) = @_;
if (my $ipport = $sock_map{\$sock}) {
close $sock;
delete $cache_sock{$ipport};
delete $sock_map{\$sock};
}
@buck2sock = ();
}
Both of these function trying clean $sock_map{\$sock} !
So... Connect code set $sock_map{$sock} and cleanup code trying clean
$sock_map{\$sock} !?
And of course dead sock never cleaning at all and API try use dead sock
again and again.... (because bad socket permanently cached in %sock_map)
This is really painful issue leading instability of projects.
PS: Cache::Memcached installed from fresh FreeBSD ports (and i compared
with fresh cpan version... They are same)
PPS: I really sorry for bad English.
====================================================================
SY Maxim Boguk
astar at rambler-co.ru ICQ: 99-312-438
(910) 405-47-18
More information about the memcached
mailing list