]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: require EC optimizations for Crimson EC pools
authorRonen Friedman <rfriedma@redhat.com>
Sun, 12 Jul 2026 15:42:39 +0000 (15:42 +0000)
committerRonen Friedman <rfriedma@redhat.com>
Sun, 12 Jul 2026 16:32:58 +0000 (16:32 +0000)
Fixes: https://tracker.ceph.com/issues/78124
Co-authored-by: Bill Scales <bill_scales@uk.ibm.com>
Signed-off-by: Ronen Friedman <rfriedma@redhat.com>
src/mon/OSDMonitor.cc

index 8121ea2523cdb4b0d2aa65f6a7f2f793e6d73381..b083da610afc4f46e716a11e190ef6b5246f19ba 100644 (file)
@@ -8516,9 +8516,7 @@ int OSDMonitor::prepare_new_pool(string& name,
         pi->ec_data_shard_count = erasure_code->get_data_chunk_count();
         pi->ec_coding_shard_count = erasure_code->get_coding_chunk_count();
       } else {
-        if (ss) {
-          *ss << "get_erasure_code failed: " << tmp.str();
-        }
+        *ss << "get_erasure_code failed: " << tmp.str();
         return -EINVAL;
       }
       pi->erasure_code_profile = erasure_code_profile;
@@ -8548,9 +8546,24 @@ int OSDMonitor::prepare_new_pool(string& name,
   pi->cache_min_flush_age = g_conf()->osd_pool_default_cache_min_flush_age;
   pi->cache_min_evict_age = g_conf()->osd_pool_default_cache_min_evict_age;
 
-  if (cct->_conf.get_val<bool>("osd_pool_default_flag_ec_optimizations")) {
-    // This will fail if the pool cannot support ec optimizations.
-    enable_pool_ec_optimizations(*pi, nullptr, true);
+  // for 'Classic' - we support both EC-optimized and non-optimized EC pools.
+  // For Crimson - only EC-optimized pools are supported.
+  if (pi->is_erasure()) {
+    if (crimson) {
+      stringstream err_msg;
+      if (int r = enable_pool_ec_optimizations(*pi, &err_msg, true); r < 0) {
+        // for Crimson - failure is not an option
+        if (ss) {
+          *ss << err_msg.str();
+        }
+        return r;
+      }
+    } else {
+      if (cct->_conf.get_val<bool>("osd_pool_default_flag_ec_optimizations")) {
+        // Silently fail if the pool cannot support ec optimizations.
+        enable_pool_ec_optimizations(*pi, nullptr, true);
+      }
+    }
   }
 
   maybe_enable_pool_split_ops(*pi);