From 84e2292ed00e96d48f89ee5fe0d5db657086ab25 Mon Sep 17 00:00:00 2001 From: Jedrzej Stuczynski Date: Thu, 16 Jan 2020 13:29:00 +0000 Subject: [PATCH 1/8] Moved mix presence reporting from std::thread to tokio task --- mixnode/src/node/mod.rs | 8 +++++++- mixnode/src/node/presence.rs | 6 ++++-- mixnode/src/node/runner.rs | 9 +-------- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/mixnode/src/node/mod.rs b/mixnode/src/node/mod.rs index a2546d279a..f6e151803d 100644 --- a/mixnode/src/node/mod.rs +++ b/mixnode/src/node/mod.rs @@ -1,4 +1,5 @@ use crate::mix_peer::MixPeer; +use crate::node; use crate::node::metrics::MetricsReporter; use curve25519_dalek::montgomery::MontgomeryPoint; use curve25519_dalek::scalar::Scalar; @@ -214,7 +215,7 @@ impl MixNode { } } - pub fn start(&self) -> Result<(), Box> { + pub fn start(&self, config: node::Config) -> Result<(), Box> { // Create the runtime, probably later move it to MixNode itself? let mut rt = Runtime::new()?; @@ -227,6 +228,11 @@ impl MixNode { let pub_key_str = base64::encode_config(&self.public_key.to_bytes().to_vec(), base64::URL_SAFE); + rt.spawn({ + let presence_notifier = presence::Notifier::new(&config); + presence_notifier.run() + }); + let metrics = MetricsReporter::new().add_arc_mutex(); rt.spawn(MetricsReporter::run_received_metrics_control( metrics.clone(), diff --git a/mixnode/src/node/presence.rs b/mixnode/src/node/presence.rs index 18fcd66136..483fee0981 100644 --- a/mixnode/src/node/presence.rs +++ b/mixnode/src/node/presence.rs @@ -36,10 +36,12 @@ impl Notifier { .unwrap(); } - pub fn run(&self) { + pub async fn run(self) { + let delay_duration = Duration::from_secs(5); + loop { self.notify(); - thread::sleep(Duration::from_secs(5)); + tokio::time::delay_for(delay_duration).await; } } } diff --git a/mixnode/src/node/runner.rs b/mixnode/src/node/runner.rs index 93b16381ab..8f120cc0a7 100644 --- a/mixnode/src/node/runner.rs +++ b/mixnode/src/node/runner.rs @@ -1,11 +1,8 @@ use crate::banner; use crate::node; -use crate::node::presence; use crate::node::MixNode; use clap::ArgMatches; - use std::net::ToSocketAddrs; -use std::thread; fn print_binding_warning(address: &str) { println!("\n##### WARNING #####"); @@ -29,11 +26,7 @@ pub fn start(matches: &ArgMatches) { ); let mix = MixNode::new(&config); - thread::spawn(move || { - let notifier = presence::Notifier::new(&config); - notifier.run(); - }); - mix.start().unwrap(); + mix.start(config).unwrap(); } fn new_config(matches: &ArgMatches) -> node::Config { From 773fbceff74d3ddffb3d821bc76b2508215457a3 Mon Sep 17 00:00:00 2001 From: Jedrzej Stuczynski Date: Thu, 16 Jan 2020 13:37:12 +0000 Subject: [PATCH 2/8] Unused import --- mixnode/src/node/presence.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/mixnode/src/node/presence.rs b/mixnode/src/node/presence.rs index 483fee0981..8f420c5ac4 100644 --- a/mixnode/src/node/presence.rs +++ b/mixnode/src/node/presence.rs @@ -2,7 +2,6 @@ use crate::node; use directory_client::presence::MixNodePresence; use directory_client::requests::presence_mixnodes_post::PresenceMixNodesPoster; use directory_client::DirectoryClient; -use std::thread; use std::time::Duration; pub struct Notifier { From 09e88da1a9565523aca57917efe8803f83610446 Mon Sep 17 00:00:00 2001 From: Jedrzej Stuczynski Date: Thu, 16 Jan 2020 13:42:50 +0000 Subject: [PATCH 3/8] Mixnode no longer crashing when failed to send metrics or presence --- mixnode/Cargo.toml | 1 + mixnode/src/node/metrics.rs | 18 ++++++++++-------- mixnode/src/node/presence.rs | 9 +++++---- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/mixnode/Cargo.toml b/mixnode/Cargo.toml index 84097d012e..f918e70df9 100644 --- a/mixnode/Cargo.toml +++ b/mixnode/Cargo.toml @@ -12,6 +12,7 @@ base64 = "0.11.0" clap = "2.33.0" curve25519-dalek = "1.2.3" futures = "0.3.1" +log = "0.4.8" tokio = { version = "0.2", features = ["full"] } ## internal diff --git a/mixnode/src/node/metrics.rs b/mixnode/src/node/metrics.rs index db737a2c7d..adc1d74e48 100644 --- a/mixnode/src/node/metrics.rs +++ b/mixnode/src/node/metrics.rs @@ -4,6 +4,7 @@ use directory_client::DirectoryClient; use futures::channel::mpsc; use futures::lock::Mutex; use futures::StreamExt; +use log::{debug, error}; use std::collections::HashMap; use std::sync::Arc; use std::time::Duration; @@ -80,14 +81,15 @@ impl MetricsReporter { tokio::time::delay_for(delay_duration).await; let (received, sent) = MetricsReporter::acquire_and_reset_metrics(metrics.clone()).await; - directory_client - .metrics_post - .post(&MixMetric { - pub_key: pub_key_str.clone(), - received, - sent, - }) - .unwrap(); + + match directory_client.metrics_post.post(&MixMetric { + pub_key: pub_key_str.clone(), + received, + sent, + }) { + Err(err) => error!("failed to send metrics - {:?}", err), + Ok(_) => debug!("sent metrics information"), + } } } } diff --git a/mixnode/src/node/presence.rs b/mixnode/src/node/presence.rs index 8f420c5ac4..678d8af880 100644 --- a/mixnode/src/node/presence.rs +++ b/mixnode/src/node/presence.rs @@ -2,6 +2,7 @@ use crate::node; use directory_client::presence::MixNodePresence; use directory_client::requests::presence_mixnodes_post::PresenceMixNodesPoster; use directory_client::DirectoryClient; +use log::{debug, error}; use std::time::Duration; pub struct Notifier { @@ -29,10 +30,10 @@ impl Notifier { } pub fn notify(&self) { - self.net_client - .presence_mix_nodes_post - .post(&self.presence) - .unwrap(); + match self.net_client.presence_mix_nodes_post.post(&self.presence) { + Err(err) => error!("failed to send presence - {:?}", err), + Ok(_) => debug!("sent presence information"), + } } pub async fn run(self) { From 3ab4b94a8a8f3fb2a946d1ce1fb9157f40cbd0f9 Mon Sep 17 00:00:00 2001 From: Jedrzej Stuczynski Date: Thu, 16 Jan 2020 13:44:39 +0000 Subject: [PATCH 4/8] Provider no longer crashing when failed to send presence --- sfw-provider/Cargo.toml | 1 + sfw-provider/src/provider/presence.rs | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/sfw-provider/Cargo.toml b/sfw-provider/Cargo.toml index 214aaaa8ca..a738e76906 100644 --- a/sfw-provider/Cargo.toml +++ b/sfw-provider/Cargo.toml @@ -13,6 +13,7 @@ clap = "2.33.0" curve25519-dalek = "1.2.3" hex = "0.4.0" futures = "0.3.1" +log = "0.4.8" rand = "0.7.2" tokio = { version = "0.2.4", features = ["full"] } sha2 = "0.8.0" diff --git a/sfw-provider/src/provider/presence.rs b/sfw-provider/src/provider/presence.rs index 94abc77c54..567b0a56dc 100644 --- a/sfw-provider/src/provider/presence.rs +++ b/sfw-provider/src/provider/presence.rs @@ -4,6 +4,7 @@ use directory_client::presence::MixProviderPresence; use directory_client::requests::presence_providers_post::PresenceMixProviderPoster; use directory_client::DirectoryClient; use futures::lock::Mutex as FMutex; +use log::{debug, error}; use std::net::SocketAddr; use std::sync::Arc; use std::time::Duration; @@ -52,10 +53,10 @@ impl Notifier { } pub fn notify(&self, presence: MixProviderPresence) { - self.net_client - .presence_providers_post - .post(&presence) - .unwrap(); + match self.net_client.presence_providers_post.post(&presence) { + Err(err) => error!("failed to send presence - {:?}", err), + Ok(_) => debug!("sent presence information"), + } } pub async fn run(self) { From dcb548ee8e03b0153a0855d64c1c2d9f4016398e Mon Sep 17 00:00:00 2001 From: Jedrzej Stuczynski Date: Thu, 16 Jan 2020 14:58:55 +0000 Subject: [PATCH 5/8] Updated sample validator config to point to the qa mixnet --- sample-configs/validator-config.toml.sample | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sample-configs/validator-config.toml.sample b/sample-configs/validator-config.toml.sample index ec7be28f32..c60c223287 100644 --- a/sample-configs/validator-config.toml.sample +++ b/sample-configs/validator-config.toml.sample @@ -1,7 +1,7 @@ [healthcheck] -directory-server = "http://localhost:8080" -#directory-server = "https://directory.nymtech.net" +#directory-server = "http://localhost:8080" +directory-server = "https://qa-directory.nymtech.net" interval = 10.0 test-packets-per-node = 2 # in seconds resolution-timeout = 5 # in seconds \ No newline at end of file From 851082dc6e9641f5705e76c0d0af47127ab7f379 Mon Sep 17 00:00:00 2001 From: Jedrzej Stuczynski Date: Thu, 16 Jan 2020 14:59:04 +0000 Subject: [PATCH 6/8] Cargo.lock updates --- Cargo.lock | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index b1d01ae5e6..a64cc05125 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1381,6 +1381,7 @@ dependencies = [ "curve25519-dalek", "directory-client", "futures 0.3.1", + "log", "sphinx", "tokio 0.2.9", ] @@ -1398,6 +1399,7 @@ dependencies = [ "futures 0.3.1", "hex", "hmac", + "log", "rand 0.7.2", "serde", "serde_json", From 8d84523c32b96993b37bdc5719caf183e560e763 Mon Sep 17 00:00:00 2001 From: Jedrzej Stuczynski Date: Thu, 16 Jan 2020 15:01:34 +0000 Subject: [PATCH 7/8] Increased version numbers in cargo files --- Cargo.lock | 6 +++--- mixnode/Cargo.toml | 2 +- nym-client/Cargo.toml | 2 +- sfw-provider/Cargo.toml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a64cc05125..49fcae7f95 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1339,7 +1339,7 @@ dependencies = [ [[package]] name = "nym-client" -version = "0.3.0" +version = "0.3.1" dependencies = [ "addressing", "base64 0.11.0", @@ -1372,7 +1372,7 @@ dependencies = [ [[package]] name = "nym-mixnode" -version = "0.3.0" +version = "0.3.1" dependencies = [ "addressing", "base64 0.11.0", @@ -1388,7 +1388,7 @@ dependencies = [ [[package]] name = "nym-sfw-provider" -version = "0.3.0" +version = "0.3.1" dependencies = [ "base64 0.11.0", "built", diff --git a/mixnode/Cargo.toml b/mixnode/Cargo.toml index f918e70df9..32859e847a 100644 --- a/mixnode/Cargo.toml +++ b/mixnode/Cargo.toml @@ -1,7 +1,7 @@ [package] build = "build.rs" name = "nym-mixnode" -version = "0.3.0" +version = "0.3.1" authors = ["Dave Hrycyszyn ", "Jędrzej Stuczyński "] edition = "2018" diff --git a/nym-client/Cargo.toml b/nym-client/Cargo.toml index 913a1a7ad3..4c52dbd0fb 100644 --- a/nym-client/Cargo.toml +++ b/nym-client/Cargo.toml @@ -1,7 +1,7 @@ [package] build = "build.rs" name = "nym-client" -version = "0.3.0" +version = "0.3.1" authors = ["Dave Hrycyszyn ", "Jędrzej Stuczyński "] edition = "2018" diff --git a/sfw-provider/Cargo.toml b/sfw-provider/Cargo.toml index a738e76906..2ab7cc691f 100644 --- a/sfw-provider/Cargo.toml +++ b/sfw-provider/Cargo.toml @@ -1,7 +1,7 @@ [package] build = "build.rs" name = "nym-sfw-provider" -version = "0.3.0" +version = "0.3.1" authors = ["Dave Hrycyszyn ", "Jędrzej Stuczyński "] edition = "2018" From 325670e540ed0c80f421d2c86bb3ed065f1aebce Mon Sep 17 00:00:00 2001 From: Jedrzej Stuczynski Date: Thu, 16 Jan 2020 15:03:55 +0000 Subject: [PATCH 8/8] Changelogs --- mixnode/CHANGELOG.md | 4 ++++ nym-client/CHANGELOG.md | 4 ++++ sfw-provider/CHANGELOG.md | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/mixnode/CHANGELOG.md b/mixnode/CHANGELOG.md index ca1ccd00b5..553a967807 100644 --- a/mixnode/CHANGELOG.md +++ b/mixnode/CHANGELOG.md @@ -1,5 +1,9 @@ # nym-mixnode Changelog +## 0.3.1 + +* Fixed crash when directory server goes down + ## 0.3.0 * cleaned up a lot of internal dependencies diff --git a/nym-client/CHANGELOG.md b/nym-client/CHANGELOG.md index 798a6b9175..02c638b629 100644 --- a/nym-client/CHANGELOG.md +++ b/nym-client/CHANGELOG.md @@ -1,5 +1,9 @@ # nym-client Changelog +## 0.3.1 + +* Version increase for consistency with `nym-mixnode` and `nym-sfw-provider` + ## 0.3.0 * cleaned up a lot of internal dependencies diff --git a/sfw-provider/CHANGELOG.md b/sfw-provider/CHANGELOG.md index 350d7f519a..6379cbed8a 100644 --- a/sfw-provider/CHANGELOG.md +++ b/sfw-provider/CHANGELOG.md @@ -1,5 +1,9 @@ # nym-sfw-provider Changelog +## 0.3.1 + +* Fixed crash when directory server goes down + ## 0.3.0 * cleaned up a lot of internal dependencies