@@ -191,6 +191,18 @@ private void handleTaskQueue(ThreadContext threadContext) {
191191 }
192192 }
193193
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+
194206 /**
195207 * handle mysql packet returned from backend mysql
196208 *
@@ -199,6 +211,9 @@ private void handleTaskQueue(ThreadContext threadContext) {
199211 @ Override
200212 protected void handleInnerData (byte [] data ) {
201213 if (connection .isClosed ()) {
214+ if (data != null && data .length > 4 && data [4 ] == ErrorPacket .FIELD_COUNT ) {
215+ parseErrorPacket (data , "connection close" );
216+ }
202217 return ;
203218 }
204219
@@ -218,16 +233,28 @@ protected void handleDataError(Exception e) {
218233 LOGGER .warn (this .toString () + " handle data error:" , e );
219234 connection .close ("handle data error:" + e .getMessage ());
220235 while (taskQueue .size () > 0 ) {
221- taskQueue . clear ();
236+ clearTaskQueue ();
222237 readSize .set (0 );
223238 // clear all data from the client
224239 LockSupport .parkNanos (TimeUnit .MILLISECONDS .toNanos (1000 ));
225240 }
226241 }
227242
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+
228255 @ Override
229256 public void cleanup () {
230- this . taskQueue . clear ();
257+ clearTaskQueue ();
231258 readSize .set (0 );
232259 backendSpecialCleanUp ();
233260 TraceManager .sessionFinish (this );
0 commit comments