]> 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)
committerSamuel Just <sjust@redhat.com>
Wed, 28 Aug 2024 04:50:09 +0000 (04:50 +0000)
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>
src/mon/OSDMonitor.cc
src/mon/OSDMonitor.h

index 56915096fd3a76f7c24d01a5479112667fe43347..ecde838a74c2479d5aaaa7ca3de12c7faf1d0cd9 100644 (file)
@@ -7551,6 +7551,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());
@@ -7626,7 +7631,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 9411f8d3149055ab5f69106a99c20aa7705a075f..ccd11be8a83da41967727be4767423fc6c0dfdeb 100644 (file)
@@ -364,7 +364,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();