]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ReplicatedPG: disable clone subsets for cache pools 1553/head
authorSamuel Just <sam.just@inktank.com>
Thu, 27 Mar 2014 00:24:38 +0000 (17:24 -0700)
committerSamuel Just <sam.just@inktank.com>
Thu, 27 Mar 2014 00:24:38 +0000 (17:24 -0700)
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 <sam.just@inktank.com>
src/osd/PGBackend.h
src/osd/ReplicatedPG.cc
src/osd/ReplicatedPG.h

index 88ce4345797b52a904cb162f2e625a1a9c358809..bd18a4706256ac5ea10c2907d1788ac83ae776fb 100644 (file)
      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,
index faf00a720acac08de328df8a5acf0b41401d678b..0afac3b47ba2681a1650d9e346c078392f352efe 100644 (file)
@@ -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;
index 3b8dea67becdff8e0cacbc65bad768e60ae664ce..965f4b7130a7f1c28af9a2bb16cfc104838e5e77 100644 (file)
@@ -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<string, bufferlist> &attrs) {