Conversation
The typical read flow consists of 4 steps: - read meta, e.g., extent-map - read data from cache - read cache-missing data off the disk - decompress, verify checksum, and generate the final output stream Hence we split _do_read into corresponding small helpers, which are easy to maintain and for reuse. Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
|
@liewegas the test result looks fine: http://pulpito.ceph.com/xxg-2019-08-31_09:22:11-rados:thrash-wip-sparse-read-distro-basic-smithi/ the change set is actually small (the main big part is about the read func refactor) and should be easy to review |
|
I like this much better! At first I thought it was weird that you have to call fiemap first... but I guess the recovery caller we care about already has that info on hand? It also struck me as a bit funny that the result is all concatenated into a single return bufferlist. Given that, I think |
b85797c to
9daffd3
Compare
yeah. actually build_push_op might call fiemap once and then split the whole fiemap into several parts for transmitting, e.g., due to the max-size limit of single push op.
I agree. Repushed. |
Currently only works for bluestore. The default version still reads each extent separately synchronously, but I think that should not be a concern? Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
However, this is only meaningful for ReplicatedBackend since ECBackend is already reading everything in asynchronous way. Also the osd_verify_sparse_read_holes option could be reliably dropped as it seems never (ever?) actually get a chance to be exercised ? Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
9daffd3 to
2296019
Compare
|
retest this please |
| req.regs.emplace_back(region_t(pos, b_off, l, front)); | ||
| r2r.emplace_back(std::move(req)); | ||
| } | ||
| } |
There was a problem hiding this comment.
@xiexingguo i'd suggest avoid massively reformatting source code in future.
There was a problem hiding this comment.
sorry, will pay attention to next time
after ceph#30061, extents returned by sparse read will always be an empty map as long as the extents to be read is empty or the extent(s) in it are empty, even of the objectstorage does not support sparse read. Fixes: https://tracker.ceph.com/issues/41721 Signed-off-by: Kefu Chai <kchai@redhat.com>
after ceph#30061, extents returned by sparse read will always be an empty map as long as the extents to be read is empty or the extent(s) in it are empty, even of the objectstorage does not support sparse read. Fixes: https://tracker.ceph.com/issues/41721 Signed-off-by: Kefu Chai <kchai@redhat.com>
after ceph#30061, extents returned by sparse read will always be an empty map as long as the extents to be read is empty or the extent(s) in it are empty, even of the objectstorage does not support sparse read. Fixes: https://tracker.ceph.com/issues/41721 Signed-off-by: Kefu Chai <kchai@redhat.com>
after ceph#30061, extents returned by sparse read will always be an empty map as long as the extents to be read is empty or the extent(s) in it are empty, even of the objectstorage does not support sparse read. Fixes: https://tracker.ceph.com/issues/41721 Signed-off-by: Kefu Chai <kchai@redhat.com> (cherry picked from commit 855d84d)
after ceph#30061, extents returned by sparse read will always be an empty map as long as the extents to be read is empty or the extent(s) in it are empty, even of the objectstorage does not support sparse read. Fixes: https://tracker.ceph.com/issues/41721 Signed-off-by: Kefu Chai <kchai@redhat.com>
after ceph#30061, extents returned by sparse read will always be an empty map as long as the extents to be read is empty or the extent(s) in it are empty, even of the objectstorage does not support sparse read. Fixes: https://tracker.ceph.com/issues/41721 Signed-off-by: Kefu Chai <kchai@redhat.com>
Here is the background for the proposal: #29588
Checklist
Show available Jenkins commands
jenkins retest this pleasejenkins test signedjenkins test make checkjenkins test make check arm64jenkins test submodulesjenkins test dashboardjenkins test dashboard backendjenkins test docsjenkins render docs