mirror of
https://github.com/actiontech/dble.git
synced 2026-01-01 18:30:43 -06:00
inner-1945-supplement: report error packet when connection closed (#3562)
inner-2062: fix npe Signed-off-by: dcy10000 <dcy10000@gmail.com>
This commit is contained in:
@@ -167,6 +167,18 @@ public abstract class BackendService extends AbstractService {
|
||||
}
|
||||
}
|
||||
|
||||
void parseErrorPacket(byte[] data, String reason) {
|
||||
try {
|
||||
ErrorPacket errPkg = new ErrorPacket();
|
||||
errPkg.read(data);
|
||||
String errMsg = "errNo:" + errPkg.getErrNo() + " " + new String(errPkg.getMessage());
|
||||
LOGGER.warn("no handler process the execute packet err,sql error:{},back service:{},from reason:{}", errMsg, this, reason);
|
||||
|
||||
} catch (RuntimeException e) {
|
||||
LOGGER.info("error handle error-packet", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* handle mysql packet returned from backend mysql
|
||||
*
|
||||
@@ -174,6 +186,9 @@ public abstract class BackendService extends AbstractService {
|
||||
*/
|
||||
protected void handleInnerData(byte[] data) {
|
||||
if (connection.isClosed()) {
|
||||
if (data != null && data.length > 4 && data[4] == ErrorPacket.FIELD_COUNT) {
|
||||
parseErrorPacket(data, "connection close");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -201,15 +216,26 @@ public abstract class BackendService extends AbstractService {
|
||||
LOGGER.warn(this.toString() + " handle data error:", e);
|
||||
connection.close("handle data error:" + e.getMessage());
|
||||
while (taskQueue.size() > 0) {
|
||||
taskQueue.clear();
|
||||
clearTaskQueue();
|
||||
// clear all data from the client
|
||||
LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(1000));
|
||||
}
|
||||
}
|
||||
|
||||
private void clearTaskQueue() {
|
||||
ServiceTask task;
|
||||
while ((task = taskQueue.poll()) != null) {
|
||||
final byte[] data = task.getOrgData();
|
||||
if (data != null && data.length > 4 && data[4] == ErrorPacket.FIELD_COUNT) {
|
||||
parseErrorPacket(data, "cleanup");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanup() {
|
||||
this.taskQueue.clear();
|
||||
clearTaskQueue();
|
||||
backendSpecialCleanUp();
|
||||
TraceManager.sessionFinish(this);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user