All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Rolling back the first entry of a log file caused its data to become skipped during recovery due to a small logic bug that rewrote the file's header if no entries had been fsynced. Thanks to @losfair for the succinct test case in issue #14.
WriteAheadLog::checkpoint_active()
is a new function that checkpoints the currently stored data, regardless of whether the configured thresholds are met. This function returns after the active file has been rotated and the checkpointing thread has been notified of the file to checkpoint. Thanks to @blakesmith for implementing this in #11
LogManager::checkpoint_to
now has an additional parameter,wal: &WriteAheadLog
. This is provided for convenience because it may be necessary to randomly access information in the WAL while performing a checkpointing operation.
LogPosition::serialize_to
/LogPosition::deserialize_from
provide methods for reading and writing aLogPosition
from an arbitraryWrite
/Read
implementor (respectively). This uses a fixed-length serialization with a length ofLogPosition::SERIALIZED_LENGTH
-- 16 bytes.
WriteAheadLog::shutdown()
now no longer requires all instances ofWriteAheadLog
to be dropped to succeed.
- When the WAL recycles a segment file, the
LogPosition
returned is now correct. Previously, returnedLogPosition
s would contain the segment file's old id, causing those positions to be unreadable. - When reading from a
LogPosition
, if the data has not been flushed or synchronized to disk yet, the read will be blocked until the sync operation finishes.
- Initial public preview release. No stability guarantees are being made at this stage. Feedback is welcome.