4 stable releases
2.1.1 | Oct 9, 2024 |
---|---|
2.1.0 | Dec 4, 2023 |
2.0.0 | Apr 28, 2023 |
1.0.0 | Apr 4, 2023 |
#157 in Unix APIs
18,222 downloads per month
38KB
660 lines
shellflip
Graceful process restarts in Rust.
This crate facilitates upgrading or reconfiguring a service without disrupting existing connections. This is achieved by forking the process and communicating a small amount of state between the old and new processes; once the new process has started successfully the old process may terminate.
This crate has the following goals:
- No old code keeps running after a successful upgrade (and inevitable shutdown of the old process)
- The new process has a grace period for performing initialisation
- Crashing during initialisation is OK
- Only a single upgrade is ever run in parallel
- It is possible for the user/process initiating the upgrade to know if the upgrade succeeded
Inspired by the tableflip go package but not a direct replacement.
Using the library
A full example is given in the restarter example service.
The main struct of interest is RestartConfig
which has methods for detecting or initiating
restart. For shutting down a restarted process, the ShutdownCoordinator
provides the means for
both signalling a shutdown event to spawned tasks, and awaiting their completion.
License
BSD licensed. See the LICENSE file for details.
🦀ノ( º _ ºノ) - respect crables!
Dependencies
~6–17MB
~201K SLoC