-
Notifications
You must be signed in to change notification settings - Fork 178
mv startup segfault
- merged to master -
- code complete - January 7, 2016
- development started - January 7, 2016
A customer reported random eleveldb.so segfaults during Riak startups with the newly released Riak 2.1.3. There was no new code in the function where the segfault occurred, VersionSet::PickCompaction(). Analysis of the code paths that can reach PickCompaction() lead to the observation that a new DBImpl object could be used by a background thread before its construction completed.
This behavior is the interaction of two features created years apart. The flexcache feature (automated cache sizing) added a global list to track all DBImpl objects created. The point of tracking the objects was to allow background code to initiate cache size changes within each object. Recent compaction selection code also used DBImpl objects global list to initiate grooming compactions based upon time and/or grooming completion of a different DBImpl object.