Hi list!

I was testing a high-availability cluster of postgres databases when I
stumbled on a problem: a call to execute blocks and never returns
hence making the application hang forever instead of failing.

That was the short story. The long one is as follows: I wrote a script
that inserts into a remote postgres database in an infinite loop. The
script connects to the remote database over a tcp socket. At some
point, I block traffic to the postgres database by setting an iptable
reject rule on the database server. At that point, the script freezes.
I turned on trace in DBI and saw that the script freezes due to a
blocking execute call. I was expecting execute to emit an error when
the tcp socket gets closed by the reject iptable rules, but it does
not. So I tried with an iptable drop rule, which is just a way of
simulating someone plugging out the ethernet cable to the database
server, but the reaction was the same: execute blocks forever.

Is this a normal behavior for execute?
Is there any built-in way to set a timeout on execute, or to force it
to detect connection errors at the tcp level? (I could use the
eval/alarm trick in the application, but it feels rather unsafe)

Thanks by advance!
/Erwan Lemonnier

Search Discussions

Discussion Posts

Follow ups

Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 1 of 2 | next ›
Discussion Overview
groupdbd-pg @
postedNov 11, '09 at 9:27a
activeDec 17, '09 at 9:48p



site design / logo © 2022 Grokbase