From: jagombar <48735467+jagombar@users.noreply.github.com> Date: Tue, 30 Jan 2024 18:25:53 +0000 (+0000) Subject: librbd: return ENOENT from Snapshot::get_timestamp for nonexistent snap_id X-Git-Tag: v18.2.4~276^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=72c2dc3162e4f6668c592cb2eef8f82e3c8ee290;p=ceph.git librbd: return ENOENT from Snapshot::get_timestamp for nonexistent snap_id Fixes: https://tracker.ceph.com/issues/47287 Signed-off-by: John Agombar (cherry picked from commit 2a2d3d4c6b38a917f465680e9321e810426555ea) --- diff --git a/src/librbd/api/Snapshot.cc b/src/librbd/api/Snapshot.cc index 03cefbd1c0a05..306ddb593da8b 100644 --- a/src/librbd/api/Snapshot.cc +++ b/src/librbd/api/Snapshot.cc @@ -378,7 +378,9 @@ int Snapshot::remove(I *ictx, const char *snap_name, uint32_t flags, template int Snapshot::get_timestamp(I *ictx, uint64_t snap_id, struct timespec *timestamp) { auto snap_it = ictx->snap_info.find(snap_id); - ceph_assert(snap_it != ictx->snap_info.end()); + if (snap_it == ictx->snap_info.end()) { + return -ENOENT; + } utime_t time = snap_it->second.timestamp; time.to_timespec(timestamp); return 0; diff --git a/src/test/librbd/test_librbd.cc b/src/test/librbd/test_librbd.cc index 3ff284c3d47ea..c520720c42b25 100644 --- a/src/test/librbd/test_librbd.cc +++ b/src/test/librbd/test_librbd.cc @@ -1902,6 +1902,8 @@ TEST_F(TestLibRBD, TestGetSnapShotTimeStamp) ASSERT_EQ(0, create_image(ioctx, name.c_str(), size, &order)); ASSERT_EQ(0, rbd_open(ioctx, name.c_str(), &image, NULL)); + ASSERT_EQ(-ENOENT, rbd_snap_get_timestamp(image, 0, NULL)); + ASSERT_EQ(0, rbd_snap_create(image, "snap1")); num_snaps = rbd_snap_list(image, snaps, &max_size); ASSERT_EQ(1, num_snaps);