]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: move PurgeQueue up to MDSRank
authorJohn Spray <john.spray@redhat.com>
Thu, 1 Dec 2016 23:58:51 +0000 (23:58 +0000)
committerJohn Spray <john.spray@redhat.com>
Wed, 8 Mar 2017 10:20:57 +0000 (10:20 +0000)
To better reflect its lifecycle: it has a part to play
in create/open and has an init/shutdown, unlike StrayManager.

Signed-off-by: John Spray <john.spray@redhat.com>
src/mds/MDCache.cc
src/mds/MDCache.h
src/mds/MDSRank.cc
src/mds/MDSRank.h
src/mds/StrayManager.cc
src/mds/StrayManager.h

index 385b12e2e1925c2aea3bca78415e449afb739706..c905d9c4c7eb69322cddbdc9d250207a6f4d8b78 100644 (file)
@@ -162,12 +162,12 @@ public:
   explicit MDCacheLogContext(MDCache *mdc_) : mdcache(mdc_) {}
 };
 
-MDCache::MDCache(MDSRank *m) :
+MDCache::MDCache(MDSRank *m, PurgeQueue &purge_queue_) :
   mds(m),
   filer(m->objecter, m->finisher),
   exceeded_size_limit(false),
   recovery_queue(m),
-  stray_manager(m)
+  stray_manager(m, purge_queue_)
 {
   migrator.reset(new Migrator(mds, this));
   root = NULL;
@@ -461,8 +461,6 @@ void MDCache::create_mydir_hierarchy(MDSGather *gather)
   mydir->commit(0, gather->new_sub());
 
   myin->store(gather->new_sub());
-
-  stray_manager.purge_queue.create(new C_IO_Wrapper(mds, gather->new_sub()));
 }
 
 struct C_MDC_CreateSystemFile : public MDCacheLogContext {
@@ -591,8 +589,6 @@ void MDCache::open_mydir_inode(MDSInternalContextBase *c)
   CInode *in = create_system_inode(MDS_INO_MDSDIR(mds->get_nodeid()), S_IFDIR|0755);  // initially inaccurate!
   in->fetch(gather.new_sub());
 
-  stray_manager.purge_queue.open(new C_IO_Wrapper(mds, gather.new_sub()));
-
   gather.set_finisher(c);
   gather.activate();
 }
index a8e174cd78114d2a90d48b06867003d961fcc7d6..87da4416c8509f689e6db8eb5ec06db9e5483874 100644 (file)
@@ -655,7 +655,7 @@ public:
   std::unique_ptr<Migrator> migrator;
 
  public:
-  explicit MDCache(MDSRank *m);
+  explicit MDCache(MDSRank *m, PurgeQueue &purge_queue_);
   ~MDCache();
   
   // debug
