From: songweibin Date: Sat, 19 Dec 2020 10:50:31 +0000 (+0800) Subject: osd/ReplicatedBackend: handle tailing zeros of recovering objects nicer X-Git-Tag: v16.1.0~172^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F38662%2Fhead;p=ceph.git 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 --- diff --git a/src/osd/ReplicatedBackend.cc b/src/osd/ReplicatedBackend.cc index 269adf64b119..50d185734764 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();