TiKV crashes with overflow on BIGINT_MIN % -1 while TiFlash returns empty set
- Dominant language
- Go
- Stars
- 40.5k
- Forks
- 6.2k
- PR merge metrics
- PR metrics pending
Description
## Bug Report
### 1. Minimal reproduce step (Required)
```
DROP TABLE IF EXISTS t0;
CREATE TABLE t0(c0 BIGINT);
ALTER TABLE t0 SET TIFLASH REPLICA 1;
INSERT INTO t0 VALUES (-9223372036854775808);
SELECT /*+ read_from_storage(tiflash[t0]) */ true FROM t0 WHERE (t0.c0 %-1);
SELECT /*+ read_from_storage(tikv[t0]) */ true FROM t0 WHERE (t0.c0 %-1);
```
### 2. What did you expect to see? (Required)
The same query returns the same results on both TiKV and TiFlash.
### 3. What did you see instead (Required)
```
mysql> SELECT /*+ read_from_storage(tiflash[t0]) */ true FROM t0 WHERE (t0.c0 %-1);
Empty set (0.21 sec)
mysql> SELECT /*+ read_from_storage(tikv[t0]) */ true FROM t0 WHERE (t0.c0 %-1);
ERROR 9005 (HY000): Region is unavailable
```
TiKV detail log
```
[2025/06/04 22:00:02.288 +08:00] [FATAL] [lib.rs:480] ["attempt to calculate the remainder with overflow"] [backtrace=" 0: tikv_util::set_panic_hook::{{closure}}\n at /workspace/source/tikv/components/tikv_util/src/lib.rs:479:18\n 1: as core::ops::function::Fn>::call\n at /root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/boxed.rs:2029:9\n std::panicking::rust_panic_with_hook\n at /root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:783:13\n 2: std::panicking::begin_panic_handler::{{closure}}\n at /root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:649:13\n 3: std::sys_common::backtrace::__rust_end_short_backtrace\n 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\n 4: rust_begin_unwind\n at /root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:645:5\n 5: core::panicking::panic_fmt\n at /root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/panicking.rs:72:14\n 6: core::panicking::panic\n at /root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/panicking.rs:144:5\n 7: > as tidb_query_expr::impl_arithmetic::Arithmetic_Fn>::eval\n at /workspace/source/tikv/components/tidb_query_expr/src/impl_arithmetic.rs:11:1\n as tidb_query_expr::types::function::Evaluator>::eval\n at /workspace/source/tikv/components/tidb_query_expr/src/impl_arithmetic.rs:11:1\n as tidb_query_expr::types::function::Evaluator>::eval\n at /workspace/source/tikv/components/tidb_query_expr/src/types/function.rs:261:17\n as tidb_query_expr::types::function::Evaluator>::eval\n at /workspace/source/tikv/components/tidb_query_expr/src/types/function.rs:245:17\n tidb_query_expr::impl_arithmetic::arithmetic_fn_meta::run\n at /workspace/source/tikv/components/tidb_query_expr/src/impl_arithmetic.rs:11:1\n 8: tidb_query_expr::types::expr_eval::::eval_decoded\n at /workspace/source/tikv/components/tidb_query_expr/src/types/expr_eval.rs:308:31\n 9: tidb_query_expr::types::expr_eval::::eval\n at /workspace/source/tikv/components/tidb_query_expr/src/types/expr_eval.rs:218:9\n tidb_query_executors::selection_executor::BatchSelectionExecutor::handle_src_result\n at /workspace/source/tikv/components/tidb_query_executors/src/selection_executor.rs:82:19\n as tidb_query_executors::interface::BatchExecutor>::next_batch::{{closure}}\n at /workspace/source/tikv/components/tidb_query_executors/src/selection_executor.rs:182:25\n 10: as core::future::future::Future>::poll\n 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\n as tidb_query_executors::interface::BatchExecutor>::next_batch::{{closure}}\n at /workspace/source/tikv/components/tidb_query_executors/src/interface.rs:114:55\n 11: as core::future::future::Future>::poll\n 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\n as tidb_query_executors::interface::BatchExecutor>::next_batch::{{closure}}\n at /workspace/source/tikv/components/tidb_query_executors/src/interface.rs:82:40\n 12: as core::future::future::Future>::poll\n 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\n tidb_query_executors::runner::BatchExecutorsRunner::internal_handle_request::{{closure}}\n at /workspace/source/tikv/components/tidb_query_executors/src/runner.rs:655:72\n 13: as core::future::future::Future>::poll\n at /workspace/source/tikv/components/tikv_util/src/quota_limiter.rs:177:19\n tidb_query_executors::runner::BatchExecutorsRunner::handle_request::{{closure}}\n at /workspace/source/tikv/components/tidb_query_executors/src/runner.rs:519:22\n ::handle_request::{{closure}}\n at /workspace/source/tikv/src/coprocessor/dag/mod.rs:124:51\n 14: as core::future::future::Future>::poll\n 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\n as core::future::future::Future>::poll\n at /workspace/source/tikv/src/coprocessor/interceptors/deadline.rs:37:9\n as core::future::future::Future>::poll\n at /workspace/source/tikv/src/coprocessor/interceptors/tracker.rs:54:19\n 15: as core::future::future::Future>::poll\n at /workspace/source/tikv/src/coprocessor/interceptors/concurrency_limiter.rs:112:15\n tikv::coprocessor::endpoint::Endpoint::handle_unary_request_impl::{{closure}}\n at /workspace/source/tikv/src/coprocessor/endpoint.rs:484:87\n as core::future::future::Future>::poll\n at /workspace/source/tikv/components/resource_metering/src/lib.rs:274:9\n as core::future::future::Future>::poll\n at /workspace/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/futures-util-0.3.31/src/future/future/map.rs:55:37\n as core::future::future::Future>::poll\n at /workspace/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/futures-util-0.3.31/src/lib.rs:86:13\n as core::future::future::Future>::poll\n at /workspace/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/futures-util-0.3.31/src/future/future/map.rs:55:37\n as core::future::future::Future>::poll\n at /workspace/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/futures-util-0.3.31/src/lib.rs:86:13\n 16: as core::future::future::Future>::poll\n at /workspace/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/futures-util-0.3.31/src/future/future/map.rs:55:37\n as core::future::future::Future>::poll\n at /workspace/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/futures-util-0.3.31/src/lib.rs:86:13\n as core::future::future::Future>::poll\n at /workspace/source/tikv/components/resource_control/src/future.rs:48:19\n 17: resource_control::future::with_resource_limiter::{{closure}}\n at /workspace/source/tikv/components/resource_control/src/future.rs:204:11\n as core::future::future::Future>::poll::{{closure}}\n at /workspace/source/tikv/components/tracker/src/tls.rs:64:23\n std::thread::local::LocalKey::try_with\n 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\n std::thread::local::LocalKey::with\n 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\n as core::future::future::Future>::poll\n at /workspace/source/tikv/components/tracker/src/tls.rs:62:27\n yatp::task::future::RawTask::poll\n at /workspace/.cargo/git/checkouts/yatp-e704b73c3ee279b6/793be4d/src/task/future.rs:59:9\n 18: yatp::task::future::TaskCell::poll\n at /workspace/.cargo/git/checkouts/yatp-e704b73c3ee279b6/793be4d/src/task/future.rs:103:9\n ::handle\n at /workspace/.cargo/git/checkouts/yatp-e704b73c3ee279b6/793be4d/src/task/future.rs:387:20\n 19: as yatp::pool::runner::Runner>::handle\n at /workspace/source/tikv/components/tikv_util/src/yatp_pool/mod.rs:199:24\n as yatp::pool::runner::Runner>::handle\n at /workspace/.cargo/git/checkouts/yatp-e704b73c3ee279b6/793be4d/src/queue/multilevel.rs:285:19\n 20: yatp::pool::worker::WorkerThread::run\n at /workspace/.cargo/git/checkouts/yatp-e704b73c3ee279b6/793be4d/src/pool/worker.rs:48:13\n yatp::pool::builder::LazyBuilder::build::{{closure}}\n at /workspace/.cargo/git/checkouts/yatp-e704b73c3ee279b6/793be4d/src/pool/builder.rs:114:25\n std::sys_common::backtrace::__rust_begin_short_backtrace\n 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\n 21: std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}\n 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\n as core::ops::function::FnOnce<()>>::call_once\n 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\n std::panicking::try::do_call\n at /root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:552:40\n std::panicking::try\n at /root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:516:19\n std::panic::catch_unwind\n at /root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panic.rs:142:14\n std::thread::Builder::spawn_unchecked_::{{closure}}\n 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\n core::ops::function::FnOnce::call_once{{vtable.shim}}\n 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\n 22: as core::ops::function::FnOnce>::call_once\n at /root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/boxed.rs:2015:9\n as core::ops::function::FnOnce>::call_once\n at /root/.rustup/toolchains/nightly-2023-12-28-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/boxed.rs:2015:9\n std::sys::unix::thread::Thread::new::thread_start\n 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\n 23: start_thread\n at ./nptl/./nptl/pthread_create.c:447:8\n 24: __GI___clone3\n at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:78\n"] [location=components/tidb_query_expr/src/impl_arithmetic.rs:224] [thread_name=unified-read-pool-4] [thread_id=36]
```
### 4. What is your TiDB version? (Required)
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tidb_version() |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Release Version: v8.5.2
Edition: Community
Git Commit Hash: f43a13324440f92209e2a9f04c0bbe9cf763978d
Git Branch: HEAD
UTC Build Time: 2025-05-29 03:30:55
GoVersion: go1.23.8
Race Enabled: false
Check Table Before Drop: false
Store: tikv |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Contributor guide
Assessment
This issue has not been assessed yet.