# [KB]关于BR-恢复过程中-hang-卡死

## Key Words

BR,hang,waitTablesNonde

## Issue

使用 BR 恢复 60GB 的备份共 2820 个表 ，并且使用了 --ignore-stats=false 参数配置。

发现 restore 一直 hang 在 75.52% 的进度。

## Root Cause

在引入了一个在恢复的时候并行发送数个 Download + Ingest 请求的优化之后，有一处代码没有正确地进行同步，导致在极少数情况下，会让 Restore 过程 **失败后** 无法正常退出。

Gtihub Issue：[https://github.com/pingcap/tidb/issues/30135](https://github.com/pingcap/tidb/issues/30135)

## Diagnostic Steps

1. 如果发现恢复已经卡死，可以通过以下方式确认是否为该问题。找到日志，使用 grep '\\[ERROR]' $log_file 查找 BR 遇到的错误，如果出现了大量 “download file failed” 或者 “ingest file failed” 等日志，而且版本为 5.3.0 或者 4.0.15，那么基本可以确定为该问题。  

2. 如果想要更进一步确认，可以通过 kill -USR1 $(pgrep br) 开启 BR 的 pprof，然后进入 ${pprof_addr}/debug/pprof/goroutine?debug=2，如果在发现某些 goroutine 在如下调用栈中卡死，那么基本可以确定为该问题：

![image.png](/images/BR/BR-recover-hang.png)

## Resolution

当前未修复，可以关注 PR：[https://github.com/pingcap/tidb/pull/30190](https://github.com/pingcap/tidb/pull/30190)

## Workaround

BR 恢复已经失败，通过 grep 日志找到根本原因，kill 掉重新开始恢复即可。