From fbede601f5b962d8c7e7f67f01e64f05e556ca71 Mon Sep 17 00:00:00 2001 From: Tony Arcieri Date: Mon, 8 Jun 2020 16:34:27 -0700 Subject: [PATCH] Replace `atomicwrites` dependency with `tempfile` The `atomicwrites` crate uses some unmaintained/deprecated dependencies and itself now recommends `tempfile`. Since this is potentially implicated in the hangs, we might as well update to a well-maintained dependency. --- Cargo.lock | 69 ++-------------------------------------------- Cargo.toml | 2 +- src/chain/state.rs | 11 ++++++-- 3 files changed, 12 insertions(+), 70 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0bde6d35..db695b13 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -148,17 +148,6 @@ dependencies = [ "syn 1.0.30", ] -[[package]] -name = "atomicwrites" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a2baf2feb820299c53c7ad1cc4f5914a220a1cb76d7ce321d2522a94b54651f" -dependencies = [ - "nix 0.14.1", - "tempdir", - "winapi 0.3.8", -] - [[package]] name = "atty" version = "0.2.14" @@ -572,12 +561,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" - [[package]] name = "fuchsia-zircon" version = "0.3.3" @@ -992,7 +975,7 @@ dependencies = [ "hidapi", "lazy_static", "libc", - "nix 0.13.1", + "nix", "quick-error", ] @@ -1131,19 +1114,6 @@ dependencies = [ "void", ] -[[package]] -name = "nix" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c722bee1037d430d0f8e687bbdbf222f27cc6e4e68d5caf630857bb2b6dbdce" -dependencies = [ - "bitflags", - "cc", - "cfg-if", - "libc", - "void", -] - [[package]] name = "num-integer" version = "0.1.42" @@ -1356,19 +1326,6 @@ dependencies = [ "proc-macro2 1.0.18", ] -[[package]] -name = "rand" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" -dependencies = [ - "fuchsia-cprng", - "libc", - "rand_core 0.3.1", - "rdrand", - "winapi 0.3.8", -] - [[package]] name = "rand" version = "0.7.3" @@ -1425,15 +1382,6 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "redox_syscall" version = "0.1.56" @@ -1863,16 +1811,6 @@ dependencies = [ "xattr", ] -[[package]] -name = "tempdir" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" -dependencies = [ - "rand 0.4.6", - "remove_dir_all", -] - [[package]] name = "tempfile" version = "3.1.0" @@ -1881,7 +1819,7 @@ checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" dependencies = [ "cfg-if", "libc", - "rand 0.7.3", + "rand", "redox_syscall", "remove_dir_all", "winapi 0.3.8", @@ -1986,7 +1924,6 @@ name = "tmkms" version = "0.7.3" dependencies = [ "abscissa_core", - "atomicwrites", "bytes", "chacha20poly1305", "chrono", @@ -1999,7 +1936,7 @@ dependencies = [ "once_cell", "prost-amino", "prost-amino-derive", - "rand 0.7.3", + "rand", "rpassword", "serde", "serde_json", diff --git a/Cargo.toml b/Cargo.toml index c04b9e60..61d76062 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,6 @@ edition = "2018" [dependencies] abscissa_core = "0.5" -atomicwrites = "0.2" bytes = "0.5" chacha20poly1305 = "0.4" chrono = "0.4" @@ -35,6 +34,7 @@ signatory-secp256k1 = "0.19" signatory-ledger-tm = { version = "0.19", optional = true } subtle = "2" subtle-encoding = { version = "0.5", features = ["bech32-preview"] } +tempfile = "3" tendermint = "0.13" thiserror = "1" wait-timeout = "0.2" diff --git a/src/chain/state.rs b/src/chain/state.rs index 4b33e137..efe67d0f 100644 --- a/src/chain/state.rs +++ b/src/chain/state.rs @@ -11,12 +11,12 @@ use crate::{ error::{Error, ErrorKind::*}, prelude::*, }; -use atomicwrites::{AtomicFile, OverwriteBehavior}; use std::{ fs, io::{self, prelude::*}, path::{Path, PathBuf}, }; +use tempfile::NamedTempFile; use tendermint::consensus; /// State tracking for double signing prevention @@ -187,8 +187,13 @@ impl State { let json = serde_json::to_string(&self.consensus_state)?; - AtomicFile::new(&self.state_file_path, OverwriteBehavior::AllowOverwrite) - .write(|f| f.write_all(json.as_bytes()))?; + let state_file_dir = self.state_file_path.parent().unwrap_or_else(|| { + panic!("state file cannot be root directory"); + }); + + let mut state_file = NamedTempFile::new_in(state_file_dir)?; + state_file.write_all(json.as_bytes())?; + state_file.persist(&self.state_file_path)?; debug!( "successfully wrote new consensus state to {}",