void PrepareRemoteImageRequest<I>::send() {
if (*m_state_builder != nullptr) {
(*m_state_builder)->remote_mirror_uuid = m_remote_pool_meta.mirror_uuid;
+ auto state_builder = dynamic_cast<snapshot::StateBuilder<I>*>(*m_state_builder);
+ if (state_builder) {
+ state_builder->remote_mirror_peer_uuid = m_remote_pool_meta.mirror_peer_uuid;
+ }
}
get_remote_image_id();
<< "remote_image_id=" << m_remote_image_id << dendl;
if (r == -ENOENT) {
- finalize_snapshot_state_builder(r);
finish(r);
return;
} else if (r < 0) {
if (r == -ENOENT) {
dout(10) << "image " << m_global_image_id << " not mirrored" << dendl;
- finalize_snapshot_state_builder(r);
finish(r);
return;
} else if (r < 0) {
get_client();
break;
case cls::rbd::MIRROR_IMAGE_MODE_SNAPSHOT:
- finalize_snapshot_state_builder(0);
+ finalize_snapshot_state_builder();
finish(0);
break;
default:
}
template <typename I>
-void PrepareRemoteImageRequest<I>::finalize_snapshot_state_builder(int r) {
+void PrepareRemoteImageRequest<I>::finalize_snapshot_state_builder() {
snapshot::StateBuilder<I>* state_builder = nullptr;
if (*m_state_builder != nullptr) {
state_builder = dynamic_cast<snapshot::StateBuilder<I>*>(*m_state_builder);
- } else if (r >= 0) {
+ ceph_assert(state_builder != nullptr);
+ } else {
state_builder = snapshot::StateBuilder<I>::create(m_global_image_id);
*m_state_builder = state_builder;
}
- if (state_builder == nullptr) {
- // local image prepare failed or is using journal-based mirroring
- return;
- }
-
dout(10) << "remote_mirror_uuid=" << m_remote_pool_meta.mirror_uuid << ", "
<< "remote_mirror_peer_uuid="
<< m_remote_pool_meta.mirror_peer_uuid << ", "
<< "remote_image_id=" << m_remote_image_id << ", "
<< "remote_promotion_state=" << m_promotion_state << dendl;
- ceph_assert(state_builder != nullptr);
state_builder->remote_mirror_uuid = m_remote_pool_meta.mirror_uuid;
state_builder->remote_mirror_peer_uuid = m_remote_pool_meta.mirror_peer_uuid;
state_builder->remote_image_id = m_remote_image_id;