code: func (w *gcTaskWorker) doGCForRegion(bo *tikv.Backoffer, safePoint uint64, region tikv.RegionVerID) (*errorpb.Error, error) {
  	req := &tikvrpc.Request{
  		Type: tikvrpc.CmdGC,
  		GC: &kvrpcpb.GCRequest{
  			SafePoint: safePoint,
  		},
  	}
  
  	resp, err := w.store.SendReq(bo, req, region, tikv.GCTimeout)
  	if err != nil {
  		return nil, errors.Trace(err)
  	}
  	regionErr, err := resp.GetRegionError()
  	if err != nil {
  		return nil, errors.Trace(err)
  	}
  	if regionErr != nil {
  		return regionErr, nil
  	}
  
  	gcResp := resp.GC
  	if gcResp == nil {
  		return nil, errors.Trace(tikv.ErrBodyMissing)
  	}
  	if gcResp.GetError() != nil {
  		return nil, errors.Errorf("unexpected gc error: %s", gcResp.GetError())
  	}
  
  	return nil, nil
  }
docs: // doGCForRegion used for gc for region.
  // these two errors should not return together, for more, see the func 'doGC'