# [KB]  PD will panic if tikv enable forwarding

## Key Words

PD panic, enable-forwarding

## Description

开启 TiKV 转发，设置 pd.enable-forwarding = true，断掉某个 TiKV 到 PD leader 的网络，发现会导致 PD 无法服务,goroutine 内容：

```golang
goroutine 7472 [runntng];
github.com/pingcap/kvproto/pkg/pdpb.(*ReportBucketsRequest).MarshalToSizedBuffer(0x0，{0x444ece8，θxθ，0x0})
/go/pkg/mod/github.com/pingcap/kvprotov0.0.0-20220510035547-0e2f26c0a46a/pkg/pdpb/pdpb.pb.go:13308 +0x2c
github.com/pingcap/kvproto/pkg/pdpb.(-ReportBucketsRequest).Marshal(0x23?)
700/pkg/mad/github.com/pingcap/kvprotov0.00-20220510035547-02f26c0a46a/pkg/pdpb/pdpb.pb.go:13295 +0x56
google.golang.org/grpc/encoding/proto.codec.Marshal({)，{0x267de60，0x})
/go/pkg/mod/google.golang.org/grpc@v1.26.0/encoding/proto/proto.go:70 +0xfe
google.golang.org/grpc.encode({0x7f264461df50?，0x444ece8?}，{0x267de60?，θx0?})
go/pkg/mod/google.golang.org/grpcv1.26.0/rpc util.go543 +0x44
google.golang.org/grpc.prepareMsg({0x267de60?，Ox0?}，70x7f264461df50?，θx444ece8?}，{0xθ，θxθ}，{θxθ，θxθ})
/qo/pkg/mod/google.golang.orq/grpcv1.26.0/streamo:1519 +0xd2
google.golang.org/grpc(*clientStream).SendMsg(0xc0050e648，{0x267de60，0x0})
/go/pkg/mod/google.golang.org/grpc@v1.26.0/stream.go;699 +0x176
github.com/pingcap/kvproto/pkg/pdpb.*pDReportBucketsClient).Send(0xc005b8c048?，0x1?)
/go/pkg/mod/github.com/pingcap/kvprotv0.00-20220510035547-0e2f26c0a46a/pkg/pdpb/pdpb.pb.go:7124 +0x2b
github.com/tikv/pd/server.(*GrpcServer).ReportBuckets(0xc005b8c048，{0x33b5a88?，0xc0090e2f00})
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/pd/server/grpcservice.go:742 +0xb27
aithub.com/pingcap/kvproto/pkg/pdpb.PD ReportBuckets HandTer({0x2700f60?，0xc005b8c04)，{0x33b 3420?，0xc0019e20d8} )
/qo/pkg/mod/g1thub.com/pingcap/kvprotov00.0-20220510035547-0e2f26c0a46a/pkg/pdpb/pdpb.pb.go;7924 +0xa2
github.com/grpc-ecosystem/go-grpc-middleware.ChainStreamServer.func1.1({0x2700f60?，0xc005b8c048?}，{0x33b 3420?，0xc0019e20d8? })
/q0/pkg/mod/github.com/grpc-ecosystem/go-grpc-middlewarev1.0.1-0.20190118093823-f849b5445de4/chain.go:71 +0x89
github.com/grpc-ecosystem/go-grpc-prometheus.(*ServerMetrics).StreamServerInterceptor.func1({0x2700f60，0xc005b8c048}，{0x33b3e40?，exc000631440}，0x
/g0/pkg/mod/github.com/grpc-ecosystem/go-grpc-prometheus@v1.2.0/server metrics.go:12i +0x109
qithub.com/grpc-ecosystem/go-grpc-middleware.chainStreamServer.func1.1({0x2700T60?，0xcó05b8c048?}，{0x33b3e40?，Oxc000631440?})
1g0/0ka/mod/github.com/grpc-ecosystem/go-grpc-middlewarev1.0.1-0.20190118093823-f849b5445de4/chain.go:74 +0x6f
go.etcd.10/etcd/etcdserver/api/v3rpc.newstreaminterceptor.func1((0x2700f60，Oxc005b8c048}，《0x33b3e40?，0xc000631440?}，exc0019e2060?， exc005021dbo)
1g0/pkg/mod/g.etcd.io/etcdev0.5.0-alpha5.020191023171146-3cf2f69b5738/etcdserver/ap/v3rpc/interceptorgo:225 +0x383
github.c6a%gppc-ecosystem/go-grpc-middleware.ChainStreamServer.unc1({0x2700f60，0xc005b8c048){0x33b340，Oxc000631440}，0xc 0019e2060,0x30d4428)
go7pkg/mod/gthub.com/grpc-ecosystem/go-rpc-middewarv1.1-0.20190118093823-f84965445de4/chain.go:79 +0x1a3
google.golangkorgggrpc.(userver).processstreamngRPc(0xc00087c300，{0x33b78f0，0xc0049ef500)，0xc00503e100，xc0025892c0，0x4339180,0x0)
/go/pkg/mod/google.golang.org/grpcev1.26.0/server.go:1244 +0xd66
google.golang.org/grpc.-server.handestream(0xc00087c300，{0x33b78f0，Oxc0049ef500}，Oxc00503e100，0x0)
/go/pkg/mod/google.golang.org/grpc@v1.26.0/server.go:1317 +0x9be
google.golang.org/grpc.(*Server).servestreams.func1.1()
/go/pkg/mod/google.golang.org/grpcev1.26.0/servergo:722 +0x98
created by google.golang.org/grpc.(-Server).serveStreams.func1
190/pkg/mod/google.golang.org/grpcev1.26.0/server.go:720 +0xea
```

## Root Cause

PD 在处理 bucket 的转发逻辑时，有一处错误没处理，导致出现了 nil 的请求，进而在解析请求时出现 panic。

## Diagnostic Steps

NA

## Resolution

升级到未受影响版本

## Workaround

关闭转发功能：enable-forwarding = false

## Affect Version

v6.1.0