]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
crimson/os/seastore: handle enoent in SeaStore::Shard::stat 68333/head
authorLumir Sliva <61183145+lumir-sliva@users.noreply.github.com>
Sat, 11 Apr 2026 21:18:45 +0000 (23:18 +0200)
committerLumir Sliva <61183145+lumir-sliva@users.noreply.github.com>
Tue, 5 May 2026 11:23:04 +0000 (13:23 +0200)
commit96f280b652fbede5b28a28ee65b91fac449216c2
treee4f03d5bb088bd92d8a7565e03167c23309ddb71
parentdacf8cbc90fe02291b5133aaf3a9874ca02e1dc4
crimson/os/seastore: handle enoent in SeaStore::Shard::stat

stat() aborts via assert_all when get_onode() returns ENOENT for a
non-existent object. But get_onode() explicitly declares enoent as a
valid error (onode_manager.h:36-40), and replicated_recovery_backend
calls stat() during push-based recovery on objects that haven't been
pulled yet.

Handle enoent by returning an empty struct stat — same pattern as
exists() (line 1207) and the !store_active early return (line 1384).
The recovery code in replicated_recovery_backend.cc:831-840 already
handles st_size=0 correctly.

Add a unit test that stats a non-existent object to verify it returns
an empty struct instead of aborting.

Fixes: https://tracker.ceph.com/issues/75814
Signed-off-by: Lumir Sliva <61183145+lumir-sliva@users.noreply.github.com>
src/crimson/os/seastore/seastore.cc
src/test/crimson/seastore/test_seastore.cc