From 9e541a3b2b63807053f86f9a56cfdfd47209b873 Mon Sep 17 00:00:00 2001 From: songweibin Date: Sat, 19 Dec 2020 18:50:31 +0800 Subject: [PATCH] osd/ReplicatedBackend: handle tailing zeros of recovering objects nicer E.g., (1) recovery_info.copy_subset = [0, 4194304] (2) copy_subset(fiemap) = [0, 8192] (3) out_op->data_included.span_of(copy_subset, 0, 4194304) = [0, 8192] We'll set new_progress.data_recovered_to = 8192 as a result, and fail to complete the push in one go. Signed-off-by: xie xingguo --- src/osd/ReplicatedBackend.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/osd/ReplicatedBackend.cc b/src/osd/ReplicatedBackend.cc index 269adf64b11..50d18573476 100644 --- a/src/osd/ReplicatedBackend.cc +++ b/src/osd/ReplicatedBackend.cc @@ -1961,7 +1961,9 @@ int ReplicatedBackend::build_push_op(const ObjectRecoveryInfo &recovery_info, out_op->data_included.span_of(copy_subset, progress.data_recovered_to, available); - if (out_op->data_included.empty()) // zero filled section, skip to end! + // zero filled section, skip to end! + if (out_op->data_included.empty() || + out_op->data_included.range_end() == copy_subset.range_end()) new_progress.data_recovered_to = recovery_info.copy_subset.range_end(); else new_progress.data_recovered_to = out_op->data_included.range_end();