perf->set(l_cephfs_mirror_directory_current_eta_seconds, 0);
};
- if (sync_stat.failed) {
+ switch (get_dir_sync_state(sync_stat)) {
+ case DirSyncState::Failed:
perf->set(l_cephfs_mirror_directory_dir_state, 2);
clear_current();
return;
- }
-
- if (!sync_stat.current_syncing_snap) {
+ case DirSyncState::Idle:
perf->set(l_cephfs_mirror_directory_dir_state, 0);
clear_current();
return;
+ case DirSyncState::Syncing:
+ break;
}
perf->set(l_cephfs_mirror_directory_dir_state, 1);
void PeerReplayer::add_live_sync_metrics_to_persist(json_spirit::mObject &obj,
SnapSyncStat &sync_stat) {
- if (sync_stat.current_syncing_snap) {
+ switch (get_dir_sync_state(sync_stat)) {
+ case DirSyncState::Syncing: {
json_spirit::mObject snap;
snap["id"] =
json_spirit::mValue(static_cast<boost::uint64_t>(sync_stat.current_syncing_snap->first));
obj["state"] = json_spirit::mValue("syncing");
obj["current_syncing_snap"] = json_spirit::mValue(snap);
- } else if (sync_stat.failed) {
+ break;
+ }
+ case DirSyncState::Failed:
obj["state"] = json_spirit::mValue("failed");
if (sync_stat.last_failed_reason) {
obj["failure_reason"] = json_spirit::mValue(*sync_stat.last_failed_reason);
}
- } else {
+ break;
+ case DirSyncState::Idle:
obj["state"] = json_spirit::mValue("idle");
+ break;
}
}
}
void PeerReplayer::dump_sync_stat(Formatter *f, const SnapSyncStat &sync_stat) {
- if (sync_stat.failed) {
+ switch (get_dir_sync_state(sync_stat)) {
+ case DirSyncState::Failed:
f->dump_string("state", "failed");
if (sync_stat.last_failed_reason) {
f->dump_string("failure_reason", *sync_stat.last_failed_reason);
}
- } else if (!sync_stat.current_syncing_snap) {
+ break;
+ case DirSyncState::Idle:
f->dump_string("state", "idle");
- } else {
+ break;
+ case DirSyncState::Syncing:
f->dump_string("state", "syncing");
f->open_object_section("current_syncing_snap");
f->dump_unsigned("id", (*sync_stat.current_syncing_snap).first);
else
f->dump_string("eta", format_time(compute_eta(sync_stat)));
f->close_section(); //current_syncing_snap
+ break;
}
if (sync_stat.last_synced_snap) {
f->open_object_section("last_synced_snap");
boost::optional<monotime> datasync_queue_wait_start_time; // until first pop; for in-progress display
};
+ enum class DirSyncState {
+ Idle,
+ Syncing,
+ Failed,
+ };
+
+ static DirSyncState get_dir_sync_state(const SnapSyncStat &sync_stat) {
+ if (sync_stat.current_syncing_snap) {
+ return DirSyncState::Syncing;
+ }
+ if (sync_stat.failed) {
+ return DirSyncState::Failed;
+ }
+ return DirSyncState::Idle;
+ }
+
void _inc_failed_count(const std::string &dir_root) {
auto max_failures = g_ceph_context->_conf.get_val<uint64_t>(
"cephfs_mirror_max_consecutive_failures_per_directory");