Bug #53060
closedUnable to load libceph_snappy.so due to undefined symbol _ZTIN6snappy6SourceE in snappy 1.1.9
0%
Description
If you try to run Ceph with snappy 1.1.9 installed, ceph status
will show HEALTH_WARN, and tell you that your OSDs "have broken BlueStore compression". ceph health detail
will tell you that each of your OSDs is "unable to load:snappy". The OSD logs will show something like this:
Oct 27 08:55:33 node1 ceph-osd[561817]: load failed dlopen(): "/usr/lib64/ceph/compressor/libceph_snappy.so: undefined symbol: _ZTIN6snappy6SourceE" or "/usr/lib64/ceph/libceph_snappy.so: cannot open shared object file: No such file or directory" Oct 27 08:55:33 node1 ceph-osd[561817]: create cannot load compressor of type snappy
This is because RTTI was disabled in snappy 1.1.9, so the typeinfo for the snappy::Source
class - which Ceph's SnappyCompressor creates a subclass of - isn't included in libsnappy.so. Ceph still builds just fine, because the compressors are built as shared libraries. The problem only manifests when our snappy plugin is dlopen()ed at runtime, and then the linker kicks in and can't find that missing symbol.
This would ideally be fixed by getting RTTI re-enabled in snappy, so I've gone ahead and opened https://github.com/google/snappy/pull/144