Bug #22790
closed
- Status changed from New to 12
- Backport set to luminous
the relevant block of code in RGWPutObj::execute():
/* do we need this operation to be synchronous? if we're dealing with an object with immutable
* head, e.g., multipart object we need to make sure we're the first one writing to this object
*/
bool need_to_wait = (ofs == 0) && multipart;
bufferlist orig_data;
if (need_to_wait) {
orig_data = data;
}
op_ret = put_data_and_throttle(filter, data, ofs, need_to_wait);
if (op_ret < 0) {
if (!need_to_wait || op_ret != -EEXIST) {
ldout(s->cct, 20) << "processor->thottle_data() returned ret="
<< op_ret << dendl;
goto done;
}
/* need_to_wait == true and op_ret == -EEXIST */
ldout(s->cct, 5) << "NOTICE: processor->throttle_data() returned -EEXIST, need to restart write" << dendl;
for uncompressed objects, the first rados write will always start at ofs=0. when compression is enabled, we fit more than one chunk into the first rados write and will see an ofs > 0. this leads to need_to_wait=false, where the EEXIST error is treated as fatal instead of restarting the write to a different object
attached a python script to reproduce this failure:
~/ceph/build $ ./resend_part.py cosbench-0.4.2.c4.tar
Traceback (most recent call last):
File "./resend_part.py", line 34, in <module>
p = part.upload(Body=body)
File "/usr/lib/python2.7/site-packages/boto3/resources/factory.py", line 520, in do_action
response = action(self, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/boto3/resources/action.py", line 83, in __call__
response = getattr(parent.meta.client, operation_name)(**params)
File "/usr/lib/python2.7/site-packages/botocore/client.py", line 317, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/usr/lib/python2.7/site-packages/botocore/client.py", line 615, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.errorfactory.BucketAlreadyExists: An error occurred (BucketAlreadyExists) when calling the UploadPart operation: Unknown
- Status changed from 12 to Fix Under Review
- Assignee set to Matt Benjamin
- Backport changed from luminous to luminous mimic
- Copied to Backport #25078: mimic: Intermittent http_status=409 with op status=-17 on ceph rgw with compression enabled added
- Copied to Backport #25079: luminous: Intermittent http_status=409 with op status=-17 on ceph rgw with compression enabled added
- Status changed from Fix Under Review to Pending Backport
- Status changed from Pending Backport to Resolved
Also available in: Atom
PDF