diff mbox

RadosGW crashing on copy for one specific object

Message ID CABBk=J8B-Ph_Ju7uHOuXydXdSXw1tL4v1dvPvy7P=A19XtTTTQ@mail.gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Yehuda Sadeh Aug. 20, 2014, 5:44 p.m. UTC
If by any chance you applied the previous patch, revert it, as it's
wrong. This might fix the issue:


Let me know if it works for you.

Thanks,
Yehuda

On Wed, Aug 20, 2014 at 10:33 AM, Yehuda Sadeh <yehuda@redhat.com> wrote:
> Looking at the code some more, that change isn't going to fix it for
> you. I'll send an updated fix soon.
>
> Yehuda
>
> On Wed, Aug 20, 2014 at 10:25 AM, Yehuda Sadeh <yehuda@redhat.com> wrote:
>> On Wed, Aug 20, 2014 at 6:47 AM, Sylvain Munaut
>> <s.munaut@whatever-company.com> wrote:
>>> Hi,
>>>
>>>
>>>> What does 'radosgw-admin object stat --bucket=<bucket> --object=<object>' show?
>>>
>>> { "name": "5ae1b8cb8a2bdc3c2d7e1868b60d76abea2536f4604d6d312df95b719470fb3b\/render-image",
>>>   "size": 239879,
>>>   "policy": { "acl": { "acl_user_map": [
>>>                 { "user": "kp",
>>>                   "acl": 15}],
>>>           "acl_group_map": [],
>>>           "grant_map": [
>>>                 { "id": "kp",
>>>                   "grant": { "type": { "type": 0},
>>>                       "id": "kp",
>>>                       "email": "",
>>>                       "permission": { "flags": 15},
>>>                       "name": "KP S3 User",
>>>                       "group": 0}}]},
>>>       "owner": { "id": "kp",
>>>           "display_name": "KP S3 User"}},
>>>   "etag": "bfe2df862d92f70cecbedbab324e3f78-1",
>>>   "tag": "default.440489.1590546",
>>>   "manifest": { "objs": [
>>>             0,
>>>             { "loc": { "bucket": { "name": "kp-render-image.bouygues",
>>>                       "pool": ".rgw.kp-render-image",
>>>                       "data_extra_pool": "",
>>>                       "index_pool": ".rgw.kp-render-image",
>>>                       "marker": "default.440489.58258",
>>>                       "bucket_id": "default.440489.58258"},
>>>                   "key": "",
>>>                   "ns": "multipart",
>>>                   "object":
>>> "_multipart_5ae1b8cb8a2bdc3c2d7e1868b60d76abea2536f4604d6d312df95b719470fb3b\/render-image.8rSDD8MVD1KIXDTQDsf3g6b71dqADP_.1"},
>>>               "loc_ofs": 0,
>>>               "size": 239879}],
>>>       "obj_size": 239879,
>>>       "explicit_objs": "true",
>>>       "head_obj": { "bucket": { "name": "",
>>>               "pool": "",
>>>               "data_extra_pool": "",
>>>               "index_pool": "",
>>>               "marker": "",
>>>               "bucket_id": ""},
>>>           "key": "",
>>>           "ns": "",
>>>           "object": ""},
>>>       "head_size": 0,
>>>       "max_head_size": 0,
>>>       "prefix": "",
>>>       "tail_bucket": { "name": "",
>>>           "pool": "",
>>>           "data_extra_pool": "",
>>>           "index_pool": "",
>>>           "marker": "",
>>>           "bucket_id": ""},
>>>       "rules": []},
>>>   "attrs": { "user.rgw.content_type": "image\/png"}}
>>>
>>>
>>>> Also, can you bump logging up? debug rgw = 20, debug ms = 1
>>>
>>> I'll try, but being on the production cluster, it's constantly
>>> hammered with requests :p
>>>
>>>
>>
>> The object has a zero sized head, which is ok, but I think it triggers
>> an issue. Can you try this:
>>
>> diff --git a/src/rgw/rgw_dencoder.cc b/src/rgw/rgw_dencoder.cc
>> index e6dc2ba..fd12c4f 100644
>> --- a/src/rgw/rgw_dencoder.cc
>> +++ b/src/rgw/rgw_dencoder.cc
>> @@ -104,7 +104,7 @@ void RGWObjManifest::obj_iterator::update_location()
>>
>>    const rgw_obj& head = manifest->get_head();
>>
>> -  if (ofs < manifest->get_head_size()) {
>> +  if (ofs <= manifest->get_head_size()) {
>>      location = head;
>>      return;
>>    }
>> diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc
>> index 7ca4a9d..877c130 100644
>> --- a/src/rgw/rgw_rados.cc
>> +++ b/src/rgw/rgw_rados.cc
>> @@ -558,7 +558,7 @@ void RGWObjManifest::obj_iterator::operator++()
>>    }
>>
>>    /* are we still pointing at the head? */
>> -  if (ofs < head_size) {
>> +  if (ofs <= head_size) {
>>      rule_iter = manifest->rules.begin();
>>      RGWObjManifestRule *rule = &rule_iter->second;
>>      ofs = MIN(head_size, obj_size);
>>
>>
>> Thanks,
>> Yehuda
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Sylvain Munaut Aug. 21, 2014, 9:38 a.m. UTC | #1
Hi,


> If by any chance you applied the previous patch, revert it, as it's
> wrong. This might fix the issue:
>
> diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h
> index d50fb59..0f13590 100644
> --- a/src/rgw/rgw_rados.h
> +++ b/src/rgw/rgw_rados.h
> @@ -298,6 +298,9 @@ public:
>
>    bool has_tail() {
>      if (explicit_objs) {
> +      if (objs.size() == 1) {
> +        return head_obj != objs[0];
> +      }
>        return (objs.size() >= 2);
>      }
>      return (obj_size > head_size);
>
> Let me know if it works for you.

It doesn't build at all.

rgw/rgw_rados.h: In member function ‘bool RGWObjManifest::has_tail()’:
rgw/rgw_rados.h:302:34: error: no match for ‘operator!=’ in
‘((RGWObjManifest*)this)->RGWObjManifest::head_obj !=
((RGWObjManifest*)this)->RGWObjManifest::objs.std::map<_Key, _Tp,
_Compare, _Alloc>::operator[] [with _Key = long unsigned int, _Tp =
RGWObjManifestPart, _Compare = std::less<long unsigned int>, _Alloc =
std::allocator<std::pair<const long unsigned int, RGWObjManifestPart>
>, std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type =
RGWObjManifestPart, std::map<_Key, _Tp, _Compare, _Alloc>::key_type =
long unsigned int]((* &0u))’
...



Cheers,

   Sylvain
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h
index d50fb59..0f13590 100644
--- a/src/rgw/rgw_rados.h
+++ b/src/rgw/rgw_rados.h
@@ -298,6 +298,9 @@  public:

   bool has_tail() {
     if (explicit_objs) {
+      if (objs.size() == 1) {
+        return head_obj != objs[0];
+      }
       return (objs.size() >= 2);
     }
     return (obj_size > head_size);