tikv / pd

Placement driver for TiKV
Apache License 2.0
1.03k stars 714 forks source link

Size configuration on the TIKV side may cause PD panic #8323

Closed JmPotato closed 5 days ago

JmPotato commented 6 days ago

Bug Report

If set coprocessor.region-split-size to a value that is less than 1 MiB, it will cause PD panic due to the following code:

https://github.com/tikv/pd/blob/6ae7b47f74d2ddcbd870ed4a62a140faa9773491/pkg/schedule/config/store_config.go#L171

GetRegionSplitSize() will return a zero value parsed by ParseMBFromText(), which will return 0 if the given size is less than 1 MiB.

https://github.com/tikv/pd/blob/6ae7b47f74d2ddcbd870ed4a62a140faa9773491/pkg/utils/typeutil/size.go#L27-L36

[2024/06/25 14:30:37.095 +08:00] [FATAL] [log.go:72] [panic] [recover="\"integer divide by zero\""] [stack="[github.com/tikv/pd/pkg/logutil.LogPanic\n\t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/pd/pkg/logutil/log.go:72\nruntime.gopanic\n\t/usr/local/go/src/runtime/panic.go:884\nruntime.panicdivide\n\t/usr/local/go/src/runtime/panic.go:239\ngithub.com/tikv/pd/server/config.(*StoreConfig).CheckRegionSize\n\t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/pd/server/config/store_config.go:143\ngithub.com/tikv/pd/server/schedule/checker.(*MergeChecker).Check\n\t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/pd/server/schedule/checker/merge_checker.go:158\ngithub.com/tikv/pd/server/schedule/checker.(*Controller).CheckRegion\n\t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/pd/server/schedule/checker/checker_controller.go:124\ngithub.com/tikv/pd/server/cluster.(*coordinator).tryAddOperators\n\t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/pd/server/cluster/coordinator.go:265\ngithub.com/tikv/pd/server/cluster.(*coordinator).checkRegions\n\t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/pd/server/cluster/coordinator.go:168\ngithub.com/tikv/pd/server/cluster.(*coordinator).patrolRegions\n\t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/pd/server/cluster/coordinator.go:143](http://github.com/tikv/pd/pkg/logutil.LogPanic/n/t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/pd/pkg/logutil/log.go:72/nruntime.gopanic/n/t/usr/local/go/src/runtime/panic.go:884/nruntime.panicdivide/n/t/usr/local/go/src/runtime/panic.go:239/ngithub.com/tikv/pd/server/config.(*StoreConfig).CheckRegionSize/n/t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/pd/server/config/store_config.go:143/ngithub.com/tikv/pd/server/schedule/checker.(*MergeChecker).Check/n/t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/pd/server/schedule/checker/merge_checker.go:158/ngithub.com/tikv/pd/server/schedule/checker.(*Controller).CheckRegion/n/t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/pd/server/schedule/checker/checker_controller.go:124/ngithub.com/tikv/pd/server/cluster.(*coordinator).tryAddOperators/n/t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/pd/server/cluster/coordinator.go:265/ngithub.com/tikv/pd/server/cluster.(*coordinator).checkRegions/n/t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/pd/server/cluster/coordinator.go:168/ngithub.com/tikv/pd/server/cluster.(*coordinator).patrolRegions/n/t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/pd/server/cluster/coordinator.go:143)"]