Project

General

Profile

Actions

Bug #53060

closed

Unable to load libceph_snappy.so due to undefined symbol _ZTIN6snappy6SourceE in snappy 1.1.9

Added by Tim Serong over 2 years ago. Updated 10 months ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
OSD
Target version:
-
% Done:

0%

Source:
Tags:
Backport:
Regression:
No
Severity:
3 - minor
Reviewed:
Affected Versions:
ceph-qa-suite:
Pull request ID:
Crash signature (v1):
Crash signature (v2):

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

Actions

Also available in: Atom PDF