From 2d09f5483a227a66dcb0ac6b256f0c1402c369f8 Mon Sep 17 00:00:00 2001 From: Colin Roberts Date: Sun, 25 Feb 2024 09:28:23 -0700 Subject: [PATCH 1/4] feat: `error!` output from behavior --- engine/src/machine.rs | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/engine/src/machine.rs b/engine/src/machine.rs index 38084dca..558318c7 100644 --- a/engine/src/machine.rs +++ b/engine/src/machine.rs @@ -7,6 +7,7 @@ use anyhow::Result; use arbiter_core::middleware::ArbiterMiddleware; use futures_util::{Stream, StreamExt}; use tokio::task::JoinHandle; +use tracing::error; use super::*; @@ -216,15 +217,27 @@ where async fn execute(&mut self, instruction: MachineInstruction) -> Result<()> { // NOTE: The unwraps here are safe because the `Behavior` in an engine is only // accessed here and it is private. + let mut id: Option; match instruction { MachineInstruction::Start(client, messager) => { + id = messager.id.clone(); + let id_clone = id.clone(); self.state = State::Starting; let mut behavior = self.behavior.take().unwrap(); let behavior_task: JoinHandle>, B)>> = tokio::spawn(async move { - let id = messager.id.clone(); - let stream = behavior.startup(client, messager).await?; - debug!("startup complete for behavior {:?}", id); + let stream = match behavior.startup(client, messager).await { + Ok(stream) => stream, + Err(e) => { + error!( + "startup failed for behavior {:?}: \n reason: {:?}", + id_clone, e + ); + // Throw a panic as we cannot recover from this for now. + panic!(); + } + }; + debug!("startup complete for behavior {:?}", id_clone); Ok((stream, behavior)) }); let (stream, behavior) = behavior_task.await??; @@ -232,7 +245,12 @@ where Some(stream) => { self.event_stream = Some(stream); self.behavior = Some(behavior); - self.execute(MachineInstruction::Process).await?; + match self.execute(MachineInstruction::Process).await { + Ok(_) => {} + Err(e) => { + error!("process failed for behavior {:?}: \n reason: {:?}", id, e); + } + } Ok(()) } None => { From 828879f996ae55465bd1a16f3153b373ea9421e7 Mon Sep 17 00:00:00 2001 From: Colin Roberts Date: Mon, 26 Feb 2024 09:47:28 -0700 Subject: [PATCH 2/4] submodule: update `template` --- examples/template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/template b/examples/template index c04df2a2..d49cfe74 160000 --- a/examples/template +++ b/examples/template @@ -1 +1 @@ -Subproject commit c04df2a2c8d8a06ab1f4339142de1d1fa940d196 +Subproject commit d49cfe74bca1fa9ba0975346b0dc125477fe8440 From d0a783eded5237ae64bcf2834db68d8adabfd69d Mon Sep 17 00:00:00 2001 From: Colin Roberts Date: Mon, 26 Feb 2024 09:52:56 -0700 Subject: [PATCH 3/4] fix: `minter` example --- examples/minter/behaviors/token_admin.rs | 4 ++-- examples/minter/behaviors/token_requester.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/minter/behaviors/token_admin.rs b/examples/minter/behaviors/token_admin.rs index f6669605..496f1901 100644 --- a/examples/minter/behaviors/token_admin.rs +++ b/examples/minter/behaviors/token_admin.rs @@ -52,7 +52,7 @@ impl Behavior for TokenAdmin { &mut self, client: Arc, messager: Messager, - ) -> Result> { + ) -> Result>> { self.messager = Some(messager.clone()); self.client = Some(client.clone()); for token_data in self.token_data.values_mut() { @@ -74,7 +74,7 @@ impl Behavior for TokenAdmin { .get_or_insert_with(HashMap::new) .insert(token_data.name.clone(), token.clone()); } - Ok(messager.stream()?) + Ok(Some(messager.stream()?)) } #[tracing::instrument(skip(self), fields(id = diff --git a/examples/minter/behaviors/token_requester.rs b/examples/minter/behaviors/token_requester.rs index 03c9d9db..e8fcb741 100644 --- a/examples/minter/behaviors/token_requester.rs +++ b/examples/minter/behaviors/token_requester.rs @@ -35,7 +35,7 @@ impl Behavior for TokenRequester { &mut self, client: Arc, mut messager: Messager, - ) -> Result> { + ) -> Result>> { messager .send( To::Agent(self.request_to.clone()), @@ -59,7 +59,7 @@ impl Behavior for TokenRequester { self.messager = Some(messager.clone()); self.client = Some(client.clone()); let transfer_stream = stream_event(token.transfer_filter()); - Ok(transfer_stream) + Ok(Some(transfer_stream)) } #[tracing::instrument(skip(self), fields(id = From 8b8c618e36241bb864aa14425f49e85018310c3c Mon Sep 17 00:00:00 2001 From: Colin Roberts Date: Mon, 26 Feb 2024 09:53:18 -0700 Subject: [PATCH 4/4] fix: clippy --- engine/src/machine.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/src/machine.rs b/engine/src/machine.rs index 558318c7..d6e3d888 100644 --- a/engine/src/machine.rs +++ b/engine/src/machine.rs @@ -217,7 +217,7 @@ where async fn execute(&mut self, instruction: MachineInstruction) -> Result<()> { // NOTE: The unwraps here are safe because the `Behavior` in an engine is only // accessed here and it is private. - let mut id: Option; + let id: Option; match instruction { MachineInstruction::Start(client, messager) => { id = messager.id.clone();