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 {