]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/OSDMonitor: check crush features in crush_rule_create_erasure
authorSamuel Just <sjust@redhat.com>
Tue, 27 Aug 2024 20:51:00 +0000 (13:51 -0700)
committerLaura Flores <lflores@ibm.com>
Thu, 5 Sep 2024 17:29:55 +0000 (12:29 -0500)
Also adjusts validate_crush_against_features to use an ostream&
rather than a stringstream&.

Fixes: https://tracker.ceph.com/issues/67755
Signed-off-by: Samuel Just <sjust@redhat.com>
(cherry picked from commit 1d6b4d4a507a1241a5e03016231e8160ef4b8f92)
(cherry picked from commit e8f5b905f0f4887a7515e97799f43a2893e26f4c)

src/mon/OSDMonitor.cc
src/mon/OSDMonitor.h

index 7bfd4e2cacc4fe0e940d5bafb6bc08fb1ed632e2..a1593fe14ece41b98d52a4039fe8fbe1dab42d0b 100644 (file)
@@ -7500,6 +7500,11 @@ int OSDMonitor::crush_rule_create_erasure(const string &name,
     erasure_code.reset();
     if (err < 0)
       return err;
+
+    if (!validate_crush_against_features(&newcrush, *ss)) {
+      return -EINVAL;
+    }
+
     *rule = err;
     pending_inc.crush.clear();
     newcrush.encode(pending_inc.crush, mon.get_quorum_con_features());
@@ -7575,7 +7580,7 @@ int OSDMonitor::check_cluster_features(uint64_t features,
 }
 
 bool OSDMonitor::validate_crush_against_features(const CrushWrapper *newcrush,
-                                                 stringstream& ss)
+                                                 ostream &ss)
 {
   OSDMap::Incremental new_pending = pending_inc;
   encode(*newcrush, new_pending.crush, mon.get_quorum_con_features());
index 398daf9243e10d91df218e58445cfe01a0a0dbca..f522f2b4c0b09e33d34abfd2b1ab0a35859865e7 100644 (file)
@@ -358,7 +358,7 @@ private:
    * @returns true if the map is passable, false otherwise
    */
   bool validate_crush_against_features(const CrushWrapper *newcrush,
-                                      std::stringstream &ss);
+                                      std::ostream &ss);
   void check_osdmap_subs();
   void share_map_with_random_osd();