lighthouse/common
Michael Sproul 58e52f8f40 Write validator definitions atomically (#2338)
## Issue Addressed

Closes https://github.com/sigp/lighthouse/issues/2159

## Proposed Changes

Rather than trying to write the validator definitions to disk directly, use a temporary file called `.validator_defintions.yml.tmp` and then atomically rename it to `validator_definitions.yml`. This avoids truncating the primary file, which can cause permanent damage when the disk is full.

The same treatment is also applied to the validator key cache, although the situation is less dire if it becomes corrupted because it can just be deleted without the user having to reimport keys or resupply passwords.

## Additional Info

* `File::create` truncates upon opening: https://doc.rust-lang.org/std/fs/struct.File.html#method.create
* `fs::rename` uses `rename` on UNIX and `MoveFileEx` on Windows: https://doc.rust-lang.org/std/fs/fn.rename.html
* UNIX `rename` call is atomic: https://unix.stackexchange.com/questions/322038/is-mv-atomic-on-my-fs
* Windows `MoveFileEx` is _not_ atomic in general, and Windows lacks any clear API for atomic file renames :(
   https://stackoverflow.com/questions/167414/is-an-atomic-file-rename-with-overwrite-possible-on-windows

## Further Work

* Consider whether we want to try a different Windows syscall as part of #2333. The `rust-atomicwrites` crate seems promising, but actually uses the same syscall under the hood presently: https://github.com/untitaker/rust-atomicwrites/issues/27.
2021-05-12 02:04:44 +00:00
..
account_utils Write validator definitions atomically (#2338) 2021-05-12 02:04:44 +00:00
clap_utils fix default network handling (#2029) 2020-12-08 05:41:10 +00:00
compare_fields Check for unused deps in CI (#1262) 2020-06-14 10:59:50 +10:00
compare_fields_derive Update external deps (#1711) 2020-10-05 08:22:19 +00:00
deposit_contract Allow specifying alternative url for deposit_contract (#2295) 2021-04-16 06:47:34 +00:00
directory fix default network handling (#2029) 2020-12-08 05:41:10 +00:00
eth2 Add SensitiveUrl to redact user secrets from endpoints (#2326) 2021-05-04 01:59:51 +00:00
eth2_config Add prater testnet config (#2260) 2021-03-17 00:47:06 +00:00
eth2_interop_keypairs Fix new clippy lints (#2036) 2020-12-03 01:10:26 +00:00
eth2_network_config v1.2.1 (#2263) 2021-03-18 04:20:46 +00:00
eth2_wallet_manager Use OS file locks in validator client (#1958) 2020-11-26 11:25:46 +00:00
fallback Fallback nodes for eth1 access (#1918) 2020-11-27 08:37:44 +00:00
hashset_delay Update to tokio 1.1 (#2172) 2021-02-10 23:29:49 +00:00
lighthouse_metrics Add metrics for beacon block propagation (#2173) 2021-02-04 05:33:56 +00:00
lighthouse_version v1.3.0 (#2310) 2021-04-13 22:46:34 +00:00
lockfile Fix clippy errors on tests (#2160) 2021-01-28 23:31:06 +00:00
logging Update external deps (#1711) 2020-10-05 08:22:19 +00:00
lru_cache Keep track of failed head chains and prevent re-lookups (#1534) 2020-08-18 03:54:09 +00:00
remote_signer_consumer Add SensitiveUrl to redact user secrets from endpoints (#2326) 2021-05-04 01:59:51 +00:00
rest_types Update to tokio 1.1 (#2172) 2021-02-10 23:29:49 +00:00
sensitive_url Add SensitiveUrl to redact user secrets from endpoints (#2326) 2021-05-04 01:59:51 +00:00
slot_clock Add specific log and metric for delayed blocks (#2308) 2021-04-13 02:16:59 +00:00
task_executor Add testing for beacon node and validator client CLI flags (#2311) 2021-05-06 00:36:22 +00:00
test_random_derive Update external deps (#1711) 2020-10-05 08:22:19 +00:00
validator_dir VC: accept unknown fields in chain spec (#2277) 2021-03-26 04:53:57 +00:00
warp_utils Switch back to warp with cors wildcard support (#2211) 2021-02-18 22:33:12 +00:00
README.md Directory Restructure (#1163) 2020-05-18 21:24:23 +10:00

eth2

Common crates containing eth2-specific logic.