This repository has been archived by the owner on Feb 12, 2019. It is now read-only.
Recover Berkeley DB before opening it by default #99
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
If Berkeley DB files contain stale locks (for example if
sm
is killed with signalKILL
), then thesm
process will hang waiting on a futex forever.Example log from
sm
:Corresponding strace:
Relevant Stack Overflow question:
http://stackoverflow.com/questions/12400663/berkeley-db-stuck-at-futex-wait-because-of-previous-abnormal-quit-during-c-api
This PR adds an
open
option that will clear stale locks, if any, before opening the db environment preventing this condition. I could reliably reproduce this as the init script here useskillproc
, which will send SIGKILL after SIGTERM and waiting 5 seconds by default.DB_RECOVER
reference:http://docs.oracle.com/cd/E17076_04/html/api_reference/C/envopen.html#envopen_DB_RECOVER
Comments welcome!