]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd: propagate base pool application_metadata to tiers
authorSage Weil <sage@newdream.net>
Sat, 13 Mar 2021 16:34:43 +0000 (11:34 -0500)
committerSage Weil <sage@newdream.net>
Sat, 13 Mar 2021 16:51:19 +0000 (11:51 -0500)
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>
qa/workunits/cephtool/test.sh
src/mon/OSDMonitor.cc
src/osd/OSDMap.cc
src/osd/OSDMap.h

index 6657eea30381b38b44129772f82d5183b242abdb..3c79ea634ca09f2ca54703ae9bb8022fb930b4ab 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 1a1bfb37f2715bd8a8714302193cd6e4ff6fde38..d1c415ae24d5becb4d1ff4d4622d45d4c39c15b4 100644 (file)
@@ -1564,7 +1564,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 a5af942c67043cc12b57f21c1559cbcd9c2f9e31..e720a5ebd1b17c6ec712e3b46d9df7da8228caac 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 e0f496138c445d8eac854860c03eb8602ff756e2..711badddec066f7900d20606d92d06dbc67d7c79 100644 (file)
@@ -465,8 +465,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) {