From: Samuel Just Date: Thu, 27 Mar 2014 00:24:38 +0000 (-0700) Subject: ReplicatedPG: disable clone subsets for cache pools X-Git-Tag: v0.79~68^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b6a431b183f2c8d4d25207e4107825d5d11ec17c;p=ceph.git ReplicatedPG: disable clone subsets for cache pools To do this properly, we need to take appropriate read locks on clone sources and handle evicted clones. Fixes: #7874 Signed-off-by: Samuel Just --- diff --git a/src/osd/PGBackend.h b/src/osd/PGBackend.h index 88ce4345797b..bd18a4706256 100644 --- a/src/osd/PGBackend.h +++ b/src/osd/PGBackend.h @@ -160,6 +160,7 @@ virtual bool pgb_is_primary() const = 0; virtual OSDMapRef pgb_get_osdmap() const = 0; virtual const pg_info_t &get_info() const = 0; + virtual const pg_pool_t &get_pool() const = 0; virtual ObjectContextRef get_obc( const hobject_t &hoid, diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index faf00a720aca..0afac3b47ba2 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -7310,6 +7310,11 @@ void ReplicatedBackend::calc_head_subsets( if (size) data_subset.insert(0, size); + if (get_parent()->get_pool().cache_mode != pg_pool_t::CACHEMODE_NONE) { + dout(10) << __func__ << ": caching enabled, skipping clone subsets" << dendl; + return; + } + if (!cct->_conf->osd_recover_clone_overlap) { dout(10) << "calc_head_subsets " << head << " -- osd_recover_clone_overlap disabled" << dendl; return; @@ -7365,6 +7370,11 @@ void ReplicatedBackend::calc_clone_subsets( if (size) data_subset.insert(0, size); + if (get_parent()->get_pool().cache_mode != pg_pool_t::CACHEMODE_NONE) { + dout(10) << __func__ << ": caching enabled, skipping clone subsets" << dendl; + return; + } + if (!cct->_conf->osd_recover_clone_overlap) { dout(10) << "calc_clone_subsets " << soid << " -- osd_recover_clone_overlap disabled" << dendl; return; diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h index 3b8dea67becd..965f4b7130a7 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -329,6 +329,9 @@ public: const pg_info_t &get_info() const { return info; } + const pg_pool_t &get_pool() const { + return pool.info; + } ObjectContextRef get_obc( const hobject_t &hoid, map &attrs) {