@@ -191,6 +191,18 @@ private void handleTaskQueue(ThreadContext threadContext) {
191
191
}
192
192
}
193
193
194
+ void parseErrorPacket (byte [] data , String reason ) {
195
+ try {
196
+ ErrorPacket errPkg = new ErrorPacket ();
197
+ errPkg .read (data );
198
+ String errMsg = "errNo:" + errPkg .getErrNo () + " " + new String (errPkg .getMessage ());
199
+ LOGGER .warn ("no handler process the execute packet err,sql error:{},back service:{},from reason:{}" , errMsg , this , reason );
200
+
201
+ } catch (RuntimeException e ) {
202
+ LOGGER .info ("error handle error-packet" , e );
203
+ }
204
+ }
205
+
194
206
/**
195
207
* handle mysql packet returned from backend mysql
196
208
*
@@ -199,6 +211,9 @@ private void handleTaskQueue(ThreadContext threadContext) {
199
211
@ Override
200
212
protected void handleInnerData (byte [] data ) {
201
213
if (connection .isClosed ()) {
214
+ if (data != null && data .length > 4 && data [4 ] == ErrorPacket .FIELD_COUNT ) {
215
+ parseErrorPacket (data , "connection close" );
216
+ }
202
217
return ;
203
218
}
204
219
@@ -218,16 +233,28 @@ protected void handleDataError(Exception e) {
218
233
LOGGER .warn (this .toString () + " handle data error:" , e );
219
234
connection .close ("handle data error:" + e .getMessage ());
220
235
while (taskQueue .size () > 0 ) {
221
- taskQueue . clear ();
236
+ clearTaskQueue ();
222
237
readSize .set (0 );
223
238
// clear all data from the client
224
239
LockSupport .parkNanos (TimeUnit .MILLISECONDS .toNanos (1000 ));
225
240
}
226
241
}
227
242
243
+ private void clearTaskQueue () {
244
+ ServiceTask task ;
245
+ while ((task = taskQueue .poll ()) != null ) {
246
+ if (task .getType () == ServiceTaskType .NORMAL ) {
247
+ final byte [] data = ((NormalServiceTask ) task ).getOrgData ();
248
+ if (data != null && data .length > 4 && data [4 ] == ErrorPacket .FIELD_COUNT ) {
249
+ parseErrorPacket (data , "cleanup" );
250
+ }
251
+ }
252
+ }
253
+ }
254
+
228
255
@ Override
229
256
public void cleanup () {
230
- this . taskQueue . clear ();
257
+ clearTaskQueue ();
231
258
readSize .set (0 );
232
259
backendSpecialCleanUp ();
233
260
TraceManager .sessionFinish (this );
0 commit comments