pingcap / pingcap/tidb

TiKV panic when evaluating `INT64_MAX % -1`

Open
#63,661 0 comments 0 reactions 0 assignees View on GitHub
affects-8.5 component/tikv contribution impact/panic may-affects-6.5 may-affects-7.1 may-affects-7.5 may-affects-8.1 severity/major type/bug
Dominant language
Go
Stars
40.5k
Forks
6.2k
PR merge metrics
PR metrics pending

Description

## Bug Report

Please answer these questions before submitting your issue. Thanks!

### 1. Minimal reproduce step (Required)

```sql
CREATE TABLE t1 (c1 bigint);

INSERT INTO t1 (c1) VALUES (-9223372036854775808);

SELECT 1 FROM t1 where (c1 % -1) = 0;
```

### 2. What did you expect to see? (Required)
no panic

### 3. What did you see instead (Required)
```
0: tikv_util::set_panic_hook::{{closure}}
at workspace/source/tikv/components/tikv_util/src/lib.rs:480:18
1: as core::ops::function::Fn>::call
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/boxed.rs:2029:9
std::panicking::rust_panic_with_hook
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:783:13
2: std::panicking::begin_panic_handler::{{closure}}
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:649:13
3: std::sys_common::backtrace::__rust_end_short_backtrace
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:171:18
4: rust_begin_unwind
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:645:5
5: core::panicking::panic_fmt
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/panicking.rs:72:14
6: core::panicking::panic
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/panicking.rs:144:5
7: > as tidb_query_expr::impl_arithmetic::Arithmetic_Fn>::eval
at workspace/source/tikv/components/tidb_query_expr/src/impl_arithmetic.rs:11:1
as tidb_query_expr::types::function::Evaluator>::eval
at workspace/source/tikv/components/tidb_query_expr/src/impl_arithmetic.rs:11:1
as tidb_query_expr::types::function::Evaluator>::eval
at workspace/source/tikv/components/tidb_query_expr/src/types/function.rs:245:17
as tidb_query_expr::types::function::Evaluator>::eval
at workspace/source/tikv/components/tidb_query_expr/src/types/function.rs:261:17
tidb_query_expr::impl_arithmetic::arithmetic_fn_meta::run
at workspace/source/tikv/components/tidb_query_expr/src/impl_arithmetic.rs:11:1
8: tidb_query_expr::types::expr_eval::::eval_decoded
at workspace/source/tikv/components/tidb_query_expr/src/types/expr_eval.rs:308:31
9: tidb_query_expr::types::expr_eval::::eval
at workspace/source/tikv/components/tidb_query_expr/src/types/expr_eval.rs:218:9
tidb_query_executors::selection_executor::BatchSelectionExecutor::handle_src_result
at workspace/source/tikv/components/tidb_query_executors/src/selection_executor.rs:82:19
as tidb_query_executors::interface::BatchExecutor>::next_batch::{{closure}}
at workspace/source/tikv/components/tidb_query_executors/src/selection_executor.rs:182:25
10: as core::future::future::Future>::poll
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/future/future.rs:124:9
as tidb_query_executors::interface::BatchExecutor>::next_batch::{{closure}}
at workspace/source/tikv/components/tidb_query_executors/src/interface.rs:114:55
11: as core::future::future::Future>::poll
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/future/future.rs:124:9
as tidb_query_executors::interface::BatchExecutor>::next_batch::{{closure}}
at workspace/source/tikv/components/tidb_query_executors/src/interface.rs:82:40
12: as core::future::future::Future>::poll
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/future/future.rs:124:9
tidb_query_executors::runner::BatchExecutorsRunner::internal_handle_request::{{closure}}
at workspace/source/tikv/components/tidb_query_executors/src/runner.rs:655:72
13: as core::future::future::Future>::poll
at workspace/source/tikv/components/tikv_util/src/quota_limiter.rs:177:19
tidb_query_executors::runner::BatchExecutorsRunner::handle_request::{{closure}}
at workspace/source/tikv/components/tidb_query_executors/src/runner.rs:519:22
::handle_request::{{closure}}
at workspace/source/tikv/src/coprocessor/dag/mod.rs:124:51
14: as core::future::future::Future>::poll
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/future/future.rs:124:9
as core::future::future::Future>::poll
at workspace/source/tikv/src/coprocessor/interceptors/deadline.rs:37:9
as core::future::future::Future>::poll
at workspace/source/tikv/src/coprocessor/interceptors/tracker.rs:54:19
15: as core::future::future::Future>::poll
at workspace/source/tikv/src/coprocessor/interceptors/concurrency_limiter.rs:112:15
tikv::coprocessor::endpoint::Endpoint::handle_unary_request_impl::{{closure}}
at workspace/source/tikv/src/coprocessor/endpoint.rs:484:87
as core::future::future::Future>::poll
at workspace/source/tikv/components/resource_metering/src/lib.rs:274:9
as core::future::future::Future>::poll
at workspace/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/futures-util-0.3.31/src/future/future/map.rs:55:37
as core::future::future::Future>::poll
at workspace/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/futures-util-0.3.31/src/lib.rs:86:13
as core::future::future::Future>::poll
at workspace/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/futures-util-0.3.31/src/future/future/map.rs:55:37
as core::future::future::Future>::poll
at workspace/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/futures-util-0.3.31/src/lib.rs:86:13
16: as core::future::future::Future>::poll
at workspace/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/futures-util-0.3.31/src/future/future/map.rs:55:37
as core::future::future::Future>::poll
at workspace/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/futures-util-0.3.31/src/lib.rs:86:13
as core::future::future::Future>::poll
at workspace/source/tikv/components/resource_control/src/future.rs:48:19
17: resource_control::future::with_resource_limiter::{{closure}}
at workspace/source/tikv/components/resource_control/src/future.rs:204:11
as core::future::future::Future>::poll::{{closure}}
at workspace/source/tikv/components/tracker/src/tls.rs:64:23
std::thread::local::LocalKey::try_with
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/thread/local.rs:270:16
std::thread::local::LocalKey::with
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/thread/local.rs:246:9
as core::future::future::Future>::poll
at workspace/source/tikv/components/tracker/src/tls.rs:62:27
yatp::task::future::RawTask::poll
at workspace/.cargo/git/checkouts/yatp-e704b73c3ee279b6/793be4d/src/task/future.rs:59:9
18: yatp::task::future::TaskCell::poll
at workspace/.cargo/git/checkouts/yatp-e704b73c3ee279b6/793be4d/src/task/future.rs:103:9
::handle
at workspace/.cargo/git/checkouts/yatp-e704b73c3ee279b6/793be4d/src/task/future.rs:387:20
19: as yatp::pool::runner::Runner>::handle
at workspace/source/tikv/components/tikv_util/src/yatp_pool/mod.rs:199:24
as yatp::pool::runner::Runner>::handle
at workspace/.cargo/git/checkouts/yatp-e704b73c3ee279b6/793be4d/src/queue/multilevel.rs:285:19
20: yatp::pool::worker::WorkerThread::run
at workspace/.cargo/git/checkouts/yatp-e704b73c3ee279b6/793be4d/src/pool/worker.rs:48:13
yatp::pool::builder::LazyBuilder::build::{{closure}}
at workspace/.cargo/git/checkouts/yatp-e704b73c3ee279b6/793be4d/src/pool/builder.rs:114:25
std::sys_common::backtrace::__rust_begin_short_backtrace
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:155:18
21: std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/thread/mod.rs:529:17
as core::ops::function::FnOnce<()>>::call_once
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/panic/unwind_safe.rs:272:9
std::panicking::try::do_call
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:552:40
std::panicking::try
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:516:19
std::panic::catch_unwind
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panic.rs:142:14
std::thread::Builder::spawn_unchecked_::{{closure}}
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/thread/mod.rs:528:30
core::ops::function::FnOnce::call_once{{vtable.shim}}
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:250:5
22: as core::ops::function::FnOnce>::call_once
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/boxed.rs:2015:9
as core::ops::function::FnOnce>::call_once
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/boxed.rs:2015:9
std::sys::unix::thread::Thread::new::thread_start
at root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/unix/thread.rs:108:17
23: start_thread
24: __clone

```
### 4. What is your TiDB version? (Required)

```
Release Version: v8.5.3
Edition: Community
Git Commit Hash: dc2548aac79a712265e831cff2a3a896bc0a5a38
Git Branch: HEAD
UTC Build Time: 2025-07-31 13:54:43
GoVersion: go1.23.8
Race Enabled: false
Check Table Before Drop: false
Store: tikv
```

Contributor guide

Open the contributing guide

Research direction

Reproduce the SQL statement against TiDB, then start in components/tidb_query_expr/src/impl_arithmetic.rs at line 11 and trace the expression evaluation path through the stack trace. Done means evaluating c1 % -1 for INT64_MIN no longer panics and the query returns normally.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust, sql
Domain
databases
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.