]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: clean up MDSMonitor interface
authorJohn Spray <john.spray@redhat.com>
Wed, 9 Nov 2016 19:51:34 +0000 (19:51 +0000)
committerJohn Spray <john.spray@redhat.com>
Tue, 15 Nov 2016 23:09:21 +0000 (23:09 +0000)
This was almost all public.

Signed-off-by: John Spray <john.spray@redhat.com>
src/mds/FSMap.cc
src/mds/FSMap.h
src/mon/MDSMonitor.cc
src/mon/MDSMonitor.h
src/mon/Monitor.cc
src/mon/OSDMonitor.cc

index ab202f0975ae2eb5408ae5bfbbaed1f451f36234..ac59eb8c7f141a3ec716cb997a949f6d66b97d5d 100644 (file)
@@ -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<mds_role_t,string> by_rank;
   map<string,int> by_state;
index fd6c359c75ccd8603d8ed8c419bc15e6a1127baf..0b3ea09af634b60db012c7b4c58e8bea3aca5ad2 100644 (file)
@@ -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<FSMap*>& 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;
 }
index 78c00fec76bd7fe21402d85c612574a57a933a18..55ee61b1e44ed7fa958212ba12d97b07a95f842b 100644 (file)
@@ -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;
 }
index ddad4db10d1c91f5db0e8b78ce383a40f44168b6..776948cc63ec735b15d25b0f9e4dfd0d3dbbf96c 100644 (file)
@@ -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<std::shared_ptr<FileSystemCommandHandler> > handlers;
 
-public:
-  MDSMonitor(Monitor *mn, Paxos *p, string service_name);
-
   bool maybe_promote_standby(std::shared_ptr<Filesystem> fs);
   bool maybe_expand_cluster(std::shared_ptr<Filesystem> 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);
index eb2e7dafcc1645d99908daa3e0fe316af4d843c6..b692b477d2fee1832084971a1970d3d0c6f2a4f6 100644 (file)
@@ -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 ";
index f63e440fbc7b6900283e89570f73c5722206bf5f..67413e337aba8187dcfd653f335e3beaa3ffdaca 100644 (file)
@@ -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