From c554fd9f4590f6bd6146bd3d4e75e4f0dc90133d Mon Sep 17 00:00:00 2001 From: jagombar <48735467+jagombar@users.noreply.github.com> Date: Tue, 30 Jan 2024 18:25:53 +0000 Subject: [PATCH] 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) --- src/librbd/api/Snapshot.cc | 4 +++- src/test/librbd/test_librbd.cc | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/librbd/api/Snapshot.cc b/src/librbd/api/Snapshot.cc index c175808bdc240..2eceb2a02c16a 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 8bf247b5b1cc5..8cbac383276c0 100644 --- a/src/test/librbd/test_librbd.cc +++ b/src/test/librbd/test_librbd.cc @@ -1894,6 +1894,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); -- 2.39.5