]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: propagate base pool application_metadata to tiers 40274/head
authorSage Weil <sage@newdream.net>
Sat, 13 Mar 2021 16:34:43 +0000 (11:34 -0500)
committersinguliere <singuliere@autistici.org>
Sat, 20 Mar 2021 07:45:54 +0000 (08:45 +0100)
If there is application metadata on the base pool, it should be mirrored
to any other tiers in the set.  This aligns with the fact that the
'ceph osd pool application ...' commands refuse to operate on a non-base
pool.

This fixes problems with accessing tiers (e.g., cache tiers) when the
cephx cap is written in terms of application metadata.

Fixes: https://tracker.ceph.com/issues/49788
Signed-off-by: Sage Weil <sage@newdream.net>
(cherry picked from commit 8bcb281a7d91e6daa842aed4ffb416d764dc6bf1)

qa/workunits/cephtool/test.sh
src/mon/OSDMonitor.cc
src/osd/OSDMap.cc
src/osd/OSDMap.h

index cb94fb40683b7829b6adc30ab6a4f1e96ff2e53a..340e7d14e16ef0ffd7f7e09c315d8b36d28f651c 100755 (executable)
@@ -345,6 +345,11 @@ function test_tiering_1()
   ceph osd tier add slow cache
   ceph osd tier add slow cache2
   expect_false ceph osd tier add slow2 cache
+  # application metadata should propagate to the tiers
+  ceph osd pool ls detail -f json | jq '.[] | select(.pool_name == "slow") | .application_metadata["rados"]' | grep '{}'
+  ceph osd pool ls detail -f json | jq '.[] | select(.pool_name == "slow2") | .application_metadata["rados"]' | grep '{}'
+  ceph osd pool ls detail -f json | jq '.[] | select(.pool_name == "cache") | .application_metadata["rados"]' | grep '{}'
+  ceph osd pool ls detail -f json | jq '.[] | select(.pool_name == "cache2") | .application_metadata["rados"]' | grep '{}'
   # forward and proxy are removed/deprecated
   expect_false ceph osd tier cache-mode cache forward
   expect_false ceph osd tier cache-mode cache forward --yes-i-really-mean-it
index 3e8c9dc13e9ee21b0cfcfe22d48c383065fb458e..2ee718caa99982e8add9216821ecaa22a579d4e0 100644 (file)
@@ -1503,7 +1503,7 @@ void OSDMonitor::encode_pending(MonitorDBStore::TransactionRef t)
   // finalize up pending_inc
   pending_inc.modified = ceph_clock_now();
 
-  int r = pending_inc.propagate_snaps_to_tiers(cct, osdmap);
+  int r = pending_inc.propagate_base_properties_to_tiers(cct, osdmap);
   ceph_assert(r == 0);
 
   if (mapping_job) {
index 23903c2967447c80f57d89a9ba1adb78d20696f5..8c148659d4e28bec6e44463241325e06bb4d02c2 100644 (file)
@@ -238,8 +238,8 @@ int OSDMap::Incremental::identify_osd(uuid_d u) const
   return -1;
 }
 
-int OSDMap::Incremental::propagate_snaps_to_tiers(CephContext *cct,
-                                                 const OSDMap& osdmap)
+int OSDMap::Incremental::propagate_base_properties_to_tiers(CephContext *cct,
+                                                           const OSDMap& osdmap)
 {
   ceph_assert(epoch == osdmap.get_epoch() + 1);
 
@@ -279,6 +279,8 @@ int OSDMap::Incremental::propagate_snaps_to_tiers(CephContext *cct,
        if (new_rem_it != new_removed_snaps.end()) {
          new_removed_snaps[tier_pool] = new_rem_it->second;
        }
+
+       tier->application_metadata = base.application_metadata;
       }
     }
   }
index cdbacbb1e63132bc76c533ce67020a8a96c160a1..c9bb3c3184e742ef2555a79f2daff98881b697e3 100644 (file)
@@ -459,8 +459,8 @@ public:
       return new_erasure_code_profiles;
     }
 
-    /// propagate update pools' snap metadata to any of their tiers
-    int propagate_snaps_to_tiers(CephContext *cct, const OSDMap &base);
+    /// propagate update pools' (snap and other) metadata to any of their tiers
+    int propagate_base_properties_to_tiers(CephContext *cct, const OSDMap &base);
 
     /// filter out osds with any pending state changing
     size_t get_pending_state_osds(std::vector<int> *osds) {