Move the work out of the storage engines and up to the storage system, to drive this functionality across all storage engines.
Periodically the following must happen:
- If journaling is on, flush the journal
- If not journaling, flush via RecoveryUnit::waitUntilDurable
- If waitUntilDurable fails, flushAllFiles
The two periods are journalCommitIntervalMs (30/100 default) and syncDelaySecs (60 default).
In addition, hook-in or replace, the current JournalListener functionality.