void ExclusiveLock<I>::assert_header_locked(librados::ObjectWriteOperation *op) {
Mutex::Locker locker(m_lock);
rados::cls::lock::assert_locked(op, RBD_LOCK_NAME, LOCK_EXCLUSIVE,
- encode_lock_cookie(), WATCHER_LOCK_TAG);
+ m_cookie, WATCHER_LOCK_TAG);
}
template <typename I>
return;
}
+ m_cookie = encode_lock_cookie();
+
using el = ExclusiveLock<I>;
AcquireRequest<I>* req = AcquireRequest<I>::create(
- m_image_ctx, encode_lock_cookie(),
+ m_image_ctx, m_cookie,
util::create_context_callback<el, &el::handle_acquiring_lock>(this),
util::create_context_callback<el, &el::handle_acquire_lock>(this));
using el = ExclusiveLock<I>;
ReleaseRequest<I>* req = ReleaseRequest<I>::create(
- m_image_ctx, encode_lock_cookie(),
+ m_image_ctx, m_cookie,
util::create_context_callback<el, &el::handle_releasing_lock>(this),
util::create_context_callback<el, &el::handle_release_lock>(this));
lock_request_needed = m_image_ctx.aio_work_queue->is_lock_request_needed();
m_lock.Lock();
+ m_cookie = "";
m_watch_handle = 0;
}
complete_active_action(r < 0 ? STATE_LOCKED : STATE_UNLOCKED, r);
std::string cookie;
{
Mutex::Locker locker(m_lock);
- cookie = encode_lock_cookie();
+ cookie = m_cookie;
}
using el = ExclusiveLock<I>;
#include <arpa/inet.h>
#include <list>
-namespace librbd {
-namespace {
-
-struct MockTestImageCtx : public librbd::MockImageCtx {
- MockTestImageCtx(librbd::ImageCtx &image_ctx)
- : librbd::MockImageCtx(image_ctx) {
- }
-};
-
-} // anonymous namespace
-} // namespace librbd
-
// template definitions
#include "librbd/exclusive_lock/ReacquireRequest.cc"
+template class librbd::exclusive_lock::ReacquireRequest<librbd::MockImageCtx>;
namespace librbd {
namespace exclusive_lock {
class TestMockExclusiveLockReacquireRequest : public TestMockFixture {
public:
- typedef ReacquireRequest<MockTestImageCtx> MockReacquireRequest;
- typedef ExclusiveLock<MockTestImageCtx> MockExclusiveLock;
+ typedef ReacquireRequest<MockImageCtx> MockReacquireRequest;
+ typedef ExclusiveLock<MockImageCtx> MockExclusiveLock;
- void expect_set_cookie(MockTestImageCtx &mock_image_ctx, int r) {
+ void expect_set_cookie(MockImageCtx &mock_image_ctx, int r) {
EXPECT_CALL(get_mock_io_ctx(mock_image_ctx.md_ctx),
exec(mock_image_ctx.header_oid, _, StrEq("lock"),
StrEq("set_cookie"), _, _, _))
librbd::ImageCtx *ictx;
ASSERT_EQ(0, open_image(m_image_name, &ictx));
- MockTestImageCtx mock_image_ctx(*ictx);
+ MockImageCtx mock_image_ctx(*ictx);
InSequence seq;
expect_set_cookie(mock_image_ctx, 0);
librbd::ImageCtx *ictx;
ASSERT_EQ(0, open_image(m_image_name, &ictx));
- MockTestImageCtx mock_image_ctx(*ictx);
+ MockImageCtx mock_image_ctx(*ictx);
InSequence seq;
expect_set_cookie(mock_image_ctx, -EOPNOTSUPP);
librbd::ImageCtx *ictx;
ASSERT_EQ(0, open_image(m_image_name, &ictx));
- MockTestImageCtx mock_image_ctx(*ictx);
+ MockImageCtx mock_image_ctx(*ictx);
InSequence seq;
expect_set_cookie(mock_image_ctx, -EBUSY);