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