Обсуждение: Connection state after network failure?
On Fri, 2007-02-09 at 13:10, Kevin Birkett wrote: > Hello, > > I'm having a problem with our software which uses Postgres 7.2.3 and > the JDBC driver associated with it. In our code we only create one > connection to the database, and then use that connection as needed for > our DB interaction. The problem comes in when I simulate a network > failure (yank the cat5) after the app has started up and connected to > the remote database. I've tried an idea I found by searching the > archives of this mailing list, but I haven't been able to get it to > work. I can only assume you're using the same jdbc driver version as you are postgresql. 7.2.3 is quite old. We had some minor issues with the early 7.4 jdbc drivers, and there have been man releases since then. pgsql 7.2 has known unfixable bugs, and given enough time, it WILL eat your data. Please investigate updating to the latest or nearly so version of postgresql and see if that helps. I'd recommend at least 8.1.x, but the latest 8.2.3 seems pretty stable and I'm testing it already for internal use.
On Fri, 9 Feb 2007, Kevin Birkett wrote: > I'm having a problem with our software which uses Postgres 7.2.3 and the > JDBC driver associated with it. In our code we only create one > connection to the database, and then use that connection as needed for > our DB interaction. The problem comes in when I simulate a network > failure (yank the cat5) after the app has started up and connected to > the remote database. I've tried an idea I found by searching the > archives of this mailing list, but I haven't been able to get it to > work. > > To me, if the connection loses its network connectivity, an exception > should be thrown here, and then I can handle it. However, what actually > happens is the system locks up on the call to execute and it never > throws and exception or a returns value (since the network is > unavailable). Am I missing something easy here? All I want to do is to > check whether or not the connection is valid and available. > TCP doesn't detect network failures immediately, hoping the network will be restored. If you wait long enough (on the order of an hour) you will get an Exception. You can adjust these settings globally via your OS or using a more recent postgresql version with tcp_keepalives_* here: http://www.postgresql.org/docs/8.2/static/runtime-config-connection.html Also get off the 7.2 release before it eats your data. Kris Jurka
From: Kris Jurka [mailto:books@ejurka.com]
Sent: Wed 2/14/2007 1:11 AM
To: Kevin Birkett
Cc: pgsql-jdbc@postgresql.org
Subject: Re: [JDBC] Connection state after network failure?
On Fri, 9 Feb 2007, Kevin Birkett wrote:
> I'm having a problem with our software which uses Postgres 7.2.3 and the
> JDBC driver associated with it. In our code we only create one
> connection to the database, and then use that connection as needed for
> our DB interaction. The problem comes in when I simulate a network
> failure (yank the cat5) after the app has started up and connected to
> the remote database. I've tried an idea I found by searching the
> archives of this mailing list, but I haven't been able to get it to
> work.
>
> To me, if the connection loses its network connectivity, an exception
> should be thrown here, and then I can handle it. However, what actually
> happens is the system locks up on the call to execute and it never
> throws and exception or a returns value (since the network is
> unavailable). Am I missing something easy here? All I want to do is to
> check whether or not the connection is valid and available.
>
TCP doesn't detect network failures immediately, hoping the network will
be restored. If you wait long enough (on the order of an hour) you will
get an Exception. You can adjust these settings globally via your OS
or using a more recent postgresql version with tcp_keepalives_* here:
http://www.postgresql.org/docs/8.2/static/runtime-config-connection.html
Also get off the 7.2 release before it eats your data.
Kris Jurka