diff --git a/osd.cpp b/osd.cpp index 72bd0f23..e69136ab 100644 --- a/osd.cpp +++ b/osd.cpp @@ -106,6 +106,8 @@ void osd_t::parse_config(blockstore_config_t & config) recovery_queue_depth = strtoull(config["recovery_queue_depth"].c_str(), NULL, 10); if (recovery_queue_depth < 1 || recovery_queue_depth > MAX_RECOVERY_QUEUE) recovery_queue_depth = DEFAULT_RECOVERY_QUEUE; + if (config["readonly"] == "true" || config["readonly"] == "1" || config["readonly"] == "yes") + readonly = true; } void osd_t::bind_socket() diff --git a/osd.h b/osd.h index 3c975753..c3fd1f85 100644 --- a/osd.h +++ b/osd.h @@ -189,6 +189,7 @@ class osd_t // config + bool readonly = false; std::string consul_address; osd_num_t osd_num = 1; // OSD numbers start with 1 bool run_primary = false; diff --git a/osd_peering.cpp b/osd_peering.cpp index 3b763f5f..69a4f536 100644 --- a/osd_peering.cpp +++ b/osd_peering.cpp @@ -204,7 +204,7 @@ void osd_t::handle_peers() peering_state = peering_state & ~OSD_PEERING_PGS; } } - if (peering_state & OSD_FLUSHING_PGS) + if ((peering_state & OSD_FLUSHING_PGS) && !readonly) { bool still = false; for (auto & p: pgs) @@ -223,7 +223,7 @@ void osd_t::handle_peers() peering_state = peering_state & ~OSD_FLUSHING_PGS | OSD_RECOVERING; } } - if (peering_state & OSD_RECOVERING) + if ((peering_state & OSD_RECOVERING) && !readonly) { if (!continue_recovery()) {