[ https://forge.continuent.org/jira/browse/SEQUOIA-881?page=all ]
Emmanuel Cecchet resolved SEQUOIA-881:
--------------------------------------
Assign To: Mathieu Peltier (was: Emmanuel Cecchet)
Resolution: Fixed
Fix Version: Sequoia 2.10.5
Sequoia 3.0 beta 2
Patch applied in both 2.10 and HEAD
> Cluster crashes if a query fails when using PostgreSQL and V2 protocol
> ----------------------------------------------------------------------
>
> Key: SEQUOIA-881
> URL: https://forge.continuent.org/jira/browse/SEQUOIA-881
> Project: Sequoia
> Type: Bug
> Components: Core
> Versions: Sequoia 2.10.3
> Environment: Sequoia 2.10 CVS branch - PostgreSQL 8.1 - JDBC driver uses V2
> protocol instead of V3
> Reporter: Guillaume Smet
> Assignee: Mathieu Peltier
> Fix For: Sequoia 2.10.5, Sequoia 3.0 beta 2
> Attachments: DatabaseBackend.java.diff
>
>
> Hi all,
> The application we are using (Red Hat WAF/CCM) forces us to use the version 2
> of the protocol used by the PostgreSQL JDBC driver instead of the V3 one (due
> to types problem which are not fixable).
> When a query fails inside a transaction, the entire cluster goes down because
> the backends are declared inactive by DatabaseBackend.isValidConnection().
> In this method, there is a hack for PostgreSQL:
> if ("25P02".equals(e.getSQLState())
> || (e.getMessage() != null && e
> .getMessage()
> .indexOf(
> "current transaction is aborted, queries ignored until end
> of transaction block") > 0))
> {
> // see bug item #300873 on the forge for details
> // postgres throws an exception if a query is issued after a request
> has
> // failed within a transaction, we now have to check for this
> exception
> // as it is means the connection is valid
> //
> // postgres versions after 7.4 will return the SQLState, whereas
> // postgres versions prior to 7.4 will have to be checked for the
> // message text
> This comment is misleading. It's not a problem with a particular version of
> PostgreSQL but with the version of the protocol (V2 does not support SQLState
> whereas V3 does). If you are using PostgreSQL 8.1 with V2 protocol
> (protocolVersion=2 parameter in your JDBC URL), you won't have the valid
> SQLState returned. Note that using the V2 protocol is the recommended
> workaround when you cannot upgrade the application. Apart from that, V3
> protocol can have performances problem on particular queries that V2 does not
> have so it's really important to support it too.
> BTW it shouldn't be a problem if the error message didn't change between 7.4
> and 8.1. In 8.1 "queries" is replaced by "commands".
> I attached a patch which:
> - fixes the comment,
> - removed the start of the sentence and only considers "ignored until end of
> transaction block" - it's not used anywhere else in PostgreSQL source code
> and is really tied to this problem.
> This patch fixes the problem on our platform.
> This is a really annoying problem for us as the entire cluster goes down as
> soon as a query fails.
> Regards,
> --
> Guillaume Smet
> Open Wide
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://forge.continuent.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
_______________________________________________
Sequoia mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/sequoia