From: John Spray Date: Wed, 9 Nov 2016 19:51:34 +0000 (+0000) Subject: mon: clean up MDSMonitor interface X-Git-Tag: v11.1.0~272^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=14588e544fa212fdde2db802bdba0d09f1342e04;p=ceph.git mon: clean up MDSMonitor interface This was almost all public. Signed-off-by: John Spray --- diff --git a/src/mds/FSMap.cc b/src/mds/FSMap.cc index ab202f0975ae..ac59eb8c7f14 100644 --- a/src/mds/FSMap.cc +++ b/src/mds/FSMap.cc @@ -109,7 +109,7 @@ void FSMap::print(ostream& out) const -void FSMap::print_summary(Formatter *f, ostream *out) +void FSMap::print_summary(Formatter *f, ostream *out) const { map by_rank; map by_state; diff --git a/src/mds/FSMap.h b/src/mds/FSMap.h index fd6c359c75cc..0b3ea09af634 100644 --- a/src/mds/FSMap.h +++ b/src/mds/FSMap.h @@ -444,14 +444,14 @@ public: } void print(ostream& out) const; - void print_summary(Formatter *f, ostream *out); + void print_summary(Formatter *f, ostream *out) const; void dump(Formatter *f) const; static void generate_test_instances(list& ls); }; WRITE_CLASS_ENCODER_FEATURES(FSMap) -inline ostream& operator<<(ostream& out, FSMap& m) { +inline ostream& operator<<(ostream& out, const FSMap& m) { m.print_summary(NULL, &out); return out; } diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index 78c00fec76bd..55ee61b1e44e 100644 --- a/src/mon/MDSMonitor.cc +++ b/src/mon/MDSMonitor.cc @@ -480,26 +480,6 @@ bool MDSMonitor::prepare_update(MonOpRequestRef op) return true; } - -namespace { -class C_Updated : public Context { - MDSMonitor *mm; - MonOpRequestRef op; -public: - C_Updated(MDSMonitor *a, MonOpRequestRef c) : - mm(a), op(c) {} - void finish(int r) { - if (r >= 0) - mm->_updated(op); // success - else if (r == -ECANCELED) { - mm->mon->no_reply(op); - } else { - mm->dispatch(op); // try again - } - } -}; -} - bool MDSMonitor::prepare_beacon(MonOpRequestRef op) { op->mark_mdsmon_event(__func__); @@ -699,7 +679,15 @@ bool MDSMonitor::prepare_beacon(MonOpRequestRef op) dout(7) << "prepare_beacon pending map now:" << dendl; print_map(pending_fsmap); - wait_for_finished_proposal(op, new C_Updated(this, op)); + wait_for_finished_proposal(op, new FunctionContext([op, this](int r){ + if (r >= 0) + _updated(op); // success + else if (r == -ECANCELED) { + mon->no_reply(op); + } else { + dispatch(op); // try again + } + })); return true; } diff --git a/src/mon/MDSMonitor.h b/src/mon/MDSMonitor.h index ddad4db10d1c..776948cc63ec 100644 --- a/src/mon/MDSMonitor.h +++ b/src/mon/MDSMonitor.h @@ -38,15 +38,7 @@ class FileSystemCommandHandler; class MDSMonitor : public PaxosService { public: - // mds maps - FSMap fsmap; // current - FSMap pending_fsmap; // current + pending updates - - // my helpers - void print_map(FSMap &m, int dbl=7); - void create_new_fs(FSMap &m, const std::string &name, int metadata_pool, int data_pool); - - version_t get_trim_to(); + MDSMonitor(Monitor *mn, Paxos *p, string service_name); // service methods void create_initial(); @@ -56,17 +48,34 @@ class MDSMonitor : public PaxosService { void encode_pending(MonitorDBStore::TransactionRef t); // we don't require full versions; don't encode any. virtual void encode_full(MonitorDBStore::TransactionRef t) { } + version_t get_trim_to(); - void update_logger(); - - void _updated(MonOpRequestRef op); - bool preprocess_query(MonOpRequestRef op); // true if processed. bool prepare_update(MonOpRequestRef op); bool should_propose(double& delay); void on_active(); + void check_subs(); + void check_sub(Subscription *sub); + + const FSMap &get_pending() const { return pending_fsmap; } + const FSMap &get_fsmap() const { return fsmap; } + void dump_info(Formatter *f); + int print_nodes(Formatter *f); + + protected: + // mds maps + FSMap fsmap; // current + FSMap pending_fsmap; // current + pending updates + + // my helpers + void print_map(FSMap &m, int dbl=7); + void create_new_fs(FSMap &m, const std::string &name, int metadata_pool, int data_pool); + void update_logger(); + + void _updated(MonOpRequestRef op); + void _note_beacon(class MMDSBeacon *m); bool preprocess_beacon(MonOpRequestRef op); bool prepare_beacon(MonOpRequestRef op); @@ -123,23 +132,14 @@ class MDSMonitor : public PaxosService { std::list > handlers; -public: - MDSMonitor(Monitor *mn, Paxos *p, string service_name); - bool maybe_promote_standby(std::shared_ptr fs); bool maybe_expand_cluster(std::shared_ptr fs); void maybe_replace_gid(mds_gid_t gid, const beacon_info_t &beacon, bool *mds_propose, bool *osd_propose); void tick(); // check state, take actions - void dump_info(Formatter *f); int dump_metadata(const string& who, Formatter *f, ostream& err); - int print_nodes(Formatter *f); - - void check_subs(); - void check_sub(Subscription *sub); -private: MDSMap *generate_mds_map(fs_cluster_id_t fscid); void update_metadata(mds_gid_t gid, const Metadata& metadata); void remove_from_metadata(MonitorDBStore::TransactionRef t); diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index eb2e7dafcc16..b692b477d2fe 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -2688,7 +2688,7 @@ void Monitor::get_cluster_status(stringstream &ss, Formatter *f) pgmon()->pg_map.print_summary(f, NULL); f->close_section(); f->open_object_section("fsmap"); - mdsmon()->fsmap.print_summary(f, NULL); + mdsmon()->get_fsmap().print_summary(f, NULL); f->close_section(); f->open_object_section("mgrmap"); @@ -2702,8 +2702,8 @@ void Monitor::get_cluster_status(stringstream &ss, Formatter *f) ss << " monmap " << *monmap << "\n"; ss << " election epoch " << get_epoch() << ", quorum " << get_quorum() << " " << get_quorum_names() << "\n"; - if (mdsmon()->fsmap.filesystem_count() > 0) { - ss << " fsmap " << mdsmon()->fsmap << "\n"; + if (mdsmon()->get_fsmap().filesystem_count() > 0) { + ss << " fsmap " << mdsmon()->get_fsmap() << "\n"; } if (mgrmon()->in_use()) { ss << " mgr "; diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index f63e440fbc7b..67413e337aba 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -8210,7 +8210,7 @@ int OSDMonitor::_check_remove_pool(int64_t pool, const pg_pool_t *p, const string& poolstr = osdmap.get_pool_name(pool); // If the Pool is in use by CephFS, refuse to delete it - FSMap const &pending_fsmap = mon->mdsmon()->pending_fsmap; + FSMap const &pending_fsmap = mon->mdsmon()->get_pending(); if (pending_fsmap.pool_in_use(pool)) { *ss << "pool '" << poolstr << "' is in use by CephFS"; return -EBUSY; @@ -8259,7 +8259,7 @@ bool OSDMonitor::_check_become_tier( const std::string &tier_pool_name = osdmap.get_pool_name(tier_pool_id); const std::string &base_pool_name = osdmap.get_pool_name(base_pool_id); - const FSMap &pending_fsmap = mon->mdsmon()->pending_fsmap; + const FSMap &pending_fsmap = mon->mdsmon()->get_pending(); if (pending_fsmap.pool_in_use(tier_pool_id)) { *ss << "pool '" << tier_pool_name << "' is in use by CephFS"; *err = -EBUSY; @@ -8319,7 +8319,7 @@ bool OSDMonitor::_check_remove_tier( const std::string &base_pool_name = osdmap.get_pool_name(base_pool_id); // Apply CephFS-specific checks - const FSMap &pending_fsmap = mon->mdsmon()->pending_fsmap; + const FSMap &pending_fsmap = mon->mdsmon()->get_pending(); if (pending_fsmap.pool_in_use(base_pool_id)) { if (base_pool->type != pg_pool_t::TYPE_REPLICATED) { // If the underlying pool is erasure coded, we can't permit the