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