# HG changeset patch # User Matt Johnston # Date 1492356567 -28800 # Node ID 2710649ab71ed0f08c9747cb3c27160cf1ad9df6 # Parent 03167105f6deb2b20e4b58b8928d524202f84467 read/write params local file. untested diff -r 03167105f6de -r 2710649ab71e rust/Cargo.lock --- a/rust/Cargo.lock Sun Apr 16 22:50:20 2017 +0800 +++ b/rust/Cargo.lock Sun Apr 16 23:29:27 2017 +0800 @@ -2,6 +2,7 @@ name = "wort-templog" version = "0.1.0" dependencies = [ + "atomicwrites 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "base64 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "curl 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "docopt 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -41,6 +42,17 @@ ] [[package]] +name = "atomicwrites" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "nix 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] name = "base64" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -272,6 +284,19 @@ ] [[package]] +name = "nix" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "semver 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", + "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] name = "num-traits" version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -453,6 +478,14 @@ ] [[package]] +name = "tempdir" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] name = "thread-id" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -607,6 +640,7 @@ [metadata] "checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" "checksum aho-corasick 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "500909c4f87a9e52355b26626d890833e9e1d53ac566db76c36faa984b889699" +"checksum atomicwrites 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c4328d3fa4af4aedc582587976a0f74decc73f90ea7cae3d757c0535f983d16f" "checksum base64 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9892882c3bd89ed02dec391c128984c772b663a29700c32b5de0b33861cdf2bd" "checksum bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8dead7461c1127cf637931a1e50934eb6eee8bff2f74433ac7909e9afcee04a3" "checksum byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c40977b0ee6b9885c9013cd41d9feffdd22deb3bb4dc3a71d901cc7a77de18c8" @@ -635,6 +669,7 @@ "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" "checksum net2 0.2.27 (registry+https://github.com/rust-lang/crates.io-index)" = "18b9642ad6222faf5ce46f6966f59b71b9775ad5758c9e09fcf0a6c8061972b4" "checksum nix 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a7bb1da2be7da3cbffda73fc681d509ffd9e665af478d2bee1907cee0bc64b2" +"checksum nix 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a0d95c5fa8b641c10ad0b8887454ebaafa3c92b5cd5350f8fc693adafd178e7b" "checksum num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "e1cbfa3781f3fe73dc05321bed52a06d2d491eaa764c52335cf4399f046ece99" "checksum num_cpus 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a18c392466409c50b87369414a2680c93e739aedeb498eb2bff7d7eb569744e2" "checksum openssl-probe 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d98df0270d404ccd3c050a41d579c52d1db15375168bb3471e04ec0f5f378daf" @@ -660,6 +695,7 @@ "checksum syn 0.11.10 (registry+https://github.com/rust-lang/crates.io-index)" = "171b739972d9a1bfb169e8077238b51f9ebeaae4ff6e08072f7ba386a8802da2" "checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" "checksum sysfs_gpio 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "90fc056b3e1a0f1cd10de67b14b62b85dfe450134e87bd9af2f066981c6ebb75" +"checksum tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "87974a6f5c1dfb344d733055601650059a3363de2a6104819293baff662132d6" "checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" "checksum thread-id 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4437c97558c70d129e40629a5b385b3fb1ffac301e63941335e4d354081ec14a" "checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" diff -r 03167105f6de -r 2710649ab71e rust/Cargo.toml --- a/rust/Cargo.toml Sun Apr 16 22:50:20 2017 +0800 +++ b/rust/Cargo.toml Sun Apr 16 23:29:27 2017 +0800 @@ -23,6 +23,7 @@ serde_json = "0.9" base64 = "0.4" libc = "0.2" +atomicwrites = "0.1" # linux only [target.linux.dependencies] diff -r 03167105f6de -r 2710649ab71e rust/src/main.rs --- a/rust/src/main.rs Sun Apr 16 22:50:20 2017 +0800 +++ b/rust/src/main.rs Sun Apr 16 23:29:27 2017 +0800 @@ -9,6 +9,7 @@ extern crate curl; extern crate serde_json; extern crate libc; +extern crate atomicwrites; #[macro_use] extern crate lazy_static; diff -r 03167105f6de -r 2710649ab71e rust/src/params.rs --- a/rust/src/params.rs Sun Apr 16 22:50:20 2017 +0800 +++ b/rust/src/params.rs Sun Apr 16 23:29:27 2017 +0800 @@ -3,6 +3,7 @@ extern crate rand; extern crate serde_json; extern crate base64; +extern crate atomicwrites; use std::time::Duration; use std::io; @@ -11,6 +12,8 @@ use std::sync::{Arc,Mutex}; use std::error::Error; use std::cell::{Cell,RefCell}; +use std::fs::File; +use std::io::Read; use tokio_core::reactor::Interval; use tokio_core::reactor::Handle; @@ -49,12 +52,15 @@ } } + fn try_load(filename: &str) -> Result { + let mut s = String::new(); + File::open(filename)?.read_to_string(&mut s)?; + Ok(serde_json::from_str(&s)?) + } + pub fn load(config: &Config) -> Params { - // generate random epoch on success. - // TODO: return failure? or just return default() ? - let mut p = Params::defaults(); - - unimplemented!(); + Self::try_load(&config.PARAMS_FILE) + .unwrap_or_else(|_| Params::defaults()) } } @@ -128,6 +134,7 @@ let mut le = self.last_etag.borrow_mut(); *le = r.etag; if le.split('-').next().unwrap() == &self.epoch { + self.write_params(&r.params); Ok(r.params) } else { Err(TemplogError::new(&format!("Bad epoch from server '{}' expected '{}'", *le, self.epoch))) @@ -143,6 +150,13 @@ } } + fn write_params(&self, params: &Params) { + let p = atomicwrites::AtomicFile::new(&self.config.PARAMS_FILE, atomicwrites::AllowOverwrite); + p.write(|f| { + serde_json::to_writer(f, params) + }); + } + fn step(rself: Rc) -> Box> { if rself.session.borrow().is_none() {