Fix database connectivity issues. #1

Open
opened 2025-06-14 18:17:23 +02:00 by Tomas · 3 comments
Owner

java.sql.SQLNonTransientConnectionException: (conn=111267) (conn=111267) Connection is closed is thrown after some runtime. A guess is that the database closes connection after some period of inactivity. A solution is to imply reopen it.

`java.sql.SQLNonTransientConnectionException: (conn=111267) (conn=111267) Connection is closed` is thrown after some runtime. A guess is that the database closes connection after some period of inactivity. A solution is to imply reopen it.
Author
Owner
[Fixed](https://lesbian.ddns.net/Tomas/skinner/commit/3988ebe94e08b72bfea71261fedb6b47465d608a)
Tomas closed this issue 2025-07-20 20:33:01 +02:00
Author
Owner

It is not fixed...

java.sql.SQLNonTransientConnectionException: (conn=69753) Connection reset by peer
        at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:73)
        at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:158)
        at org.mariadb.jdbc.MariaDbStatement.executeExceptionEpilogue(MariaDbStatement.java:262)
        at org.mariadb.jdbc.MariaDbStatement.executeInternal(MariaDbStatement.java:362)
        at org.mariadb.jdbc.MariaDbStatement.executeQuery(MariaDbStatement.java:611)
        at org.skinner.Database.getSkinHashesAndLabels(Database.java:81)
        at org.skinner.RestAPI.getSkins(RestAPI.java:122)
        at org.skinner.RestAPI.handle(RestAPI.java:30)
        at org.skinner.SafeHttpHandler.handle(SafeHttpHandler.java:21)
        at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:95)
        at jdk.httpserver/sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:82)
        at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:98)
        at jdk.httpserver/sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:855)
        at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:95)
        at jdk.httpserver/sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:831)
        at jdk.httpserver/sun.net.httpserver.ServerImpl$DefaultExecutor.execute(ServerImpl.java:201)
        at jdk.httpserver/sun.net.httpserver.ServerImpl$Dispatcher.handle(ServerImpl.java:561)
        at jdk.httpserver/sun.net.httpserver.ServerImpl$Dispatcher.run(ServerImpl.java:526)
        at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: org.mariadb.jdbc.internal.util.exceptions.MariaDbSqlException: Connection reset by peer
        at org.mariadb.jdbc.internal.util.exceptions.MariaDbSqlException.of(MariaDbSqlException.java:34)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.exceptionWithQuery(AbstractQueryProtocol.java:194)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:264)
        at org.mariadb.jdbc.MariaDbStatement.executeInternal(MariaDbStatement.java:356)
        ... 15 more
Caused by: java.sql.SQLNonTransientConnectionException: Connection reset by peer
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.handleIoException(AbstractQueryProtocol.java:2091)
        ... 17 more
Caused by: java.net.SocketException: Connection reset by peer
        at java.base/sun.nio.ch.NioSocketImpl.implWrite(NioSocketImpl.java:425)
        at java.base/sun.nio.ch.NioSocketImpl.write(NioSocketImpl.java:445)
        at java.base/sun.nio.ch.NioSocketImpl$2.write(NioSocketImpl.java:831)
        at java.base/java.net.Socket$SocketOutputStream.write(Socket.java:1035)
        at org.mariadb.jdbc.internal.io.output.StandardPacketOutputStream.flushBuffer(StandardPacketOutputStream.java:111)
        at org.mariadb.jdbc.internal.io.output.AbstractPacketOutputStream.flush(AbstractPacketOutputStream.java:186)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:255)
        ... 16 more
It is not fixed... ``` java.sql.SQLNonTransientConnectionException: (conn=69753) Connection reset by peer at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:73) at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:158) at org.mariadb.jdbc.MariaDbStatement.executeExceptionEpilogue(MariaDbStatement.java:262) at org.mariadb.jdbc.MariaDbStatement.executeInternal(MariaDbStatement.java:362) at org.mariadb.jdbc.MariaDbStatement.executeQuery(MariaDbStatement.java:611) at org.skinner.Database.getSkinHashesAndLabels(Database.java:81) at org.skinner.RestAPI.getSkins(RestAPI.java:122) at org.skinner.RestAPI.handle(RestAPI.java:30) at org.skinner.SafeHttpHandler.handle(SafeHttpHandler.java:21) at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:95) at jdk.httpserver/sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:82) at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:98) at jdk.httpserver/sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:855) at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:95) at jdk.httpserver/sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:831) at jdk.httpserver/sun.net.httpserver.ServerImpl$DefaultExecutor.execute(ServerImpl.java:201) at jdk.httpserver/sun.net.httpserver.ServerImpl$Dispatcher.handle(ServerImpl.java:561) at jdk.httpserver/sun.net.httpserver.ServerImpl$Dispatcher.run(ServerImpl.java:526) at java.base/java.lang.Thread.run(Thread.java:840) Caused by: org.mariadb.jdbc.internal.util.exceptions.MariaDbSqlException: Connection reset by peer at org.mariadb.jdbc.internal.util.exceptions.MariaDbSqlException.of(MariaDbSqlException.java:34) at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.exceptionWithQuery(AbstractQueryProtocol.java:194) at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:264) at org.mariadb.jdbc.MariaDbStatement.executeInternal(MariaDbStatement.java:356) ... 15 more Caused by: java.sql.SQLNonTransientConnectionException: Connection reset by peer at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.handleIoException(AbstractQueryProtocol.java:2091) ... 17 more Caused by: java.net.SocketException: Connection reset by peer at java.base/sun.nio.ch.NioSocketImpl.implWrite(NioSocketImpl.java:425) at java.base/sun.nio.ch.NioSocketImpl.write(NioSocketImpl.java:445) at java.base/sun.nio.ch.NioSocketImpl$2.write(NioSocketImpl.java:831) at java.base/java.net.Socket$SocketOutputStream.write(Socket.java:1035) at org.mariadb.jdbc.internal.io.output.StandardPacketOutputStream.flushBuffer(StandardPacketOutputStream.java:111) at org.mariadb.jdbc.internal.io.output.AbstractPacketOutputStream.flush(AbstractPacketOutputStream.java:186) at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:255) ... 16 more ```
Tomas reopened this issue 2025-08-04 13:54:53 +02:00
Author
Owner

