Re: Caught the first erroneous translated errorcode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 19-6-2017 16:55, Gregory Farnum wrote:
> On Mon, Jun 19, 2017 at 7:46 AM, Willem Jan Withagen <wjw@xxxxxxxxxxx> wrote:
>> Op 19-6-2017 om 16:31 schreef Sage Weil:
>>>
>>> On Mon, 19 Jun 2017, Willem Jan Withagen wrote:
>>>>
>>>> On 19-6-2017 14:56, Jason Dillaman wrote:
>>>>>
>>>>> On Sun, Jun 18, 2017 at 1:18 PM, Willem Jan Withagen <wjw@xxxxxxxxxxx>
>>>>> wrote:
>>>>>>
>>>>>> librbd/io/AioCompletion.cc:199:ssize_t
>>>>>> AioCompletion::get_return_value() {
>>>>>
>>>>>
>>>>> librbd just wraps librados, so I would think all the error codes
>>>>> should have already been properly translated before it reaches this
>>>>> level since otherwise any internal librbd error logging will output
>>>>> the incorrect failure reason. I'd suspect most of the client-side
>>>>> handling should probably be handled inside osdc/Objecter.h/cc..
>>>>
>>>> Hi Jason,
>>>>
>>>> Thanx for the pointer. Changing any of the librbd stuff did indeed not
>>>> result in a working rados-stripper.sh
>>>>
>>>> Objecter.{h,cc} already had the forward error rewrite. I added the
>>>> reverse in the original patch. But obviously that is not enough (yet)
>>>> So I'll start digging a bit more in the librados files as you suggested.
>>>
>>> I think the place to do this is in MOSDOpReply.. that alone should be
>>> enough to do the translate as the value passes over the wire.
>>
>>
>> Hi Sage,
>>
>> Tehe interesting part of this is that ALL tests but one actually work. So
>> all tests that start
>> a cluster thru vstart actually do work. EXCEPT for rados-stiper.sh.
>>
>> Now this make me question what is different with the stiper code that causes
>> an ECANCEL
>> to not be translated back ot FreeBSD code.
> 
> I'm not sure exactly how it's arranged, but libradosstriper is layered
> on top of librados and I don't think anybody's done any of the errno
> translation work for other platforms that you got pointed at.
> Depending on how it's done that may mean it's missing big chunks --
> for instance, if libradosstriper embeds error codes that aren't
> touched by librados, it will need to do its own translation.

Hi Greg,

The error is on the path server -> client.

How do I know: FreeBSD highest error number atm is 96.
ECANCELD is an expected return value in the stiper-code.
So server-side  translation seems to be doing what it should.
Client-side code is:

1260 ./src/libradosstriper/RadosStriperImpl.cc
====
  bl.append(oss.str());
  writeOp.setxattr(XATTR_SIZE, bl);
  rc = m_ioCtx.operate(firstObjOid, &writeOp);
  // return current size
  *size = curSize;
  // handle case where objectsize is already bigger than size
  if (-ECANCELED == rc)
    rc = 0;
  if (rc) {
    unlockObject(soid, *lockCookie);
    lderr(cct()) << "RadosStriperImpl::openStripedObjectForWrite : "
                   << "could not set new size for "
                   << soid << " : rc = " << rc << dendl;
  }
  return rc;
====

So I have ot drill down into m_ioCtx.operate.
But I'll first look at Sage's suggestion.

--WjW



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



[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux