Subject: | AnyEvent::Memcached not handling unavailable memcache servers correctly? |
Date: | Thu, 3 Mar 2011 06:49:38 -0800 |
To: | "bug-AnyEvent-Memcached [...] rt.cpan.org" <bug-AnyEvent-Memcached [...] rt.cpan.org> |
From: | Jay Janssen <jayj [...] yahoo-inc.com> |
I have a test script (attached, hopefully RT will do the right thing with it) where I'm setting up two memcached daemons and connecting AnyEvent::Memcached to both of them.
I then run loop over a sub that checks for a set of keys 1-10, and if any do not exist, it creates them. This runs fine.
However, what I wanted to test was the failure of one of the memcached. So in my shell, I kill one of the memcached instances. AnyEvent::Memcached seems to then hang on the 'get' looking for all the keys. The debug output gives this:
Disconnected 127.0.0.1:11212 AnyEvent::Memcached::Conn=HASH(0x93c5f64) Error: Broken pipe at /home/y/lib/perl5/site_perl/AnyEvent/Connection.pm line 257.
(154951524) Destroying AE::CNN::Raw at /home/y/lib/perl5/site_perl/AnyEvent/Connection/Raw.pm line 79.
Peer 127.0.0.1:11212 disconnected: Error: Broken pipe
<<127.0.0.1:11213+2 5 7 9 VALUE 2 0 4 at /home/y/lib/perl5/site_perl/AnyEvent/Memcached/Conn.pm line 26.
<+ read 6 at /home/y/lib/perl5/site_perl/AnyEvent/Connection/Raw.pm line 138.
+ received data 2: foo2 at /home/y/lib/perl5/site_perl/AnyEvent/Memcached/Conn.pm line 48.
<<127.0.0.1:11213+2 5 7 9 VALUE 5 0 4 at /home/y/lib/perl5/site_perl/AnyEvent/Memcached/Conn.pm line 26.
<+ read 6 at /home/y/lib/perl5/site_perl/AnyEvent/Connection/Raw.pm line 138.
+ received data 5: foo5 at /home/y/lib/perl5/site_perl/AnyEvent/Memcached/Conn.pm line 48.
<<127.0.0.1:11213+2 5 7 9 VALUE 7 0 4 at /home/y/lib/perl5/site_perl/AnyEvent/Memcached/Conn.pm line 26.
<+ read 6 at /home/y/lib/perl5/site_perl/AnyEvent/Connection/Raw.pm line 138.
+ received data 7: foo7 at /home/y/lib/perl5/site_perl/AnyEvent/Memcached/Conn.pm line 48.
<<127.0.0.1:11213+2 5 7 9 VALUE 9 0 4 at /home/y/lib/perl5/site_perl/AnyEvent/Memcached/Conn.pm line 26.
<+ read 6 at /home/y/lib/perl5/site_perl/AnyEvent/Connection/Raw.pm line 138.
+ received data 9: foo9 at /home/y/lib/perl5/site_perl/AnyEvent/Memcached/Conn.pm line 48.
<<127.0.0.1:11213+2 5 7 9 END at /home/y/lib/perl5/site_perl/AnyEvent/Memcached/Conn.pm line 26.
Connecting to 127.0.0.1:11212... at /home/y/lib/perl5/site_perl/AnyEvent/Connection.pm line 243.
Not connected 127.0.0.1:11212: Connection refused at /home/y/lib/perl5/site_perl/AnyEvent/Connection.pm line 266.
Then it repeats this message forever:
Connecting to 127.0.0.1:11212... at /home/y/lib/perl5/site_perl/AnyEvent/Connection.pm line 243.
Not connected 127.0.0.1:11212: Connection refused at /home/y/lib/perl5/site_perl/AnyEvent/Connection.pm line 266.
I would expect there to be a timeout for io operations that would simply take the server out of the connection pool like other clients. Is this a bug or am I supposed to implement my own AnyEvent::Memcached::Hash subclass that handles this?
My memcached is 1.4.5 and I'm using AnyEvent::Memcached-0.05 on perl 5.8 and perl 5.10 (same problem on both).
Jay Janssen
High Availability Something-or-other
jayj@yahoo-inc.com
Message body is not shown because sender requested not to inline it.