From 6ea6932f97886b24e7ab05804510c47d64f7ad72 Mon Sep 17 00:00:00 2001 From: simonsan <14062932+simonsan@users.noreply.github.com> Date: Sat, 5 Oct 2024 20:40:15 +0200 Subject: [PATCH 1/5] fix(errors): add error logging when sending tree from backend Fixes #239 Signed-off-by: simonsan <14062932+simonsan@users.noreply.github.com> --- crates/core/src/blob/tree.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/crates/core/src/blob/tree.rs b/crates/core/src/blob/tree.rs index ffd03577..b85fb5bf 100644 --- a/crates/core/src/blob/tree.rs +++ b/crates/core/src/blob/tree.rs @@ -13,6 +13,7 @@ use derive_setters::Setters; use ignore::overrides::{Override, OverrideBuilder}; use ignore::Match; +use log::error; use serde::{Deserialize, Deserializer}; use serde_derive::Serialize; @@ -689,9 +690,11 @@ impl TreeStreamerOnce

{ let out_tx = out_tx.clone(); let _join_handle = std::thread::spawn(move || { for (path, id, count) in in_rx { - out_tx + if let Err(err) = out_tx .send(Tree::from_backend(&be, &index, id).map(|tree| (path, tree, count))) - .unwrap(); + { + error!("Error sending tree {id} from backend: {err}"); + } } }); } From 9b6037337c6de94ae075bc08ea330c8c5b5a7a46 Mon Sep 17 00:00:00 2001 From: simonsan <14062932+simonsan@users.noreply.github.com> Date: Mon, 7 Oct 2024 00:33:00 +0200 Subject: [PATCH 2/5] panic, but use better user facing message Signed-off-by: simonsan <14062932+simonsan@users.noreply.github.com> --- crates/core/src/blob/tree.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/crates/core/src/blob/tree.rs b/crates/core/src/blob/tree.rs index b85fb5bf..96245752 100644 --- a/crates/core/src/blob/tree.rs +++ b/crates/core/src/blob/tree.rs @@ -13,7 +13,6 @@ use derive_setters::Setters; use ignore::overrides::{Override, OverrideBuilder}; use ignore::Match; -use log::error; use serde::{Deserialize, Deserializer}; use serde_derive::Serialize; @@ -693,7 +692,11 @@ impl TreeStreamerOnce

{ if let Err(err) = out_tx .send(Tree::from_backend(&be, &index, id).map(|tree| (path, tree, count))) { - error!("Error sending tree {id} from backend: {err}"); + panic!(" + Sending tree {id} on channel failed: {err}. + + This should not happen! Please report it to the developers: https://github.com/rustic-rs/rustic_core/issues/new + "); } } }); From d2a240ea4f968dd0d6dcbf3eee9b23712e202eea Mon Sep 17 00:00:00 2001 From: simonsan <14062932+simonsan@users.noreply.github.com> Date: Mon, 7 Oct 2024 00:39:23 +0200 Subject: [PATCH 3/5] use try_send to understand if the channel is full or disconnected, for further investigation Signed-off-by: simonsan <14062932+simonsan@users.noreply.github.com> --- crates/core/src/blob/tree.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/core/src/blob/tree.rs b/crates/core/src/blob/tree.rs index 96245752..38647bc6 100644 --- a/crates/core/src/blob/tree.rs +++ b/crates/core/src/blob/tree.rs @@ -690,7 +690,7 @@ impl TreeStreamerOnce

{ let _join_handle = std::thread::spawn(move || { for (path, id, count) in in_rx { if let Err(err) = out_tx - .send(Tree::from_backend(&be, &index, id).map(|tree| (path, tree, count))) + .try_send(Tree::from_backend(&be, &index, id).map(|tree| (path, tree, count))) { panic!(" Sending tree {id} on channel failed: {err}. From 3f3dee8cee9d26aa23de3a971cc1c4cfc57b9fff Mon Sep 17 00:00:00 2001 From: simonsan <14062932+simonsan@users.noreply.github.com> Date: Mon, 7 Oct 2024 00:44:03 +0200 Subject: [PATCH 4/5] add debug logging before panic Signed-off-by: simonsan <14062932+simonsan@users.noreply.github.com> --- crates/core/src/blob/tree.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/crates/core/src/blob/tree.rs b/crates/core/src/blob/tree.rs index 38647bc6..a17d6ad4 100644 --- a/crates/core/src/blob/tree.rs +++ b/crates/core/src/blob/tree.rs @@ -13,6 +13,7 @@ use derive_setters::Setters; use ignore::overrides::{Override, OverrideBuilder}; use ignore::Match; +use log::debug; use serde::{Deserialize, Deserializer}; use serde_derive::Serialize; @@ -689,9 +690,14 @@ impl TreeStreamerOnce

{ let out_tx = out_tx.clone(); let _join_handle = std::thread::spawn(move || { for (path, id, count) in in_rx { - if let Err(err) = out_tx - .try_send(Tree::from_backend(&be, &index, id).map(|tree| (path, tree, count))) - { + debug!( + "Loading tree {id} from {} with count {count}", + path.display() + ); + + if let Err(err) = out_tx.try_send( + Tree::from_backend(&be, &index, id).map(|tree| (path, tree, count)), + ) { panic!(" Sending tree {id} on channel failed: {err}. From 48c8016717b6f3eb5bbcb4c3e1b7bdc38c4686e2 Mon Sep 17 00:00:00 2001 From: simonsan <14062932+simonsan@users.noreply.github.com> Date: Mon, 7 Oct 2024 00:58:34 +0200 Subject: [PATCH 5/5] use debug impl for logging Signed-off-by: simonsan <14062932+simonsan@users.noreply.github.com> --- crates/core/src/blob/tree.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/crates/core/src/blob/tree.rs b/crates/core/src/blob/tree.rs index a17d6ad4..1511d47c 100644 --- a/crates/core/src/blob/tree.rs +++ b/crates/core/src/blob/tree.rs @@ -690,10 +690,7 @@ impl TreeStreamerOnce

{ let out_tx = out_tx.clone(); let _join_handle = std::thread::spawn(move || { for (path, id, count) in in_rx { - debug!( - "Loading tree {id} from {} with count {count}", - path.display() - ); + debug!("Loading tree {id} from {path:?} with count {count}"); if let Err(err) = out_tx.try_send( Tree::from_backend(&be, &index, id).map(|tree| (path, tree, count)),