Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

[Bug] BE division-by-zero error occurs when calculating inode_percentage

オープン 初心者向け
#65,545 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@uchenily がすでに取り組んでいます。

2026年7月24日 から。

  • #65979 @uchenily による — オープン

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
68/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
静か
技術スタック
cpp
領域
backend

調査の方向性

be/src/io/cache/block_file_cache.cpp の doris::io::disk_used_percentage から開始し、特に 1822 行目と、その呼び出し元である BlockFileCache::check_disk_resource_limit を確認してください。inode 数を 0 と報告するファイルシステムに対する f_files と f_ffree の処理を再現または調査してください。その環境でバックグラウンドモニターがゼロ除算エラーを発生させなくなれば完了です。

索引モデルが issue の本文から書いたものです。

説明

Search before asking
  • I had searched in the issues and found no similar issues.
Version

4.1 7126cf65d96ebc43fce0906f51e92c1a2ccf24a6 cloud version

What's Wrong?

In some environment, the inode statistics f_files/f_ffree are 0, which causes a BE division-by-zero error.

inode_total = stat.f_files = 0
inode_free = stat.f_ffree = 0

Thread 185 "run_background_" received signal SIGFPE, Arithmetic exception.
0x000055556bce32e8 in doris::io::disk_used_percentage (path=..., percent=0x7fff109ead50) at /home/chen/Programming/doris-4.1/be/src/io/cache/block_file_cache.cpp:1822
1822	    int inode_percentage = cast_set<int>(inode_free * 100 / inode_total);
(gdb) bt
#0  0x000055556bce32e8 in doris::io::disk_used_percentage (path=..., percent=0x7fff109ead50) at /home/chen/Programming/doris-4.1/be/src/io/cache/block_file_cache.cpp:1822
#1  0x000055556bce422a in doris::io::BlockFileCache::check_disk_resource_limit (this=0x7fff151c6000) at /home/chen/Programming/doris-4.1/be/src/io/cache/block_file_cache.cpp:1901
#2  0x000055556bce564d in doris::io::BlockFileCache::run_background_monitor (this=0x7fff151c6000) at /home/chen/Programming/doris-4.1/be/src/io/cache/block_file_cache.cpp:1998
#3  0x000055556bd313c3 in std::__invoke_impl<void, void (doris::io::BlockFileCache::*)(), doris::io::BlockFileCache*> (
    __f=@0x7fff14da6ff0: (void (doris::io::BlockFileCache::*)(doris::io::BlockFileCache * const)) 0x55556bce54b4 <doris::io::BlockFileCache::run_background_monitor()>, __t=@0x7fff14da6fe8: 0x7fff151c6000)
    at /home/chen/Programming/doris-4.1/ldb_toolchain/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/invoke.h:76
#4  0x000055556bd31228 in std::__invoke<void (doris::io::BlockFileCache::*)(), doris::io::BlockFileCache*> (
    __fn=@0x7fff14da6ff0: (void (doris::io::BlockFileCache::*)(doris::io::BlockFileCache * const)) 0x55556bce54b4 <doris::io::BlockFileCache::run_background_monitor()>)
    at /home/chen/Programming/doris-4.1/ldb_toolchain/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/invoke.h:98
#5  0x000055556bd30a99 in std::thread::_Invoker<std::tuple<void (doris::io::BlockFileCache::*)(), doris::io::BlockFileCache*> >::_M_invoke<0ul, 1ul> (this=0x7fff14da6fe8)
    at /home/chen/Programming/doris-4.1/ldb_toolchain/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_thread.h:303
#6  0x000055556bd3078c in std::thread::_Invoker<std::tuple<void (doris::io::BlockFileCache::*)(), doris::io::BlockFileCache*> >::operator() (this=0x7fff14da6fe8)
    at /home/chen/Programming/doris-4.1/ldb_toolchain/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_thread.h:310
#7  0x000055556bd30222 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (doris::io::BlockFileCache::*)(), doris::io::BlockFileCache*> > >::_M_run (this=0x7fff14da6fe0)
    at /home/chen/Programming/doris-4.1/ldb_toolchain/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_thread.h:255
#8  0x000055557c6bc014 in execute_native_thread_routine ()
#9  0x00007ffff6962d19 in start_thread () from /lib64/libc.so.6
#10 0x00007ffff69e664c in __clone3 () from /lib64/libc.so.6
(gdb) p stat
$5 = {f_type = 2435016766, f_bsize = 4096, f_blocks = 124348672, f_bfree = 83618897, f_bavail = 83530293, f_files = 0, f_ffree = 0, f_fsid = {__val = {-1491911987, -353343286}}, f_namelen = 255, f_frsize = 4096, 
  f_flags = 4128, f_spare = {0, 0, 0, 0}}
(gdb) p inode_free
$6 = 0
(gdb) p inode_total
$7 = 0

file system infos:

$ df -T /home/chen/Programming/doris-4.1/output/be/file_cache
文件系统       类型     1K的块      已用      可用 已用% 挂载点
/dev/nvme0n1p3 btrfs 497394688 163018220 334023188   33% /home
What You Expected?

not coredump

How to Reproduce?

No response

Anything Else?

No response

Are you willing to submit PR?
  • Yes I am willing to submit a PR!
Code of Conduct
主要言語
Java
スター
16.1k
フォーク
4k
平均マージ
2日 23時間
マージ済み PR(30日)
686

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

apache/doris のほかの issue

apache/doris の issue をすべて見る

似ている issue

Java の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。