first_chunk.claim(pending_data_bl);
obj_len = (uint64_t)first_chunk.length();
}
- if (pending_data_bl.length()) {
+ while (pending_data_bl.length()) {
void *handle;
+ 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);
rgw_obj obj;
- int r = write_data(pending_data_bl, data_ofs, &handle, &obj, false);
+ int r = write_data(bl, data_ofs, &handle, &obj, false);
if (r < 0) {
ldout(store->ctx(), 0) << "ERROR: write_data() returned " << r << dendl;
return r;
}
+ data_ofs += bl.length();
r = throttle_data(handle, obj, 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) {
}
*alignment = ioctx.pool_required_alignment();
+ if (*alignment != 0) {
+ ldout(cct, 20) << "required alignment=" << *alignment << dendl;
+ }
+
return 0;
}
*max_chunk_size = config_chunk_size - (config_chunk_size % alignment);
+ ldout(cct, 20) << "max_chunk_size=" << *max_chunk_size << dendl;
+
return 0;
}