From: songweibin Date: Tue, 24 Mar 2020 14:14:42 +0000 (+0800) Subject: librbd: propagate an error back when failed to invalidating X-Git-Tag: wip-pdonnell-testing-20200918.022351~600^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=a590aff0458b9e0cf7a8bc1e77b7abfe00f2a6d2;p=ceph-ci.git librbd: propagate an error back when failed to invalidating Signed-off-by: songweibin --- diff --git a/src/librbd/object_map/InvalidateRequest.h b/src/librbd/object_map/InvalidateRequest.h index 11c420372ac..ce15bb2d337 100644 --- a/src/librbd/object_map/InvalidateRequest.h +++ b/src/librbd/object_map/InvalidateRequest.h @@ -31,10 +31,6 @@ public: protected: bool should_complete(int r) override; - int filter_return_code(int r) const override{ - // never propagate an error back to the caller - return 0; - } private: uint64_t m_snap_id; diff --git a/src/librbd/object_map/Request.cc b/src/librbd/object_map/Request.cc index 6677882eae5..1e1aab2ae5c 100644 --- a/src/librbd/object_map/Request.cc +++ b/src/librbd/object_map/Request.cc @@ -55,7 +55,7 @@ bool Request::invalidate() { bool flags_set; int r = m_image_ctx.test_flags(m_snap_id, RBD_FLAG_OBJECT_MAP_INVALID, &flags_set); - if (r == 0 && flags_set) { + if (r < 0 || flags_set) { return true; } diff --git a/src/test/librbd/object_map/test_mock_InvalidateRequest.cc b/src/test/librbd/object_map/test_mock_InvalidateRequest.cc index 4867c4e2321..5ea40c03d69 100644 --- a/src/test/librbd/object_map/test_mock_InvalidateRequest.cc +++ b/src/test/librbd/object_map/test_mock_InvalidateRequest.cc @@ -33,12 +33,12 @@ TEST_F(TestMockObjectMapInvalidateRequest, UpdatesInMemoryFlag) { ASSERT_FALSE(flags_set); C_SaferCond cond_ctx; - AsyncRequest<> *request = new InvalidateRequest<>(*ictx, CEPH_NOSNAP, false, &cond_ctx); + AsyncRequest<> *request = new InvalidateRequest<>(*ictx, CEPH_NOSNAP, true, &cond_ctx); EXPECT_CALL(get_mock_io_ctx(ictx->md_ctx), exec(ictx->header_oid, _, StrEq("rbd"), StrEq("set_flags"), _, _, _, _)) - .Times(0); + .WillOnce(DoDefault()); { std::shared_lock owner_locker{ictx->owner_lock}; @@ -105,7 +105,7 @@ TEST_F(TestMockObjectMapInvalidateRequest, UpdatesSnapOnDiskFlag) { ASSERT_EQ(0, cond_ctx.wait()); } -TEST_F(TestMockObjectMapInvalidateRequest, SkipOnDiskUpdateWithoutLock) { +TEST_F(TestMockObjectMapInvalidateRequest, ErrorOnDiskUpdateWithoutLock) { REQUIRE_FEATURE(RBD_FEATURE_OBJECT_MAP); librbd::ImageCtx *ictx; @@ -124,12 +124,12 @@ TEST_F(TestMockObjectMapInvalidateRequest, SkipOnDiskUpdateWithoutLock) { std::unique_lock image_locker{ictx->image_lock}; request->send(); } - ASSERT_EQ(0, cond_ctx.wait()); + ASSERT_EQ(-EROFS, cond_ctx.wait()); expect_unlock_exclusive_lock(*ictx); } -TEST_F(TestMockObjectMapInvalidateRequest, IgnoresOnDiskUpdateFailure) { +TEST_F(TestMockObjectMapInvalidateRequest, ErrorOnDiskUpdateFailure) { REQUIRE_FEATURE(RBD_FEATURE_OBJECT_MAP); librbd::ImageCtx *ictx; @@ -149,7 +149,7 @@ TEST_F(TestMockObjectMapInvalidateRequest, IgnoresOnDiskUpdateFailure) { std::unique_lock image_locker{ictx->image_lock}; request->send(); } - ASSERT_EQ(0, cond_ctx.wait()); + ASSERT_EQ(-EINVAL, cond_ctx.wait()); expect_unlock_exclusive_lock(*ictx); } diff --git a/src/test/librbd/object_map/test_mock_SnapshotCreateRequest.cc b/src/test/librbd/object_map/test_mock_SnapshotCreateRequest.cc index ed3658c51eb..b49f7419d5d 100644 --- a/src/test/librbd/object_map/test_mock_SnapshotCreateRequest.cc +++ b/src/test/librbd/object_map/test_mock_SnapshotCreateRequest.cc @@ -134,7 +134,7 @@ TEST_F(TestMockObjectMapSnapshotCreateRequest, ReadMapError) { std::shared_lock image_locker{ictx->image_lock}; request->send(); } - ASSERT_EQ(0, cond_ctx.wait()); + ASSERT_EQ(-ENOENT, cond_ctx.wait()); expect_unlock_exclusive_lock(*ictx); } @@ -162,7 +162,7 @@ TEST_F(TestMockObjectMapSnapshotCreateRequest, WriteMapError) { std::shared_lock image_locker{ictx->image_lock}; request->send(); } - ASSERT_EQ(0, cond_ctx.wait()); + ASSERT_EQ(-ENOENT, cond_ctx.wait()); expect_unlock_exclusive_lock(*ictx); } @@ -191,7 +191,7 @@ TEST_F(TestMockObjectMapSnapshotCreateRequest, AddSnapshotError) { std::shared_lock image_locker{ictx->image_lock}; request->send(); } - ASSERT_EQ(0, cond_ctx.wait()); + ASSERT_EQ(-ENOENT, cond_ctx.wait()); expect_unlock_exclusive_lock(*ictx); }