}
m_local_group_name = remote_group_name;
- reregister_admin_socket_hook();
}
+
+ reregister_admin_socket_hook();
}
template <typename I>
}
}
- reregister_admin_socket_hook();
+ sync_group_names();
if (finish_start_if_interrupted()) {
return;
if (group_replayer->needs_restart()) {
stop_group_replayer(group_replayer, new C_TrackedOp(m_async_op_tracker,
nullptr));
- } else {
- group_replayer->sync_group_names();
}
return;
} else if (group_replayer->is_blocklisted()) {
return false;
}
+template <typename I>
+bool Replayer<I>::is_rename_requested() {
+ dout(10) << "m_local_group_id=" << m_local_group_id << dendl;
+
+ std::string remote_group_name;
+ int r = librbd::cls_client::dir_get_name(&m_remote_io_ctx,
+ RBD_GROUP_DIRECTORY,
+ m_remote_group_id,
+ &remote_group_name);
+ if (r < 0) {
+ derr << "failed to retrieve remote group name: "
+ << cpp_strerror(r) << dendl;
+ return false;
+ }
+
+ if (m_local_group_ctx->name != remote_group_name) {
+ return true;
+ }
+
+ return false;
+}
+
template <typename I>
void Replayer<I>::init(Context* on_finish) {
dout(10) << m_global_group_id << dendl;
m_state = STATE_REPLAYING;
}
- if (m_resync_requested) {
+ if (m_resync_requested || m_rename_requested) {
return;
} else if (is_resync_requested()) {
m_resync_requested = true; // do nothing from here, anything is simply
dout(10) << "local group resync requested" << dendl;
// send stop for Group Replayer
notify_group_listener_stop();
+ } else if (is_rename_requested()) {
+ m_rename_requested = true;
+ dout(10) << "remote group rename requested" << dendl;
+ // send stop for Group Replayer
+ notify_group_listener_stop();
}
m_local_group_snaps.clear();
bool m_remote_demoted = false;
bool m_resync_requested = false;
+ bool m_rename_requested = false;
// map of <group_snap_id, pair<GroupSnapshot, on_finish>>
std::map<std::string, std::pair<cls::rbd::GroupSnapshot, Context *>> m_create_snap_requests;
void schedule_load_group_snapshots();
void notify_group_listener_stop();
bool is_resync_requested();
+ bool is_rename_requested();
void load_local_group_snapshots();
void handle_load_local_group_snapshots(int r);