{
f->dump_int("epoch", epoch);
f->dump_unsigned("flags", flags);
+ dump_flags_state(f);
f->dump_unsigned("ever_allowed_features", ever_allowed_features);
f->dump_unsigned("explicitly_allowed_features", explicitly_allowed_features);
f->dump_stream("created") << created;
f->dump_int("standby_count_wanted", std::max(0, standby_count_wanted));
}
+void MDSMap::dump_flags_state(Formatter *f) const
+{
+ f->open_object_section("flags_state");
+ f->dump_bool(flag_display.at(CEPH_MDSMAP_NOT_JOINABLE), joinable());
+ f->dump_bool(flag_display.at(CEPH_MDSMAP_ALLOW_SNAPS), allows_snaps());
+ f->dump_bool(flag_display.at(CEPH_MDSMAP_ALLOW_MULTIMDS_SNAPS), allows_multimds_snaps());
+ f->dump_bool(flag_display.at(CEPH_MDSMAP_ALLOW_STANDBY_REPLAY), allows_standby_replay());
+ f->close_section();
+}
+
void MDSMap::generate_test_instances(std::list<MDSMap*>& ls)
{
MDSMap *m = new MDSMap();
{
out << "fs_name\t" << fs_name << "\n";
out << "epoch\t" << epoch << "\n";
- out << "flags\t" << hex << flags << dec << "\n";
+ out << "flags\t" << hex << flags << dec;
+ print_flags(out);
+ out << "\n";
out << "created\t" << created << "\n";
out << "modified\t" << modified << "\n";
out << "tableserver\t" << tableserver << "\n";
//out << ", " << stopped.size() << " stopped";
}
+void MDSMap::print_flags(std::ostream& out) const {
+ if (joinable())
+ out << " " << flag_display.at(CEPH_MDSMAP_NOT_JOINABLE);
+ if (allows_snaps())
+ out << " " << flag_display.at(CEPH_MDSMAP_ALLOW_SNAPS);
+ if (allows_multimds_snaps())
+ out << " " << flag_display.at(CEPH_MDSMAP_ALLOW_MULTIMDS_SNAPS);
+ if (allows_standby_replay())
+ out << " " << flag_display.at(CEPH_MDSMAP_ALLOW_STANDBY_REPLAY);
+}
+
void MDSMap::get_health(list<pair<health_status_t,string> >& summary,
list<pair<health_status_t,string> > *detail) const
{
}
void clear_multimds_snaps_allowed() { clear_flag(CEPH_MDSMAP_ALLOW_MULTIMDS_SNAPS); }
bool allows_multimds_snaps() const { return test_flag(CEPH_MDSMAP_ALLOW_MULTIMDS_SNAPS); }
+ bool joinable() const { return !test_flag(CEPH_MDSMAP_NOT_JOINABLE); }
epoch_t get_epoch() const { return epoch; }
void inc_epoch() { epoch++; }
void print(std::ostream& out) const;
void print_summary(ceph::Formatter *f, std::ostream *out) const;
+ void print_flags(std::ostream& out) const;
void dump(ceph::Formatter *f) const;
+ void dump_flags_state(Formatter *f) const;
static void generate_test_instances(std::list<MDSMap*>& ls);
static bool state_transition_valid(DaemonState prev, DaemonState next);
bool inline_data_enabled = false;
uint64_t cached_up_features = 0;
-
+private:
+ inline static const std::map<int, std::string> flag_display = {
+ {CEPH_MDSMAP_NOT_JOINABLE, "joinable"}, //inverse for user display
+ {CEPH_MDSMAP_ALLOW_SNAPS, "allow_snaps"},
+ {CEPH_MDSMAP_ALLOW_MULTIMDS_SNAPS, "allow_multimds_snaps"},
+ {CEPH_MDSMAP_ALLOW_STANDBY_REPLAY, "allow_standby_replay"}
+ };
};
WRITE_CLASS_ENCODER_FEATURES(MDSMap::mds_info_t)
WRITE_CLASS_ENCODER_FEATURES(MDSMap)