return true;
}
-// forwarders used by the scrubber backend
-
/// \todo combine the multiple transactions into a single one
void PrimaryLogScrub::submit_digest_fixes(const digests_fixes_t& fixes)
{
- num_digest_updates_pending += fixes.size();
+ // note: the following line was modified from '+=' to '=', as we should not
+ // encounter previous-chunk digest updates after starting a new chunk
+ num_digest_updates_pending = fixes.size();
dout(10) << __func__
<< ": num_digest_updates_pending: " << num_digest_updates_pending
<< dendl;
}
}
+// a forwarder used by the scrubber backend
void PrimaryLogScrub::add_to_stats(const object_stat_sum_t& stat)
{
if (auth_object.omap_digest_present) {
omap_digest = auth_object.omap_digest;
}
- this_chunk->missing_digest[ho] = make_pair(data_digest, omap_digest);
+ this_chunk->missing_digest.push_back(
+ make_pair(ho, make_pair(data_digest, omap_digest)));
}
if (!this_chunk->cur_inconsistent.empty() ||
dout(20) << __func__ << ": will update omap digest on " << ho
<< dendl;
}
- this_chunk->missing_digest[ho] = make_pair(data_digest, omap_digest);
+ this_chunk->missing_digest.push_back(
+ make_pair(ho, make_pair(data_digest, omap_digest)));
break;
}
}
m_scrubber.m_store->add_snap_error(pool.id, head_error);
// fix data/omap digests
- digests_fixes_t digest_fixes{this_chunk->missing_digest.size()};
- std::transform(
- this_chunk->missing_digest.begin(),
- this_chunk->missing_digest.end(),
- digest_fixes.begin(),
- [](const auto& p) { return std::make_pair(p.first, p.second); });
-
- m_scrubber.submit_digest_fixes(digest_fixes);
+ m_scrubber.submit_digest_fixes(this_chunk->missing_digest);
dout(10) << __func__ << " (" << m_mode_desc << ") finish" << dendl;
}
utime_t started{ceph_clock_now()};
- std::map<hobject_t, data_omap_digests_t> missing_digest;
+ digests_fixes_t missing_digest;
/// Map from object with errors to good peers
std::map<hobject_t, std::list<pg_shard_t>> authoritative;