From 7189b53b410424d4a662486c1081181b2bd662ff Mon Sep 17 00:00:00 2001 From: John Spray Date: Thu, 1 Dec 2016 23:58:51 +0000 Subject: [PATCH] mds: move PurgeQueue up to MDSRank 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 --- src/mds/MDCache.cc | 8 ++------ src/mds/MDCache.h | 2 +- src/mds/MDSRank.cc | 13 ++++++++++--- src/mds/MDSRank.h | 6 ++++++ src/mds/StrayManager.cc | 9 ++++----- src/mds/StrayManager.h | 11 ++--------- 6 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 385b12e2e1925..c905d9c4c7eb6 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -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(); } diff --git a/src/mds/MDCache.h b/src/mds/MDCache.h index a8e174cd78114..87da4416c8509 100644 --- a/src/mds/MDCache.h +++ b/src/mds/MDCache.h @@ -655,7 +655,7 @@ public: std::unique_ptr migrator; public: - explicit MDCache(MDSRank *m); + explicit MDCache(MDSRank *m, PurgeQueue &purge_queue_); ~MDCache(); // debug diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index f87cb40ee60b4..79bd88b7ff8f8 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -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; diff --git a/src/mds/MDSRank.h b/src/mds/MDSRank.h index 190592eabf5d9..13e9057730183 100644 --- a/src/mds/MDSRank.h +++ b/src/mds/MDSRank.h @@ -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; diff --git a/src/mds/StrayManager.cc b/src/mds/StrayManager.cc index e16d2f9932e50..eb293c80cce31 100644 --- a/src/mds/StrayManager.cc +++ b/src/mds/StrayManager.cc @@ -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); } diff --git a/src/mds/StrayManager.h b/src/mds/StrayManager.h index 65017798e8be0..0a9b61862ba10 100644 --- a/src/mds/StrayManager.h +++ b/src/mds/StrayManager.h @@ -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(); -- 2.39.5