index f87cb40ee60b4ccb13188f47082c899284816f4c..79bd88b7ff8f8c6a39cb594cc69382059441417b 100644 (file)
@@ -67,6 +67,8 @@ MDSRank::MDSRank(
     last_state(MDSMap::STATE_BOOT),
     state(MDSMap::STATE_BOOT),
     stopping(false),
+    purge_queue(g_ceph_context, whoami_,
+        mdsmap_->get_metadata_pool(), objecter),
     progress_thread(this), dispatch_depth(0),
     hb(NULL), last_tid(0), osd_epoch_barrier(0), beacon(beacon_),
     mds_slow_req_count(0),
@@ -82,7 +84,7 @@ MDSRank::MDSRank(
 
   finisher = new Finisher(msgr->cct);
 
-  mdcache = new MDCache(this);
+  mdcache = new MDCache(this, purge_queue);
   mdlog = new MDLog(this);
   balancer = new MDBalancer(this, messenger, monc);
 
@@ -159,7 +161,7 @@ void MDSRankDispatcher::init()
 
   progress_thread.create("mds_rank_progr");
 
-  mdcache->stray_manager.purge_queue.init();
+  purge_queue.init();
 
   finisher->start();
 }
@@ -241,7 +243,7 @@ void MDSRankDispatcher::shutdown()
   // shut down cache
   mdcache->shutdown();
 
-  mdcache->stray_manager.purge_queue.shutdown();
+  purge_queue.shutdown();
 
   if (objecter->initialized.read())
     objecter->shutdown();
@@ -977,6 +979,8 @@ void MDSRank::boot_start(BootStep step, int r)
 
         mdcache->open_mydir_inode(gather.new_sub());
 
+        purge_queue.open(new C_IO_Wrapper(this, gather.new_sub()));
+
         if (is_starting() ||
             whoami == mdsmap->get_root()) {  // load root inode off disk if we are auth
           mdcache->open_root_inode(gather.new_sub());
@@ -1359,6 +1363,9 @@ void MDSRank::boot_create()
   // write empty sessionmap
   sessionmap.save(fin.new_sub());
 
+  // Create empty purge queue
+  purge_queue.create(new C_IO_Wrapper(this, fin.new_sub()));
+
   // initialize tables
   if (mdsmap->get_tableserver() == whoami) {
     dout(10) << "boot_create creating fresh snaptable" << dendl;
index 190592eabf5d9c1164b622fa2fb561a6e6189a7b..13e9057730183310f41f33de6ba6199eed16d54a 100644 (file)
@@ -28,6 +28,7 @@
 #include "MDCache.h"
 #include "Migrator.h"
 #include "MDLog.h"
+#include "PurgeQueue.h"
 #include "osdc/Journaler.h"
 
 // Full .h import instead of forward declaration for PerfCounter, for the
@@ -159,6 +160,7 @@ class MDSRank {
     ScrubStack   *scrubstack;
     DamageTable  damage_table;
 
+
     InoTable     *inotable;
 
     SnapServer   *snapserver;
@@ -204,6 +206,10 @@ class MDSRank {
     // after taking mds_lock must drop out.
     bool stopping;
 
+    // PurgeQueue is only used by StrayManager, but it is owned by MDSRank
+    // because its init/shutdown happens at the top level.
+    PurgeQueue   purge_queue;
+
     class ProgressThread : public Thread {
       MDSRank *mds;
       Cond cond;
index e16d2f9932e50cb4d95d15c2a070ead88d189aa5..eb293c80cce313b15f86b30259e1e3cc241190eb 100644 (file)
@@ -838,15 +838,14 @@ void StrayManager::migrate_stray(CDentry *dn, mds_rank_t to)
   mds->send_message_mds(req, to);
 }
 
-StrayManager::StrayManager(MDSRank *mds)
+StrayManager::StrayManager(MDSRank *mds, PurgeQueue &purge_queue_)
   : delayed_eval_stray(member_offset(CDentry, item_stray)),
-    mds(mds), logger(NULL), started(false), aborted(false),
+    mds(mds), purge_queue(purge_queue_), logger(NULL), started(false),
+    aborted(false),
     ops_in_flight(0), files_purging(0),
     max_purge_ops(0), 
     num_strays(0), num_strays_purging(0), num_strays_delayed(0),
-    filer(mds->objecter, mds->finisher),
-    purge_queue(g_ceph_context, mds->get_nodeid(),
-        mds->mdsmap->get_metadata_pool(), mds->objecter)
+    filer(mds->objecter, mds->finisher)
 {
   assert(mds != NULL);
 }
index 65017798e8be0f8d51dfb9423f479163c3b6781e..0a9b61862ba108bb423baf5a56a678d79b9f0203 100644 (file)
@@ -73,7 +73,7 @@ class StrayManager
 
   Filer filer;
 
-  PurgeQueue purge_queue;
+  PurgeQueue &purge_queue;
 
   void truncate(CDentry *dn, uint32_t op_allowance);
 
@@ -98,13 +98,6 @@ class StrayManager
    */
   void _truncate_stray_logged(CDentry *dn, LogSegment *ls);
 
-  // FIXME: doing this to let MDCache call through into purgequeue
-  // for initialization and teardown
-  // >>
-  friend class MDCache;
-  friend class MDSRankDispatcher;
-  // <<
-
   friend class StrayManagerIOContext;
   friend class StrayManagerLogContext;
   friend class StrayManagerContext;
@@ -179,7 +172,7 @@ class StrayManager
 
   // My public interface is for consumption by MDCache
   public:
-  explicit StrayManager(MDSRank *mds);
+  explicit StrayManager(MDSRank *mds, PurgeQueue &purge_queue_);
   void set_logger(PerfCounters *l) {logger = l;}
   void activate();