-
Notifications
You must be signed in to change notification settings - Fork 3.7k
[fix](connection) kill connection when meeting Write mysql packet failed error #36559
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
Thank you for your contribution to Apache Doris. Since 2024-03-18, the Document has been moved to doris-website. |
|
run buildall |
TPC-H: Total hot run time: 39707 ms |
TPC-DS: Total hot run time: 170636 ms |
ClickBench: Total hot run time: 30.91 s |
kaka11chen
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
|
PR approved by at least one committer and no changes requested. |
|
PR approved by anyone and no changes requested. |
|
run buildall |
TPC-H: Total hot run time: 39593 ms |
TPC-DS: Total hot run time: 174014 ms |
ClickBench: Total hot run time: 31.32 s |
…led error (apache#36559) Some time we met error like: ``` 2024-06-15 17:26:16,492 WARN (mysql-nio-pool-206|11598) [ConnectProcessor.handleQueryException():420] Process one query failed because IOException: java.io.IOException: Write mysql packet failed.[write=646624, needToWrite=2097119] at org.apache.doris.mysql.MysqlChannel.realNetSend(MysqlChannel.java:407) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.mysql.MysqlChannel.flush(MysqlChannel.java:436) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.mysql.MysqlChannel.writeBuffer(MysqlChannel.java:467) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.mysql.MysqlChannel.sendOnePacket(MysqlChannel.java:500) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.StmtExecutor.sendResult(StmtExecutor.java:1747) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.StmtExecutor.handleQueryStmt(StmtExecutor.java:1674) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.StmtExecutor.handleQueryWithRetry(StmtExecutor.java:779) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.StmtExecutor.executeByNereids(StmtExecutor.java:731) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:533) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:512) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.ConnectProcessor.executeQuery(ConnectProcessor.java:307) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:203) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.MysqlConnectProcessor.handleQuery(MysqlConnectProcessor.java:177) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.MysqlConnectProcessor.dispatch(MysqlConnectProcessor.java:205) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.MysqlConnectProcessor.processOnce(MysqlConnectProcessor.java:258) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.mysql.ReadListener.lambda$handleEvent$0(ReadListener.java:52) ~[doris-fe.jar:1.2-SNAPSHOT] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_352-352] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_352-352] at java.lang.Thread.run(Thread.java:750) ~[?:1.8.0_352-352] ``` After that, if user call `connection.close()` in jdbc, it may be blocked. And we can still see this connection in `show processlist`. We should kill this connection because it is already broken.
…led error (#36559) Some time we met error like: ``` 2024-06-15 17:26:16,492 WARN (mysql-nio-pool-206|11598) [ConnectProcessor.handleQueryException():420] Process one query failed because IOException: java.io.IOException: Write mysql packet failed.[write=646624, needToWrite=2097119] at org.apache.doris.mysql.MysqlChannel.realNetSend(MysqlChannel.java:407) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.mysql.MysqlChannel.flush(MysqlChannel.java:436) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.mysql.MysqlChannel.writeBuffer(MysqlChannel.java:467) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.mysql.MysqlChannel.sendOnePacket(MysqlChannel.java:500) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.StmtExecutor.sendResult(StmtExecutor.java:1747) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.StmtExecutor.handleQueryStmt(StmtExecutor.java:1674) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.StmtExecutor.handleQueryWithRetry(StmtExecutor.java:779) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.StmtExecutor.executeByNereids(StmtExecutor.java:731) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:533) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:512) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.ConnectProcessor.executeQuery(ConnectProcessor.java:307) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:203) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.MysqlConnectProcessor.handleQuery(MysqlConnectProcessor.java:177) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.MysqlConnectProcessor.dispatch(MysqlConnectProcessor.java:205) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.qe.MysqlConnectProcessor.processOnce(MysqlConnectProcessor.java:258) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.mysql.ReadListener.lambda$handleEvent$0(ReadListener.java:52) ~[doris-fe.jar:1.2-SNAPSHOT] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_352-352] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_352-352] at java.lang.Thread.run(Thread.java:750) ~[?:1.8.0_352-352] ``` After that, if user call `connection.close()` in jdbc, it may be blocked. And we can still see this connection in `show processlist`. We should kill this connection because it is already broken.
Some time we met error like:
After that, if user call
connection.close()in jdbc, it may be blocked.And we can still see this connection in
show processlist.We should kill this connection because it is already broken.