Upon further inspection, I suspect that if com.sun.net.httpserver is multi-threaded, it could be that the sql server is limiting the handle count.

java.sql.SQLNonTransientConnectionException: Could not connect to address=(host=localhost)(port=3306)(type=master) : Read timed out
        at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:73)
        at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:197)
        at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1394)
        at org.mariadb.jdbc.internal.util.Utils.retrieveProxy(Utils.java:635)
        at org.mariadb.jdbc.MariaDbConnection.newConnection(MariaDbConnection.java:150)
        at org.mariadb.jdbc.Driver.connect(Driver.java:89)
        at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:681)
        at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:229)
        at org.skinner.Database.<init>(Database.java:15)
        at java.base/java.lang.ThreadLocal$SuppliedThreadLocal.initialValue(ThreadLocal.java:305)
        at java.base/java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:195)
        at java.base/java.lang.ThreadLocal.get(ThreadLocal.java:172)
        at org.skinner.Database.getConnection(Database.java:34)
        at org.skinner.Database.getProfileByName(Database.java:214)
        at org.skinner.UniSkinAPI.handle(UniSkinAPI.java:24)
        at org.skinner.SafeHttpHandler.handle(SafeHttpHandler.java:21)
        at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:95)
        at jdk.httpserver/sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:82)
        at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:98)
        at jdk.httpserver/sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:855)
        at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:95)
        at jdk.httpserver/sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:831)
        at jdk.httpserver/sun.net.httpserver.ServerImpl$DefaultExecutor.execute(ServerImpl.java:201)
        at jdk.httpserver/sun.net.httpserver.ServerImpl$Dispatcher.handle(ServerImpl.java:561)
        at jdk.httpserver/sun.net.httpserver.ServerImpl$Dispatcher.run(ServerImpl.java:526)
        at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.sql.SQLNonTransientConnectionException: Read timed out
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.handleIoException(AbstractQueryProtocol.java:2091)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1541)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:1520)
        at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.readPipelineAdditionalData(AbstractConnectProtocol.java:1033)
        at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.postConnectionQueries(AbstractConnectProtocol.java:885)
        at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.createConnection(AbstractConnectProtocol.java:600)
        at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1389)
        ... 23 more
Upon further inspection, I suspect that if `com.sun.net.httpserver` is multi-threaded, it could be that the sql server is limiting the handle count. ``` java.sql.SQLNonTransientConnectionException: Could not connect to address=(host=localhost)(port=3306)(type=master) : Read timed out at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:73) at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:197) at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1394) at org.mariadb.jdbc.internal.util.Utils.retrieveProxy(Utils.java:635) at org.mariadb.jdbc.MariaDbConnection.newConnection(MariaDbConnection.java:150) at org.mariadb.jdbc.Driver.connect(Driver.java:89) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:681) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:229) at org.skinner.Database.<init>(Database.java:15) at java.base/java.lang.ThreadLocal$SuppliedThreadLocal.initialValue(ThreadLocal.java:305) at java.base/java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:195) at java.base/java.lang.ThreadLocal.get(ThreadLocal.java:172) at org.skinner.Database.getConnection(Database.java:34) at org.skinner.Database.getProfileByName(Database.java:214) at org.skinner.UniSkinAPI.handle(UniSkinAPI.java:24) at org.skinner.SafeHttpHandler.handle(SafeHttpHandler.java:21) at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:95) at jdk.httpserver/sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:82) at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:98) at jdk.httpserver/sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:855) at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:95) at jdk.httpserver/sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:831) at jdk.httpserver/sun.net.httpserver.ServerImpl$DefaultExecutor.execute(ServerImpl.java:201) at jdk.httpserver/sun.net.httpserver.ServerImpl$Dispatcher.handle(ServerImpl.java:561) at jdk.httpserver/sun.net.httpserver.ServerImpl$Dispatcher.run(ServerImpl.java:526) at java.base/java.lang.Thread.run(Thread.java:840) Caused by: java.sql.SQLNonTransientConnectionException: Read timed out at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.handleIoException(AbstractQueryProtocol.java:2091) at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1541) at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:1520) at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.readPipelineAdditionalData(AbstractConnectProtocol.java:1033) at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.postConnectionQueries(AbstractConnectProtocol.java:885) at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.createConnection(AbstractConnectProtocol.java:600) at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1389) ... 23 more ```
Tomas changed title from Make Database.getConnection() reconnect if closed and has not errored. to Fix database connectivity issues. 2025-09-04 21:19:54 +02:00
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Tomas/skinner#1
No description provided.