Guarantees ========== MMDB-level guarantees --------------- * All 0L writes change MMDB instantly. * Transaction write works as one atomic write. Queue-level guarantees ---------------------- This level is the mediator between MMDB and filesystem levels. This level includes the pre-write compression buffer. * Queue requests occur in the same orders as they were acted upon at MMDB level and in the same order as they will be acted upon at filesystem level. * DB can't close until all requests are done. * No request can crash the task. * Every request eventually succeedes or fails (except for the case of runtime termination). Buffer-specific guarantees: * If buffer dump was ever requested, then this request (queued or indirect) will eventually be satisfied. Filesystem-level guarantees --------------------------- * If main file exists without .recover or .truncate_flag, then it's valid. * If .recover file is present, then .backup is valid. * If .truncate_flag is present, then .truncate is valid and first :code:`.truncate_target()` (contents of .truncate) characters of main file are valid. * Every write is final and irreversible (can't be reversed unintentionally due to termination), otherwise it's not considered done. That's achieved using :code:`os.fsync`. Performance guarantees ---------------------- * No normal sync methods (except for :code:`io2db`/:code:`db2io` if they're supplied with blocking :code:`IO`) block on IO. Other methods are explicitly marked with postfix :code:`_sync`. * All requests are resolved as soon as their conditions are met.