Skip to content
This repository has been archived by the owner on May 3, 2024. It is now read-only.

Exception in JdbcCursorManager is not retried #115

Closed
lukasniemeier-zalando opened this issue Nov 30, 2016 · 3 comments
Closed

Exception in JdbcCursorManager is not retried #115

lukasniemeier-zalando opened this issue Nov 30, 2016 · 3 comments

Comments

@lukasniemeier-zalando
Copy link
Contributor

If there is a connection error to the database, the JdbcCursorManager throws an exception which is not caught nor handled by the retry mechanism of fahrschein.

2016-11-30 17:02:18,952 {WARN} [nakadi-2] [] [] [org.zalando.fahrschein.jdbc.JdbcCursorManager] Exception while processing events for [best-event] on part$
tion [0] at offset [39797]
org.springframework.transaction.TransactionSystemException: Could not commit JDBC transaction; nested exception is org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.
        at org.springframework.jdbc.datasource.DataSourceTransactionManager.doCommit(DataSourceTransactionManager.java:275) ~[spring-jdbc-4.3.3.RELEASE.jar:4.3.3.RELEASE]
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:761) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
        at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:487) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
        at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:291) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.3.RELEASE.jar:4.3.3.RELEASE]
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) [spring-aop-4.3.3.RELEASE.jar:4.3.3.RELEASE]
        at com.sun.proxy.$Proxy113.onSuccess(Unknown Source) [?:?]
        at org.zalando.fahrschein.NakadiReader.processBatch(NakadiReader.java:138) [fahrschein-0.4.3.jar:?]
        at org.zalando.fahrschein.NakadiReader.runInternal(NakadiReader.java:253) [fahrschein-0.4.3.jar:?]
        at org.zalando.fahrschein.NakadiReader.run(NakadiReader.java:212) [fahrschein-0.4.3.jar:?]
        at org.zalando.fahrschein.NakadiClient.listen(NakadiClient.java:97) [fahrschein-0.4.3.jar:?]
        at de.zalando.Gateway.listenForEvent(EventConsumerGateway.java:45) [main/:?]
        at de.zalando.Gateway$$FastClassBySpringCGLIB$$da487360.invoke(<generated>) [main/:?]
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) [spring-core-4.3.3.RELEASE.jar:4.3.3.RELEASE]
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720) [spring-aop-4.3.3.RELEASE.jar:4.3.3.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) [spring-aop-4.3.3.RELEASE.jar:4.3.3.RELEASE]
        at org.springframework.aop.interceptor.AsyncExecutionInterceptor$1.call(AsyncExecutionInterceptor.java:115) [spring-aop-4.3.3.RELEASE.jar:4.3.3.RELEASE]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_40]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_40]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_40]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_40]
Caused by: org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:201) ~[postgresql-9.4-1205-jdbc42.jar:9.4]
        at org.postgresql.jdbc2.AbstractJdbc2Connection.executeTransactionCommand(AbstractJdbc2Connection.java:824) ~[postgresql-9.4-1205-jdbc42.jar:9.4]
        at org.postgresql.jdbc2.AbstractJdbc2Connection.commit(AbstractJdbc2Connection.java:848) ~[postgresql-9.4-1205-jdbc42.jar:9.4]
        at com.zaxxer.hikari.pool.ProxyConnection.commit(ProxyConnection.java:352) ~[HikariCP-2.4.3.jar:?]
        at com.zaxxer.hikari.pool.HikariProxyConnection.commit(HikariProxyConnection.java) ~[HikariCP-2.4.3.jar:?]
        at org.springframework.jdbc.datasource.DataSourceTransactionManager.doCommit(DataSourceTransactionManager.java:272) ~[spring-jdbc-4.3.3.RELEASE.jar:4.3.3.RELEASE]
        ... 22 more
Caused by: java.io.EOFException
        at org.postgresql.core.PGStream.ReceiveChar(PGStream.java:284) ~[postgresql-9.4-1205-jdbc42.jar:9.4]
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1718) ~[postgresql-9.4-1205-jdbc42.jar:9.4]
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:173) ~[postgresql-9.4-1205-jdbc42.jar:9.4]
        at org.postgresql.jdbc2.AbstractJdbc2Connection.executeTransactionCommand(AbstractJdbc2Connection.java:824) ~[postgresql-9.4-1205-jdbc42.jar:9.4]
        at org.postgresql.jdbc2.AbstractJdbc2Connection.commit(AbstractJdbc2Connection.java:848) ~[postgresql-9.4-1205-jdbc42.jar:9.4]
        at com.zaxxer.hikari.pool.ProxyConnection.commit(ProxyConnection.java:352) ~[HikariCP-2.4.3.jar:?]
        at com.zaxxer.hikari.pool.HikariProxyConnection.commit(HikariProxyConnection.java) ~[HikariCP-2.4.3.jar:?]
        at org.springframework.jdbc.datasource.DataSourceTransactionManager.doCommit(DataSourceTransactionManager.java:272) ~[spring-jdbc-4.3.3.RELEASE.jar:4.3.3.RELEASE]
        ... 22 more

@jhorstmann
Copy link
Collaborator

Suggestion for a fix: JdbcCursorManager should check the root cause of any DataAccessException and if it's an IOException then wrap the exception again in an IOException.

@otrosien
Copy link
Member

@lukasniemeier-zalando we're actually considering dropping the JdbcCursorManager, it seems to be unused. Do you still have a use-case we're not aware of?

@otrosien
Copy link
Member

obsolete, as JdbcCursorManager is gone now.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants