viewstamped-replication 0.9.0

A Rust-based implementation of the Viewstamped Replication consensus protocol.
Documentation
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.1.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.9.0] - 2024-03-05
### Added
- Support for high message drop rates.
- Detection for clients sending concurrent requests.
- Command-line argument parsing for options in the simulation.
- Ignore `GetState` messages when the replica is missing the requested operations.

### Changed
- Added a bound to the client channels in the simulation.
- Split the checkpoint logic so that callers have a consistent way to checkpoint.
- Switched the simulation to use tokio for improved efficiency.
- Client table no longer auto-starts requests on the primary.

### Fixed
- Off-by-one error with log compactions.

## [0.8.0] - 2024-03-05

### Added

- State transfer support.
- An example of an adder server that runs a single request.
- An example of a simulation using channels and threads.

### Removed

- Sender validation.
- The need for non-volatile state in replicas to support recovery.

### Changed

- The entire protocol implementation now more closely aligns with the newer revisited description.
- Separated messages into requests and protocol messages.

## [0.7.0] - 2024-02-12

### Added

- Validation that messages come from the correct type of senders.
- DoubleEndedIterator implementation for group iterator.
- Add support for non-determinism to services.
- Add an example of a basic file system.

## Changed

- Use select_all in primary and backup to process as many messages as possible.
- Switch request id to use UUID v7 instead of a counter.

## [0.6.0] - 2024-02-11

### Added

- Support for the recovery protocol.
- A local driver of the replication group to aid in testing.

### Changed

- Separated the role-specific logic into sub-modules.
- Updated backups to discard any message that is not a prepare or commit during normal operation.

## [0.5.0] - 2024-02-07

### Added

- Added the view change protocol

### Changed

- Rewrote some of the tests to improve re-usability.

### Removed

- Dead code of the previous implementation.

## [0.4.0] - 2024-02-05

### Changed

- Rewrote the entire replica and network from scratch modeled after Erlang's mailbox system.

## [0.3.0] - 2024-01-04

### Added

- Add a client struct and separate message processing by status and role.

## [0.2.0] - 2024-01-04

### Added

- Implementation of simplified VR without recovery.

## [0.1.0] - 2024-01-04

### Added

- Basic CI setup for automatic tagging and releases.
- Mostly-empty library crate.

[unreleased]: https://github.com/misalcedo/vr/compare/v0.1.0...HEAD

[0.1.0]: https://github.com/misalcedo/vr/releases/tag/v0.1.0