mirror of
https://github.com/ceph/ceph
synced 2025-02-27 21:15:28 +00:00
Merge pull request #8951 from ceph/wip-15745
rgw: handle stripe transition when flushing final pending_data_bl Reviewed-by: Casey Bodley <cbodley@redhat.com>
This commit is contained in:
commit
88e10286b6
@ -2420,18 +2420,33 @@ int RGWPutObjProcessor_Atomic::complete_writing_data()
|
||||
}
|
||||
obj_len = (uint64_t)first_chunk.length();
|
||||
}
|
||||
if (pending_data_bl.length()) {
|
||||
while (pending_data_bl.length()) {
|
||||
void *handle;
|
||||
int r = write_data(pending_data_bl, data_ofs, &handle, false);
|
||||
uint64_t max_write_size = MIN(max_chunk_size, (uint64_t)next_part_ofs - data_ofs);
|
||||
if (max_write_size > pending_data_bl.length()) {
|
||||
max_write_size = pending_data_bl.length();
|
||||
}
|
||||
bufferlist bl;
|
||||
pending_data_bl.splice(0, max_write_size, &bl);
|
||||
int r = write_data(bl, data_ofs, &handle, false);
|
||||
if (r < 0) {
|
||||
ldout(store->ctx(), 0) << "ERROR: write_data() returned " << r << dendl;
|
||||
return r;
|
||||
}
|
||||
data_ofs += bl.length();
|
||||
r = throttle_data(handle, false);
|
||||
if (r < 0) {
|
||||
ldout(store->ctx(), 0) << "ERROR: throttle_data() returned " << r << dendl;
|
||||
return r;
|
||||
}
|
||||
|
||||
if (data_ofs >= next_part_ofs) {
|
||||
r = prepare_next_part(data_ofs);
|
||||
if (r < 0) {
|
||||
ldout(store->ctx(), 0) << "ERROR: prepare_next_part() returned " << r << dendl;
|
||||
return r;
|
||||
}
|
||||
}
|
||||
}
|
||||
int r = complete_parts();
|
||||
if (r < 0) {
|
||||
@ -3027,6 +3042,9 @@ int RGWRados::get_required_alignment(rgw_bucket& bucket, uint64_t *alignment)
|
||||
<< r << dendl;
|
||||
return r;
|
||||
}
|
||||
if (align != 0) {
|
||||
ldout(cct, 20) << "required alignment=" << align << dendl;
|
||||
}
|
||||
*alignment = align;
|
||||
return 0;
|
||||
}
|
||||
@ -3053,6 +3071,8 @@ int RGWRados::get_max_chunk_size(rgw_bucket& bucket, uint64_t *max_chunk_size)
|
||||
|
||||
*max_chunk_size = config_chunk_size - (config_chunk_size % alignment);
|
||||
|
||||
ldout(cct, 20) << "max_chunk_size=" << *max_chunk_size << dendl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user