From 970f0ce30483ea899c644a0d53fa62637cf12feb Mon Sep 17 00:00:00 2001 From: pingcap-github-bot Date: Mon, 8 Jun 2020 11:47:45 +0800 Subject: [PATCH] tikv: fix panic after sending fail with ambiguous errors (#17211) (#17378) * tikv: fix panic after sending fail with ambiguous errors (#17211) * fix compile error Co-authored-by: lysu --- store/tikv/client_batch.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/store/tikv/client_batch.go b/store/tikv/client_batch.go index ae14f3522b528..4aad7a3a30e78 100644 --- a/store/tikv/client_batch.go +++ b/store/tikv/client_batch.go @@ -233,6 +233,7 @@ func (c *batchCommandsClient) send(request *tikvpb.BatchCommandsRequest, entries logutil.Logger(context.Background()).Info( "sending batch commands meets error", zap.String("target", c.target), + zap.Uint64s("requestIDs", request.RequestIds), zap.Error(err), ) c.failPendingRequests(err) @@ -339,10 +340,10 @@ func (c *batchCommandsClient) batchRecvLoop(cfg config.TiKVClient, tikvTransport for i, requestID := range resp.GetRequestIds() { value, ok := c.batched.Load(requestID) if !ok { - // There shouldn't be any unknown responses because if the old entries - // are cleaned by `failPendingRequests`, the stream must be re-created - // so that old responses will be never received. - panic("batchRecvLoop receives a unknown response") + // this maybe caused by batchCommandsClient#send meets ambiguous error that request has be sent to TiKV but still report a error. + // then TiKV will send response back though stream and reach here. + logutil.Logger(context.Background()).Warn("batchRecvLoop receives outdated response", zap.Uint64("requestID", requestID)) + continue } entry := value.(*batchCommandsEntry) if atomic.LoadInt32(&entry.canceled) == 0 {