print original error if the recv failure is injected (#474)

Signed-off-by: cfzjywxk <lsswxrxr@163.com>
This commit is contained in:
cfzjywxk 2022-04-20 13:49:05 +08:00 committed by GitHub
parent 45f7e566b8
commit 7f6daad88a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 20 additions and 2 deletions

View File

@ -1069,6 +1069,23 @@ func (h *RPCCanceller) CancelAll() {
h.Unlock()
}
func fetchRespInfo(resp *tikvrpc.Response) string {
var extraInfo string
if resp == nil || resp.Resp == nil {
extraInfo = "nil response"
} else {
regionErr, e := resp.GetRegionError()
if e != nil {
extraInfo = e.Error()
} else if regionErr != nil {
extraInfo = regionErr.String()
} else if prewriteResp, ok := resp.Resp.(*kvrpcpb.PrewriteResponse); ok {
extraInfo = prewriteResp.String()
}
}
return extraInfo
}
func (s *RegionRequestSender) sendReqToRegion(bo *retry.Backoffer, rpcCtx *RPCContext, req *tikvrpc.Request, timeout time.Duration) (resp *tikvrpc.Response, retry bool, err error) {
if e := tikvrpc.SetContext(req, rpcCtx.Meta, rpcCtx.Peer); e != nil {
return nil, false, err
@ -1130,7 +1147,7 @@ func (s *RegionRequestSender) sendReqToRegion(bo *retry.Backoffer, rpcCtx *RPCCo
resp, err = s.client.SendRequest(ctx, sendToAddr, req, timeout)
if s.Stats != nil {
RecordRegionRequestRuntimeStats(s.Stats, req.Type, time.Since(start))
if val, err := util.EvalFailpoint("tikvStoreRespResult"); err == nil {
if val, fpErr := util.EvalFailpoint("tikvStoreRespResult"); fpErr == nil {
if val.(bool) {
if req.Type == tikvrpc.CmdCop && bo.GetTotalSleep() == 0 {
return &tikvrpc.Response{
@ -1156,7 +1173,8 @@ func (s *RegionRequestSender) sendReqToRegion(bo *retry.Backoffer, rpcCtx *RPCCo
if inject {
logutil.Logger(ctx).Info("[failpoint] injected RPC error on recv", zap.Stringer("type", req.Type),
zap.Stringer("req", req.Req.(fmt.Stringer)), zap.Stringer("ctx", &req.Context))
zap.Stringer("req", req.Req.(fmt.Stringer)), zap.Stringer("ctx", &req.Context),
zap.Error(err), zap.String("extra response info", fetchRespInfo(resp)))
err = errors.New("injected RPC error on recv")
resp = nil
}