Merge pull request #24564 from neha-ojha/wip-21931

osd: do not overestimate the size of the object for reads with trimtrunc

Reviewed-by: Sage Weil <sage@redhat.com>
Reviewed-by: Josh Durgin <jdurgin@redhat.com>
Reviewed By: Xie Xingguo <xie.xingguo@zte.com.cn>
This commit is contained in:
Neha Ojha 2018-10-12 19:15:39 -07:00 committed by GitHub
commit 05fea962f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 1 deletions

View File

@ -2200,6 +2200,10 @@ void ECBackend::objects_read_async(
auto range = got.second.get_containing_range(offset, length);
ceph_assert(range.first != range.second);
ceph_assert(range.first.get_off() <= offset);
ldpp_dout(dpp, 30) << "offset: " << offset << dendl;
ldpp_dout(dpp, 30) << "range offset: " << range.first.get_off() << dendl;
ldpp_dout(dpp, 30) << "length: " << length << dendl;
ldpp_dout(dpp, 30) << "range length: " << range.first.get_len() << dendl;
ceph_assert(
(offset + length) <=
(range.first.get_off() + range.first.get_len()));

View File

@ -5435,9 +5435,15 @@ int PrimaryLogPG::do_read(OpContext *ctx, OSDOp& osd_op) {
uint64_t size = oi.size;
bool trimmed_read = false;
dout(30) << __func__ << " oi.size: " << oi.size << dendl;
dout(30) << __func__ << " oi.truncate_seq: " << oi.truncate_seq << dendl;
dout(30) << __func__ << " op.extent.truncate_seq: " << op.extent.truncate_seq << dendl;
dout(30) << __func__ << " op.extent.truncate_size: " << op.extent.truncate_size << dendl;
// are we beyond truncate_size?
if ( (seq < op.extent.truncate_seq) &&
(op.extent.offset + op.extent.length > op.extent.truncate_size) )
(op.extent.offset + op.extent.length > op.extent.truncate_size) &&
(size > op.extent.truncate_size) )
size = op.extent.truncate_size;
if (op.extent.length == 0) //length is zero mean read the whole object
@ -5451,6 +5457,8 @@ int PrimaryLogPG::do_read(OpContext *ctx, OSDOp& osd_op) {
trimmed_read = true;
}
dout(30) << __func__ << "op.extent.length is now " << op.extent.length << dendl;
// read into a buffer
int result = 0;
if (trimmed_read && op.extent.length == 0) {