From 49f0667804b65306a8e8bab7e6f245300f8b2cd3 Mon Sep 17 00:00:00 2001 From: Bill Scales Date: Thu, 19 Jun 2025 13:41:17 +0100 Subject: [PATCH] osd: EC Optimizations proc_replica_log needs to apply pwlc PeeringState::proc_replica_log needs to apply pwlc before calling PGLog so that any partial writes that have occurred are taken into account when working out where a replica/stray has diverged from the primary. Signed-off-by: Bill Scales (cherry picked from commit 6c3c0a88b68e2548df670dbe9797d54f89259398) --- src/osd/PeeringState.cc | 6 +++++- src/osd/PeeringState.h | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/osd/PeeringState.cc b/src/osd/PeeringState.cc index 925a05610b2da..4514cfc1a5ce0 100644 --- a/src/osd/PeeringState.cc +++ b/src/osd/PeeringState.cc @@ -3417,13 +3417,17 @@ void PeeringState::proc_master_log( void PeeringState::proc_replica_log( pg_info_t &oinfo, - const pg_log_t &olog, + pg_log_t &olog, pg_missing_t&& omissing, pg_shard_t from) { psdout(10) << "proc_replica_log for osd." << from << ": " << oinfo << " " << olog << " " << omissing << dendl; + if (info.partial_writes_last_complete.contains(from.shard)) { + apply_pwlc(info.partial_writes_last_complete[from.shard], from, oinfo, + &olog); + } pg_log.proc_replica_log(oinfo, olog, omissing, from, pool.info.allows_ecoptimizations()); peer_info[from] = oinfo; diff --git a/src/osd/PeeringState.h b/src/osd/PeeringState.h index d3039244ca5d7..d87eb7cc6bcce 100644 --- a/src/osd/PeeringState.h +++ b/src/osd/PeeringState.h @@ -1787,7 +1787,7 @@ private: void proc_master_log(ObjectStore::Transaction& t, pg_info_t &oinfo, pg_log_t&& olog, pg_missing_t&& omissing, pg_shard_t from); - void proc_replica_log(pg_info_t &oinfo, const pg_log_t &olog, + void proc_replica_log(pg_info_t &oinfo, pg_log_t &olog, pg_missing_t&& omissing, pg_shard_t from); void calc_min_last_complete_ondisk(); -- 2.39.5