std::vector<DaemonHealthMetric> get_health_metrics();
+ int quorum_age() const {
+ auto age = std::chrono::duration_cast<std::chrono::seconds>(
+ ceph::mono_clock::now() - quorum_since);
+ return age.count();
+ }
+
+ bool is_mon_down() const {
+ int max = monmap->size();
+ int actual = get_quorum().size();
+ auto now = ceph::real_clock::now();
+ return actual < max && now > monmap->created.to_real_time();
+ }
+
// -- elector --
private:
std::unique_ptr<Paxos> paxos;
bool stretch_mode_engaged{false};
bool degraded_stretch_mode{false};
bool recovering_stretch_mode{false};
- string stretch_bucket_divider;
- map<string, set<string>> dead_mon_buckets; // bucket->mon ranks, locations with no live mons
- set<string> up_mon_buckets; // locations with a live mon
+ std::string stretch_bucket_divider;
+ std::map<std::string, std::set<std::string>> dead_mon_buckets; // bucket->mon ranks, locations with no live mons
+ std::set<std::string> up_mon_buckets; // locations with a live mon
void do_stretch_mode_election_work();
bool session_stretch_allowed(MonSession *s, MonOpRequestRef& op);
void disconnect_disallowed_stretch_sessions();
void set_elector_disallowed_leaders(bool allow_election);
- map <string,string> crush_loc;
+ std::map<std::string,std::string> crush_loc;
bool need_set_crush_loc{false};
public:
bool is_stretch_mode() { return stretch_mode_engaged; }
*/
void try_engage_stretch_mode();
void maybe_go_degraded_stretch_mode();
- void trigger_degraded_stretch_mode(const set<string>& dead_mons,
- const set<int>& dead_buckets);
+ void trigger_degraded_stretch_mode(const std::set<std::string>& dead_mons,
+ const std::set<int>& dead_buckets);
void set_degraded_stretch_mode();
void go_recovery_stretch_mode();
void set_recovery_stretch_mode();
void trigger_healthy_stretch_mode();
void set_healthy_stretch_mode();
void enable_stretch_mode();
- void set_mon_crush_location(const string& loc);
+ void set_mon_crush_location(const std::string& loc);
private:
}
cmdmap_t cmdmap;
std::ostringstream ds;
- string prefix;
+ std::string prefix;
cmdmap_from_json(m->cmd, &cmdmap, ds);
cmd_getval(cmdmap, "prefix", prefix);
if (prefix != "config set" && prefix != "config-key set")
void count_metadata(const std::string& field, ceph::Formatter *f);
void count_metadata(const std::string& field, std::map<std::string,int> *out);
// get_all_versions() gathers version information from daemons for health check
- void get_all_versions(std::map<string, std::list<std::string>> &versions);
- void get_versions(std::map<string, std::list<std::string>> &versions);
+ void get_all_versions(std::map<std::string, std::list<std::string>> &versions);
+ void get_versions(std::map<std::string, std::list<std::string>> &versions);
// features
static CompatSet get_initial_supported_features();
#define CEPH_MON_FEATURE_INCOMPAT_NAUTILUS CompatSet::Feature(11, "nautilus ondisk layout")
#define CEPH_MON_FEATURE_INCOMPAT_OCTOPUS CompatSet::Feature(12, "octopus ondisk layout")
#define CEPH_MON_FEATURE_INCOMPAT_PACIFIC CompatSet::Feature(13, "pacific ondisk layout")
+#define CEPH_MON_FEATURE_INCOMPAT_QUINCY CompatSet::Feature(14, "quincy ondisk layout")
// make sure you add your feature to Monitor::get_supported_features