[jboss-jira] [JBoss JIRA] (JBJCA-1347) NullPointerException in SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:441
Piotr Krokowski (Jira)
issues at jboss.org
Thu Jan 9 14:41:35 EST 2020
[ https://issues.redhat.com/browse/JBJCA-1347?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13945210#comment-13945210 ]
Piotr Krokowski commented on JBJCA-1347:
----------------------------------------
Hello. I'm getting a bit desperate, because I can't find this info anywhere, so adding this comment here is my last hope.
Main question is: *In which version was that fix included?*
Background:
We started to get into this issue massively after datacenter changes (so the root cause is unrelated - probably connections are closed too eagerly on the DB side).
Some notable fragments from exceptions (issue happens while INVALIDATING a connection):
{{Caused by: java.lang.NullPointerException at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool.getConnection(SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:461)}}
Depending on desired behavior (which us unknown to me), it either seems to be an issue in:
SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:461 and line 441.
or it could be the fact, that pool.getInternalStatistics() should not be nullified by another thread, while another thread is trying to do the same.
It's hard to tell not knowing the concept.
Please help...
> NullPointerException in SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:441
> ------------------------------------------------------------------------------------
>
> Key: JBJCA-1347
> URL: https://issues.redhat.com/browse/JBJCA-1347
> Project: IronJacamar
> Issue Type: Bug
> Affects Versions: WildFly/IronJacamar 1.3.2.Final
> Environment: CentOS 6
> Wildfly 10.0.0.Final (Iron Jacamar 1.3.2.Final)
> PostgreSQL Server 9.5.5
> PostgreSQL JDBC driver 9.4.1208 and tried with 42.0.0
> Oracle Java version "1.8.0_112"
> Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
> Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)
> Reporter: Brett Delle Grazie
> Assignee: Flavia Rainone
> Priority: Major
>
> Using a PostgreSQL XA datasource with statistics enabled we get a NullPointerException if the connection fails temporarily.
> With JDBC driver 9.4.1208 Wildfly never reconnects to the PostgreSQL server with the next request and Wildfly must be restarted. With JDBC driver 42.0.0 it does reconnect on next request.
> If statistics are disabled, the NPE does not occur and both drivers reconnect on the next request as expected.
> Specific location of NPE:
> https://github.com/ironjacamar/ironjacamar/blob/ironjacamar-1.3.2.Final/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/SemaphoreConcurrentLinkedDequeManagedConnectionPool.java#L441
> Note there is similar code on line 461 of the same class (in the exception handler)
> Example configuration follows
> With a PostgreSQL datasource configured in Wildfly as:
> {code:xml}
> <xa-datasource jndi-name="java:/DS.people" pool-name="DS.people" enabled="true" spy="true" statistics-enabled="true" use-java-context="true" use-ccm="true">
> <driver>postgresql</driver>
> <xa-datasource-property name="ServerName">localhost</xa-datasource-property>
> <xa-datasource-property name="PortNumber">5432</xa-datasource-property>
> <xa-datasource-property name="DatabaseName">peopleviewstore</xa-datasource-property>
> <xa-datasource-property name="ApplicationName">people</xa-datasource-property>
> <xa-datasource-property name="assumeMinServerVersion">9.5</xa-datasource-property>
> <xa-datasource-property name="connectTimeout">10</xa-datasource-property>
> <xa-datasource-property name="currentSchema">public</xa-datasource-property>
> <xa-datasource-property name="hostRecheckSeconds">10</xa-datasource-property>
> <xa-datasource-property name="loginTimeout">10</xa-datasource-property>
> <xa-datasource-property name="logUnclosedConnections">true</xa-datasource-property>
> <xa-datasource-property name="socketTimeout">30</xa-datasource-property>
> <xa-datasource-property name="targetServerType">master</xa-datasource-property>
> <xa-datasource-property name="tcpKeepAlive">true</xa-datasource-property>
> <xa-pool>
> <min-pool-size>0</min-pool-size>
> <initial-pool-size>0</initial-pool-size>
> <max-pool-size>10</max-pool-size>
> <allow-multiple-users>false</allow-multiple-users>
> </xa-pool>
> <timeout>
> <xa-resource-timeout>0</xa-resource-timeout>
> </timeout>
> <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
> <statement>
> <track-statements>true</track-statements>
> </statement>
> <security>
> <user-name></user-name>
> <password></password>
> </security>
> <validation>
> <validate-on-match>true</validate-on-match>
> <use-fast-fail>true</use-fast-fail>
> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
> </validation>
> </xa-datasource>
> {code}
> And corresponding driver configuration:
> {code:xml}
> <driver name="postgresql" module="org.postgresql">
> <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
> </driver>
> {code}
> we have deployed the JDBC driver as a module, module.xml looks like:
> {code:xml}
> <?xml version="1.0" ?>
> <module xmlns="urn:jboss:module:1.3" name="org.postgresql" slot="main">
> <resources>
> <resource-root path="postgresql-42.0.0.jar"/>
> </resources>
> <dependencies>
> <module name="javax.api"/>
> <module name="javax.transaction.api"/>
> </dependencies>
> </module>
> {code}
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
More information about the jboss-jira
mailing list