ceph_assert(m_state == STATE_COMPLETE);
}
+template <typename I>
+bool Replayer<I>::is_replay_interrupted() {
+ std::unique_lock locker{m_lock};
+ return is_replay_interrupted(&locker);
+}
+
+template <typename I>
+bool Replayer<I>::is_replay_interrupted(std::unique_lock<ceph::mutex>* locker) {
+ if (m_state == STATE_COMPLETE) {
+ locker->unlock();
+
+ return true;
+ }
+
+ return false;
+}
+
template <typename I>
void Replayer<I>::schedule_load_group_snapshots() {
dout(10) << dendl;
void Replayer<I>::load_local_group_snapshots() {
dout(10) << "m_local_group_id=" << m_local_group_id << dendl;
+ if (is_replay_interrupted()) {
+ return;
+ }
+
if (m_state != STATE_COMPLETE) {
m_state = STATE_REPLAYING;
}
dout(10) << "m_remote_group_id=" << m_remote_group_id << dendl;
std::unique_lock locker{m_lock};
+ if (is_replay_interrupted(&locker)) {
+ return;
+ }
m_remote_group_snaps.clear();
auto ctx = new LambdaContext(
[this] (int r) {
void Replayer<I>::validate_image_snaps_sync_complete(
const std::string &remote_group_snap_id) {
std::unique_lock locker{m_lock};
+ if (is_replay_interrupted(&locker)) {
+ return;
+ }
// 1. get group membership
// 2. get snap list of each image and check any image snap has the group
// snapid and is set to complete. If yes call complete
bool found = false;
bool syncs_upto_date = false;
+
std::unique_lock locker{m_lock};
+ if (is_replay_interrupted(&locker)) {
+ return;
+ }
+
if (m_remote_group_snaps.empty()) {
goto out;
}
void Replayer<I>::try_create_group_snapshot(cls::rbd::GroupSnapshot snap,
std::unique_lock<ceph::mutex> &locker) {
dout(10) << snap.id << dendl;
+ if (is_replay_interrupted(&locker)) {
+ return;
+ }
ceph_assert(ceph_mutex_is_locked_by_me(m_lock));
auto snap_type = cls::rbd::get_group_snap_namespace_type(
<< cpp_strerror(r) << dendl;
}
on_finish->complete(0);
-
- schedule_load_group_snapshots();
}
template <typename I>
// map of <group_snap_id, vec<pair<cls::rbd::ImageSnapshotSpec, bool>>>
std::map<std::string, std::vector<std::pair<cls::rbd::ImageSnapshotSpec, bool>>> m_pending_group_snaps;
+ bool is_replay_interrupted();
+ bool is_replay_interrupted(std::unique_lock<ceph::mutex>* locker);
int local_group_image_list_by_id(
std::vector<cls::rbd::GroupImageStatus> *image_ids);