mirror of
https://github.com/ceph/ceph
synced 2025-03-24 11:17:53 +00:00
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:
commit
05fea962f1
@ -2200,6 +2200,10 @@ void ECBackend::objects_read_async(
|
|||||||
auto range = got.second.get_containing_range(offset, length);
|
auto range = got.second.get_containing_range(offset, length);
|
||||||
ceph_assert(range.first != range.second);
|
ceph_assert(range.first != range.second);
|
||||||
ceph_assert(range.first.get_off() <= offset);
|
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(
|
ceph_assert(
|
||||||
(offset + length) <=
|
(offset + length) <=
|
||||||
(range.first.get_off() + range.first.get_len()));
|
(range.first.get_off() + range.first.get_len()));
|
||||||
|
@ -5435,9 +5435,15 @@ int PrimaryLogPG::do_read(OpContext *ctx, OSDOp& osd_op) {
|
|||||||
uint64_t size = oi.size;
|
uint64_t size = oi.size;
|
||||||
bool trimmed_read = false;
|
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?
|
// are we beyond truncate_size?
|
||||||
if ( (seq < op.extent.truncate_seq) &&
|
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;
|
size = op.extent.truncate_size;
|
||||||
|
|
||||||
if (op.extent.length == 0) //length is zero mean read the whole object
|
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;
|
trimmed_read = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dout(30) << __func__ << "op.extent.length is now " << op.extent.length << dendl;
|
||||||
|
|
||||||
// read into a buffer
|
// read into a buffer
|
||||||
int result = 0;
|
int result = 0;
|
||||||
if (trimmed_read && op.extent.length == 0) {
|
if (trimmed_read && op.extent.length == 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user