EXPECT_CALL(mock_image_replayer, start(nullptr, false));
instance_replayer.acquire_image(&mock_instance_watcher, global_image_id,
- "remote_mirror_uuid", "remote_image_id",
&on_acquire);
ASSERT_EQ(0, on_acquire.wait());
.WillOnce(Return(true));
EXPECT_CALL(mock_image_replayer, destroy());
- instance_replayer.release_image("global_image_id", "remote_mirror_uuid",
- "remote_image_id", false, &on_release);
+ instance_replayer.release_image("global_image_id", &on_release);
ASSERT_EQ(0, on_release.wait());
instance_replayer.shut_down();
template <>
struct InstanceReplayer<librbd::MockTestImageCtx> {
- MOCK_METHOD5(acquire_image, void(InstanceWatcher<librbd::MockTestImageCtx> *,
- const std::string &, const std::string &,
+ MOCK_METHOD3(acquire_image, void(InstanceWatcher<librbd::MockTestImageCtx> *,
const std::string &, Context *));
- MOCK_METHOD5(release_image, void(const std::string &, const std::string &,
- const std::string &, bool, Context *));
+ MOCK_METHOD2(release_image, void(const std::string &, Context *));
MOCK_METHOD3(remove_peer_image, void(const std::string&, const std::string&,
Context *));
};
// Acquire Image on the the same instance
EXPECT_CALL(mock_instance_replayer1, acquire_image(instance_watcher1, "gid",
- "uuid", "id", _))
- .WillOnce(WithArg<4>(CompleteContext(0)));
+ _))
+ .WillOnce(WithArg<2>(CompleteContext(0)));
C_SaferCond on_acquire1;
- instance_watcher1->notify_image_acquire(instance_id1, "gid", "uuid", "id",
- &on_acquire1);
+ instance_watcher1->notify_image_acquire(instance_id1, "gid", &on_acquire1);
ASSERT_EQ(0, on_acquire1.wait());
// Acquire Image on the other instance
EXPECT_CALL(mock_instance_replayer2, acquire_image(instance_watcher2, "gid",
- "uuid", "id", _))
- .WillOnce(WithArg<4>(CompleteContext(0)));
+ _))
+ .WillOnce(WithArg<2>(CompleteContext(0)));
C_SaferCond on_acquire2;
- instance_watcher1->notify_image_acquire(instance_id2, "gid", "uuid", "id",
- &on_acquire2);
+ instance_watcher1->notify_image_acquire(instance_id2, "gid", &on_acquire2);
ASSERT_EQ(0, on_acquire2.wait());
// Release Image on the the same instance
- EXPECT_CALL(mock_instance_replayer1, release_image("gid", "uuid", "id", true,
- _))
- .WillOnce(WithArg<4>(CompleteContext(0)));
+ EXPECT_CALL(mock_instance_replayer1, release_image("gid", _))
+ .WillOnce(WithArg<1>(CompleteContext(0)));
C_SaferCond on_release1;
- instance_watcher1->notify_image_release(instance_id1, "gid", "uuid", "id",
- true, &on_release1);
+ instance_watcher1->notify_image_release(instance_id1, "gid", &on_release1);
ASSERT_EQ(0, on_release1.wait());
// Release Image on the other instance
- EXPECT_CALL(mock_instance_replayer2, release_image("gid", "uuid", "id", true,
- _))
- .WillOnce(WithArg<4>(CompleteContext(0)));
+ EXPECT_CALL(mock_instance_replayer2, release_image("gid", _))
+ .WillOnce(WithArg<1>(CompleteContext(0)));
C_SaferCond on_release2;
- instance_watcher1->notify_image_release(instance_id2, "gid", "uuid", "id",
- true, &on_release2);
+ instance_watcher1->notify_image_release(instance_id2, "gid", &on_release2);
ASSERT_EQ(0, on_release2.wait());
// Shutdown instance watcher 1
}));
C_SaferCond on_acquire;
- instance_watcher->notify_image_acquire("other", "gid", "uuid", "id",
- &on_acquire);
+ instance_watcher->notify_image_acquire("other", "gid", &on_acquire);
ASSERT_EQ(-ECANCELED, on_acquire.wait());
// Send Release Image and cancel
}));
C_SaferCond on_release;
- instance_watcher->notify_image_release("other", "gid", "uuid", "id",
- true, &on_release);
+ instance_watcher->notify_image_release("other", "gid", &on_release);
ASSERT_EQ(-ECANCELED, on_release.wait());
// Shutdown
template <typename I>
void InstanceReplayer<I>::acquire_image(InstanceWatcher<I> *instance_watcher,
const std::string &global_image_id,
- const std::string &peer_mirror_uuid,
- const std::string &peer_image_id,
Context *on_finish) {
- dout(20) << "global_image_id=" << global_image_id << ", peer_mirror_uuid="
- << peer_mirror_uuid << ", peer_image_id=" << peer_image_id << dendl;
+ dout(20) << "global_image_id=" << global_image_id << dendl;
Mutex::Locker locker(m_lock);
template <typename I>
void InstanceReplayer<I>::release_image(const std::string &global_image_id,
- const std::string &peer_mirror_uuid,
- const std::string &peer_image_id,
- bool schedule_delete,
Context *on_finish) {
- dout(20) << "global_image_id=" << global_image_id << ", peer_mirror_uuid="
- << peer_mirror_uuid << ", peer_image_id=" << peer_image_id << dendl;
+ dout(20) << "global_image_id=" << global_image_id << dendl;
Mutex::Locker locker(m_lock);
-
assert(m_on_shut_down == nullptr);
auto it = m_image_replayers.find(global_image_id);
void add_peer(std::string peer_uuid, librados::IoCtx io_ctx);
void acquire_image(InstanceWatcher<ImageCtxT> *instance_watcher,
- const std::string &global_image_id,
- const std::string &peer_mirror_uuid,
- const std::string &peer_image_id,
- Context *on_finish);
- void release_image(const std::string &global_image_id,
- const std::string &peer_mirror_uuid,
- const std::string &peer_image_id,
- bool schedule_delete, Context *on_finish);
+ const std::string &global_image_id, Context *on_finish);
+ void release_image(const std::string &global_image_id, Context *on_finish);
void remove_peer_image(const std::string &global_image_id,
const std::string &peer_mirror_uuid,
Context *on_finish);
template <typename I>
void InstanceWatcher<I>::notify_image_acquire(
const std::string &instance_id, const std::string &global_image_id,
- const std::string &peer_mirror_uuid, const std::string &peer_image_id,
- Context *on_notify_ack) {
+ Context *on_notify_ack) {
dout(20) << "instance_id=" << instance_id << ", global_image_id="
<< global_image_id << dendl;
assert(m_on_finish == nullptr);
if (instance_id == m_instance_id) {
- handle_image_acquire(global_image_id, peer_mirror_uuid, peer_image_id,
- on_notify_ack);
+ handle_image_acquire(global_image_id, on_notify_ack);
} else {
uint64_t request_id = ++m_request_seq;
bufferlist bl;
- ::encode(NotifyMessage{ImageAcquirePayload{
- request_id, global_image_id, peer_mirror_uuid, peer_image_id}}, bl);
+ ::encode(NotifyMessage{ImageAcquirePayload{request_id, global_image_id}},
+ bl);
auto req = new C_NotifyInstanceRequest(this, instance_id, request_id,
std::move(bl), on_notify_ack);
req->send();
template <typename I>
void InstanceWatcher<I>::notify_image_release(
- const std::string &instance_id, const std::string &global_image_id,
- const std::string &peer_mirror_uuid, const std::string &peer_image_id,
- bool schedule_delete, Context *on_notify_ack) {
+ const std::string &instance_id, const std::string &global_image_id,
+ Context *on_notify_ack) {
dout(20) << "instance_id=" << instance_id << ", global_image_id="
<< global_image_id << dendl;
assert(m_on_finish == nullptr);
if (instance_id == m_instance_id) {
- handle_image_release(global_image_id, peer_mirror_uuid, peer_image_id,
- schedule_delete, on_notify_ack);
+ handle_image_release(global_image_id, on_notify_ack);
} else {
uint64_t request_id = ++m_request_seq;
bufferlist bl;
- ::encode(NotifyMessage{ImageReleasePayload{
- request_id, global_image_id, peer_mirror_uuid, peer_image_id,
- schedule_delete}}, bl);
+ ::encode(NotifyMessage{ImageReleasePayload{request_id, global_image_id}},
+ bl);
auto req = new C_NotifyInstanceRequest(this, instance_id, request_id,
std::move(bl), on_notify_ack);
req->send();
template <typename I>
void InstanceWatcher<I>::handle_image_acquire(
- const std::string &global_image_id, const std::string &peer_mirror_uuid,
- const std::string &peer_image_id, Context *on_finish) {
+ const std::string &global_image_id, Context *on_finish) {
dout(20) << "global_image_id=" << global_image_id << dendl;
auto ctx = new FunctionContext(
- [this, global_image_id, peer_mirror_uuid, peer_image_id,
- on_finish] (int r) {
- m_instance_replayer->acquire_image(this, global_image_id,
- peer_mirror_uuid, peer_image_id,
- on_finish);
+ [this, global_image_id, on_finish] (int r) {
+ m_instance_replayer->acquire_image(this, global_image_id, on_finish);
m_notify_op_tracker.finish_op();
});
template <typename I>
void InstanceWatcher<I>::handle_image_release(
- const std::string &global_image_id, const std::string &peer_mirror_uuid,
- const std::string &peer_image_id, bool schedule_delete, Context *on_finish) {
+ const std::string &global_image_id, Context *on_finish) {
dout(20) << "global_image_id=" << global_image_id << dendl;
auto ctx = new FunctionContext(
- [this, global_image_id, peer_mirror_uuid, peer_image_id, schedule_delete,
- on_finish] (int r) {
- m_instance_replayer->release_image(global_image_id, peer_mirror_uuid,
- peer_image_id, schedule_delete,
- on_finish);
+ [this, global_image_id, on_finish] (int r) {
+ m_instance_replayer->release_image(global_image_id, on_finish);
m_notify_op_tracker.finish_op();
});
auto on_finish = prepare_request(instance_id, payload.request_id,
on_notify_ack);
if (on_finish != nullptr) {
- handle_image_acquire(payload.global_image_id, payload.peer_mirror_uuid,
- payload.peer_image_id, on_finish);
+ handle_image_acquire(payload.global_image_id, on_finish);
}
}
auto on_finish = prepare_request(instance_id, payload.request_id,
on_notify_ack);
if (on_finish != nullptr) {
- handle_image_release(payload.global_image_id, payload.peer_mirror_uuid,
- payload.peer_image_id, payload.schedule_delete,
- on_finish);
+ handle_image_release(payload.global_image_id, on_finish);
}
}
void notify_image_acquire(const std::string &instance_id,
const std::string &global_image_id,
- const std::string &peer_mirror_uuid,
- const std::string &peer_image_id,
Context *on_notify_ack);
void notify_image_release(const std::string &instance_id,
const std::string &global_image_id,
- const std::string &peer_mirror_uuid,
- const std::string &peer_image_id,
- bool schedule_delete, Context *on_notify_ack);
+ Context *on_notify_ack);
void notify_peer_image_removed(const std::string &instance_id,
const std::string &global_image_id,
const std::string &peer_mirror_uuid,
uint64_t notifier_id, bufferlist &bl) override;
void handle_image_acquire(const std::string &global_image_id,
- const std::string &peer_mirror_uuid,
- const std::string &peer_image_id,
Context *on_finish);
void handle_image_release(const std::string &global_image_id,
- const std::string &peer_mirror_uuid,
- const std::string &peer_image_id,
- bool schedule_delete, Context *on_finish);
+ Context *on_finish);
void handle_peer_image_removed(const std::string &global_image_id,
const std::string &peer_mirror_uuid,
Context *on_finish);
// for now always send to myself (the leader)
std::string &instance_id = m_instance_watcher->get_instance_id();
m_instance_watcher->notify_image_acquire(instance_id, image_id.global_id,
- mirror_uuid, image_id.id,
gather_ctx->new_sub());
}
void ImagePayloadBase::encode(bufferlist &bl) const {
PayloadBase::encode(bl);
::encode(global_image_id, bl);
- ::encode(peer_mirror_uuid, bl);
- ::encode(peer_image_id, bl);
}
void ImagePayloadBase::decode(__u8 version, bufferlist::iterator &iter) {
PayloadBase::decode(version, iter);
::decode(global_image_id, iter);
- ::decode(peer_mirror_uuid, iter);
- ::decode(peer_image_id, iter);
}
void ImagePayloadBase::dump(Formatter *f) const {
PayloadBase::dump(f);
f->dump_string("global_image_id", global_image_id);
- f->dump_string("peer_mirror_uuid", peer_mirror_uuid);
- f->dump_string("peer_image_id", peer_image_id);
-}
-
-void ImageReleasePayload::encode(bufferlist &bl) const {
- ImagePayloadBase::encode(bl);
- ::encode(schedule_delete, bl);
-}
-
-void ImageReleasePayload::decode(__u8 version, bufferlist::iterator &iter) {
- ImagePayloadBase::decode(version, iter);
- ::decode(schedule_delete, iter);
-}
-
-void ImageReleasePayload::dump(Formatter *f) const {
- ImagePayloadBase::dump(f);
- f->dump_bool("schedule_delete", schedule_delete);
}
void PeerImageRemovedPayload::encode(bufferlist &bl) const {
void NotifyMessage::generate_test_instances(std::list<NotifyMessage *> &o) {
o.push_back(new NotifyMessage(ImageAcquirePayload()));
- o.push_back(new NotifyMessage(ImageAcquirePayload(1, "gid", "uuid", "id")));
+ o.push_back(new NotifyMessage(ImageAcquirePayload(1, "gid")));
o.push_back(new NotifyMessage(ImageReleasePayload()));
- o.push_back(new NotifyMessage(ImageReleasePayload(1, "gid", "uuid", "id",
- true)));
+ o.push_back(new NotifyMessage(ImageReleasePayload(1, "gid")));
o.push_back(new NotifyMessage(PeerImageRemovedPayload()));
o.push_back(new NotifyMessage(PeerImageRemovedPayload(1, "gid", "uuid")));
struct ImagePayloadBase : public PayloadBase {
std::string global_image_id;
- std::string peer_mirror_uuid;
- std::string peer_image_id;
ImagePayloadBase() : PayloadBase() {
}
- ImagePayloadBase(uint64_t request_id, const std::string &global_image_id,
- const std::string &peer_mirror_uuid,
- const std::string &peer_image_id)
- : PayloadBase(request_id), global_image_id(global_image_id),
- peer_mirror_uuid(peer_mirror_uuid), peer_image_id(peer_image_id) {
+ ImagePayloadBase(uint64_t request_id, const std::string &global_image_id)
+ : PayloadBase(request_id), global_image_id(global_image_id) {
}
void encode(bufferlist &bl) const;
struct ImageAcquirePayload : public ImagePayloadBase {
static const NotifyOp NOTIFY_OP = NOTIFY_OP_IMAGE_ACQUIRE;
- ImageAcquirePayload() : ImagePayloadBase() {
+ ImageAcquirePayload() {
}
-
- ImageAcquirePayload(uint64_t request_id, const std::string &global_image_id,
- const std::string &peer_mirror_uuid,
- const std::string &peer_image_id)
- : ImagePayloadBase(request_id, global_image_id, peer_mirror_uuid,
- peer_image_id) {
+ ImageAcquirePayload(uint64_t request_id, const std::string &global_image_id)
+ : ImagePayloadBase(request_id, global_image_id) {
}
};
struct ImageReleasePayload : public ImagePayloadBase {
static const NotifyOp NOTIFY_OP = NOTIFY_OP_IMAGE_RELEASE;
- bool schedule_delete;
-
- ImageReleasePayload() : ImagePayloadBase(), schedule_delete(false) {
+ ImageReleasePayload() {
}
-
- ImageReleasePayload(uint64_t request_id, const std::string &global_image_id,
- const std::string &peer_mirror_uuid,
- const std::string &peer_image_id, bool schedule_delete)
- : ImagePayloadBase(request_id, global_image_id, peer_mirror_uuid,
- peer_image_id),
- schedule_delete(schedule_delete) {
+ ImageReleasePayload(uint64_t request_id, const std::string &global_image_id)
+ : ImagePayloadBase(request_id, global_image_id) {
}
-
- void encode(bufferlist &bl) const;
- void decode(__u8 version, bufferlist::iterator &iter);
- void dump(Formatter *f) const;
};
struct PeerImageRemovedPayload : public PayloadBase {