Skip to content

mv startup segfault

Matthew Von-Maszewski edited this page Jan 8, 2016 · 8 revisions

Status

  • merged to master -
  • code complete - January 7, 2016
  • development started - January 7, 2016

History / Context

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.

Branch Description

db/db_impl.cc

Clone this wiki locally