查看日志
以 tikv 为例,找到对应堆栈相关日志:
[2024/12/26 15:12:48.278 +08:00] [FATAL] [lib.rs:509] ["called Option::unwrap() on a None value"] [backtrace=" 0: tikv_util::set_panic_hook::closure
n at /home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tikv/components/tikv_util/src/lib.rs:508:18
n 1: <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/boxed.rs:2032:9
n std::panicking::rust_panic_with_hook
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:692:13
n 2: std::panicking::begin_panic_handler::closure
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:577:13
n 3: std::sys_common::backtrace::_rust_end_short_backtrace
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:137:18
n 4: rust_begin_unwind
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:575:5
n 5: core::panicking::panic_fmt
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/panicking.rs:65:14
n 6: core::panicking::panic
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/panicking.rs:114:5
n 7: cdc::endpoint::Endpoint<T,E>::on_register
n <cdc::endpoint::Endpoint<T,E> as tikv_util::worker::pool::Runnable>::run
n at /home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tikv/components/cdc/src/endpoint.rs:1126:18
n 8: tikv_util::worker::pool::Worker::start_with_timer_impl::closure
n at /home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tikv/components/tikv_util/src/worker/pool.rs:495:25
n <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/future/mod.rs:91:19
n yatp::task::future::RawTask<F>::poll
n at /rust/git/checkouts/yatp-e704b73c3ee279b6/39cb495/src/task/future.rs:59:9
n 9: yatp::task::future::TaskCell::poll
n at /rust/git/checkouts/yatp-e704b73c3ee279b6/39cb495/src/task/future.rs:103:9
n <yatp::task::future::Runner as yatp::pool::runner::Runner>::handle
n at /rust/git/checkouts/yatp-e704b73c3ee279b6/39cb495/src/task/future.rs:387:20
n 10: <tikv_util::yatp_pool::YatpPoolRunner<T> as yatp::pool::runner::Runner>::handle
n at /home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tikv/components/tikv_util/src/yatp_pool/mod.rs:122:24
n yatp::pool::worker::WorkerThread<T,R>::run
n at /rust/git/checkouts/yatp-e704b73c3ee279b6/39cb495/src/pool/worker.rs:48:13
n yatp::pool::builder::LazyBuilder<T>::build::closure
n at /rust/git/checkouts/yatp-e704b73c3ee279b6/39cb495/src/pool/builder.rs:114:25
n std::sys_common::backtrace::_rust_begin_short_backtrace
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:121:18
n 11: std::thread::Builder::spawn_unchecked::closure::closure
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/thread/mod.rs:551:17
n <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/panic/unwind_safe.rs:271:9
n std::panicking::try::do_call
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:483:40
n std::panicking::try
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:447:19
n std::panic::catch_unwind
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panic.rs:137:14
n std::thread::Builder::spawn_unchecked::closure
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/thread/mod.rs:550:30
n core::ops::function::FnOnce::call_once{{vtable.shim}}
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:513:5
n 12: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/boxed.rs:2000:9
n <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/boxed.rs:2000:9
n std::sys::unix::thread::Thread::new::thread_start
n at /rust/toolchains/nightly-2022-11-15-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/unix/thread.rs:108:17
n 13: start_thread
n 14: __clone
n"] [location=/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tikv/components/cdc/src/endpoint.rs:619] [thread_name=cdc-0]
- 需要确认 TiDB 版本(这里是 6.5.5 版本)
- 日志中找到对应代码位置:pingcap/tikv/components/cdc/src/endpoint.rs:619
选择版本 >> 查看对应路径代码文件 >> 定位到 619 行。
尝试分析代码
可以看到这个代码是在 pub fn on_register
下,这行代码大体是在获取 conn。
然后在 master 找对应 fn 下的 conn 获取逻辑行:
这里选择下这行:
然后点击下 Blame,可以看到这段代码的一些优化 commit:
然后点击进去这个 ISSUE ,看下修复内容和 panic 情况对照下即可。
这个方法可以找到已知的修复问题。对于没有修复的暂时无能为了,可以考虑在 github 上给官方提 ISSUE。
分析 ISSUE
如图
这里注意还是要自己阅读下 ISSUE 内容,避免 AI 幻觉。