On Thu, Oct 26, 2017 at 3:06 AM, Josh Durgin <jdurgin@xxxxxxxxxx> wrote: > > > The most common culprit for ABI issues is bufferlist since we expose the > internal ceph type directly. This has caused problems with almost every > release lately. > > At this point it it seems worth finally separating the internal and > external types there, without doing a full new version of librados. i don't think we can do this without doing a new version of librados. the legacy librados clients are still expecting the internal types at some degree, that's how we noticed the problem (http://tracker.ceph.com/issues/21573), where the librados client was compiled with an old librados header, and inlined the old constructor in its binary. and some APIs force us to do so, for example, "ObjectReadOperation::getxattrs(std::map<std::string, bufferlist> *pattrs, int *prval)" requires a complete type definition of ceph::bufferlist. in other words, the buffer.h exposing the innards of ceph::buffer types was shipped with librados2, and the librados client is using them, we can hardly fix this w/o bumping the so version. > > It may be possible to do this without introducing a new type, by freezing > the existing bufferlist as the external type for librados and librbd, and > making a conversion if necessary. We could add a true pimpl wrapper as a new > type to avoid the overhead of conversion if it is a problem. yeah, probably by introducing a bufferlist2, which is a pimpl wrapper, and start to deprecate APIs like getxattrs() with the ones using bufferlist2. and convert bufferlist to the actual bufferlist in the legacy APIs. feasible, but a pains-taking plan.. i still like librados3. =) -- Regards Kefu Chai -- 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