Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
N/A
-
None
Description
Caused by: java.sql.SQLNonTransientConnectionException: (conn:59) Could not send query: 断开的管道 (Write failed) |
at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.get(ExceptionMapper.java:156) |
at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.getException(ExceptionMapper.java:118) |
at org.mariadb.jdbc.MariaDbStatement.executeBatchExceptionEpilogue(MariaDbStatement.java:295) |
... 9 more |
Caused by: java.sql.SQLException: Could not send query: 断开的管道 (Write failed)
|
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.handleIoException(AbstractQueryProtocol.java:1488) |
at org.mariadb.jdbc.internal.protocol.AbstractMultiSend.executeBatchStandard(AbstractMultiSend.java:290) |
at org.mariadb.jdbc.internal.protocol.AbstractMultiSend.executeBatch(AbstractMultiSend.java:190) |
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeBatch(AbstractQueryProtocol.java:371) |
at org.mariadb.jdbc.MariaDbStatement.internalBatchExecution(MariaDbStatement.java:1268) |
at org.mariadb.jdbc.MariaDbStatement.executeBatch(MariaDbStatement.java:1222) |
... 8 more |
Caused by: java.net.SocketException: 断开的管道 (Write failed)
|
at java.net.SocketOutputStream.socketWrite0(Native Method)
|
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111) |
at java.net.SocketOutputStream.write(SocketOutputStream.java:155) |
at org.mariadb.jdbc.internal.io.output.StandardPacketOutputStream.flushBuffer(StandardPacketOutputStream.java:103) |
at org.mariadb.jdbc.internal.io.output.AbstractPacketOutputStream.flush(AbstractPacketOutputStream.java:157) |
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol$2.sendCmd(AbstractQueryProtocol.java:383) |
at org.mariadb.jdbc.internal.protocol.AbstractMultiSend.executeBatchStandard(AbstractMultiSend.java:229) |
... 12 more |
for (; status.sendSubCmdCounter < requestNumberByBulk; ) { |
sendCmd(writer, results, parametersList, queries, paramCount, status, prepareResult);
|
status.sendSubCmdCounter++;
|
status.sendCmdCounter++;
|
|
if (futureReadTask == null) { |
futureReadTask = new FutureTask<AsyncMultiReadResult>(new AsyncMultiRead(comStmtPrepare, status, |
protocol, false, this, paramCount, |
results, parametersList, queries, prepareResult));
|
AbstractQueryProtocol.readScheduler.execute(futureReadTask);
|
}
|
}
|
|
status.sendEnded = true; |
if the function sendCmd() throwes exception above while runing, the status.sendEnded couldn't be set to True, then the AsyncMultiRead thread will endless loop in while
//ensure to not finished loop while all bulk has not been send |
while (!status.sendEnded || counter < status.sendSubCmdCounter) { |
//read results for each send data |
while (counter < status.sendSubCmdCounter) { |
try { |
protocol.getResult(results);
|
} catch (SQLException qex) { |
if (asyncMultiReadResult.getException() == null) { |
asyncMultiReadResult.setException(bulkSend.handleResultException(qex, results,
|
parametersList, queries, counter, sendCmdInitialCounter, paramCount,
|
asyncMultiReadResult.getPrepareResult()));
|
}
|
}
|
counter++;
|
|
if (Thread.currentThread().isInterrupted()) { |
asyncMultiReadResult.setException(new SQLException("Interrupted reading responses ", INTERRUPTED_EXCEPTION.getSqlState(), -1)); |
break; |
}
|
}
|
}
|
Attachments
Issue Links
- causes
-
CONJ-563 Thread leak reported by Tomcat when using the connector
- Closed