]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd/scrub: reinstate one-warning-per-chunk behaviour wip-rf-be-st3
authorRonen Friedman <rfriedma@redhat.com>
Tue, 2 Sep 2025 17:52:53 +0000 (12:52 -0500)
committerRonen Friedman <rfriedma@redhat.com>
Sat, 6 Sep 2025 10:46:53 +0000 (13:46 +0300)
Modify collect_omap_stats() to guarantee that only
one 'large omap entry' warning message is logged
per chunk, thus maintaining the existing behaviour.

Unlike the existing behaviour - all 'large omap'
entries are counted.

Signed-off-by: Ronen Friedman <rfriedma@redhat.com>
src/osd/scrubber/scrub_backend.cc
src/osd/scrubber/scrub_backend.h

index d500625ef269f277d11c3601a10d2749bac7bfc1..35a9045cb82105d7c53f175b1565ff210034c35b 100644 (file)
@@ -253,16 +253,20 @@ void ScrubBackend::collect_omap_stats(
 {
   m_omap_stats.omap_bytes += obj_in_smap.object_omap_bytes;
   m_omap_stats.omap_keys += obj_in_smap.object_omap_keys;
+
   if (obj_in_smap.large_omap_object_found) {
     m_omap_stats.large_omap_objects++;
-    std::string erm = fmt::format(
-       "Large omap object found. Object: {} PG: {} ({}) Key count: {} Size "
-       "(bytes): {}\n",
-       ho, m_pg_id, m_pg_id, obj_in_smap.large_omap_object_key_count,
-       obj_in_smap.large_omap_object_value_size);
-
-    clog.do_log(CLOG_WARN, erm);
-    dout(5) << __func__ << ": " << erm << dendl;
+    if (!this_chunk->m_large_omap_warning_issued) {
+      this_chunk->m_large_omap_warning_issued = true;
+      std::string erm = fmt::format(
+         "Large omap object found. Object: {} PG: {} Key count: {} Size "
+         "(bytes): {}\n",
+         ho, m_pg_id, obj_in_smap.large_omap_object_key_count,
+         obj_in_smap.large_omap_object_value_size);
+
+      clog.do_log(CLOG_WARN, erm);
+      dout(5) << __func__ << ": " << erm << dendl;
+    }
   }
 }
 
index 685fa11a2c65c8cedb0db95b9111fcbd7b2ec6e5..a0cb8fb5efe29b2cbae47d0e1fdb1778b0d42176 100644 (file)
@@ -294,6 +294,9 @@ struct scrub_chunk_t {
 
   // EC-related:
   shard_id_map<bufferlist> m_ec_digest_map;
+
+  /// only one 'large OMAP' warning per chunk
+  bool m_large_omap_warning_issued{false};
 };