class TestMockObjectMapSnapshotCreateRequest : public TestMockFixture {
public:
void inject_snap_info(librbd::ImageCtx *ictx, uint64_t snap_id) {
- RWLock::WLocker snap_locker(ictx->snap_lock);
- RWLock::RLocker parent_locker(ictx->parent_lock);
+ std::unique_lock image_locker{ictx->image_lock};
ictx->add_snap(cls::rbd::UserSnapshotNamespace(), "snap name", snap_id,
ictx->size, ictx->parent_md,
RBD_PROTECTION_STATUS_UNPROTECTED, 0, utime_t());
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, acquire_exclusive_lock(*ictx));
+ ceph::shared_mutex object_map_lock = ceph::make_shared_mutex("lock");
ceph::BitVector<2> object_map;
uint64_t snap_id = 1;
C_SaferCond cond_ctx;
AsyncRequest<> *request = new SnapshotCreateRequest(
- *ictx, &object_map, snap_id, &cond_ctx);
+ *ictx, &object_map_lock, &object_map, snap_id, &cond_ctx);
{
- RWLock::RLocker snap_locker(ictx->snap_lock);
+ std::shared_lock image_locker{ictx->image_lock};
request->send();
}
ASSERT_EQ(0, cond_ctx.wait());
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, acquire_exclusive_lock(*ictx));
+ ceph::shared_mutex object_map_lock = ceph::make_shared_mutex("lock");
ceph::BitVector<2> object_map;
uint64_t snap_id = 1;
C_SaferCond cond_ctx;
AsyncRequest<> *request = new SnapshotCreateRequest(
- *ictx, &object_map, snap_id, &cond_ctx);
+ *ictx, &object_map_lock, &object_map, snap_id, &cond_ctx);
{
- RWLock::RLocker snap_locker(ictx->snap_lock);
+ std::shared_lock image_locker{ictx->image_lock};
request->send();
}
ASSERT_EQ(0, cond_ctx.wait());
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, acquire_exclusive_lock(*ictx));
+ ceph::shared_mutex object_map_lock = ceph::make_shared_mutex("lock");
ceph::BitVector<2> object_map;
uint64_t snap_id = 1;
C_SaferCond cond_ctx;
AsyncRequest<> *request = new SnapshotCreateRequest(
- *ictx, &object_map, snap_id, &cond_ctx);
+ *ictx, &object_map_lock, &object_map, snap_id, &cond_ctx);
{
- RWLock::RLocker snap_locker(ictx->snap_lock);
+ std::shared_lock image_locker{ictx->image_lock};
request->send();
}
ASSERT_EQ(0, cond_ctx.wait());
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, acquire_exclusive_lock(*ictx));
+ ceph::shared_mutex object_map_lock = ceph::make_shared_mutex("lock");
ceph::BitVector<2> object_map;
uint64_t snap_id = 1;
C_SaferCond cond_ctx;
AsyncRequest<> *request = new SnapshotCreateRequest(
- *ictx, &object_map, snap_id, &cond_ctx);
+ *ictx, &object_map_lock, &object_map, snap_id, &cond_ctx);
{
- RWLock::RLocker snap_locker(ictx->snap_lock);
+ std::shared_lock image_locker{ictx->image_lock};
request->send();
}
ASSERT_EQ(0, cond_ctx.wait());
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, acquire_exclusive_lock(*ictx));
+ ceph::shared_mutex object_map_lock = ceph::make_shared_mutex("lock");
ceph::BitVector<2> object_map;
object_map.resize(1024);
for (uint64_t i = 0; i < object_map.size(); ++i) {
C_SaferCond cond_ctx;
AsyncRequest<> *request = new SnapshotCreateRequest(
- *ictx, &object_map, snap_id, &cond_ctx);
+ *ictx, &object_map_lock, &object_map, snap_id, &cond_ctx);
{
- RWLock::RLocker snap_locker(ictx->snap_lock);
+ std::shared_lock image_locker{ictx->image_lock};
request->send();
}
ASSERT_EQ(0, cond_ctx.wait());