From b6a431b183f2c8d4d25207e4107825d5d11ec17c Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Wed, 26 Mar 2014 17:24:38 -0700 Subject: [PATCH] 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 --- src/osd/PGBackend.h | 1 + src/osd/ReplicatedPG.cc | 10 ++++++++++ src/osd/ReplicatedPG.h | 3 +++ 3 files changed, 14 insertions(+) diff --git a/src/osd/PGBackend.h b/src/osd/PGBackend.h index 88ce4345797b5..bd18a4706256a 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 faf00a720acac..0afac3b47ba26 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 3b8dea67becdf..965f4b7130a7f 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) { -- 2.39.5