From bfa9327a8e159953aee4312f89ad09911303b419 Mon Sep 17 00:00:00 2001 From: occheung Date: Mon, 26 Aug 2024 11:34:26 +0800 Subject: [PATCH] drtio mgmt: differentiate aux error and fail packets --- src/runtime/src/mgmt.rs | 153 +++++++++++++++++++++++++++------------- 1 file changed, 105 insertions(+), 48 deletions(-) diff --git a/src/runtime/src/mgmt.rs b/src/runtime/src/mgmt.rs index 5ed5dea..9b02469 100644 --- a/src/runtime/src/mgmt.rs +++ b/src/runtime/src/mgmt.rs @@ -154,7 +154,7 @@ mod remote_coremgmt { ) -> Result<()> { let mut buffer = Vec::new(); loop { - match drtio::aux_transact( + let reply = drtio::aux_transact( aux_mutex, linkno, routing_table, @@ -163,10 +163,10 @@ mod remote_coremgmt { clear: false, }, timer, - ) - .await? - { - Packet::CoreMgmtGetLogReply { last, length, data } => { + ).await; + + match reply { + Ok(Packet::CoreMgmtGetLogReply { last, length, data }) => { buffer.extend(&data[..length as usize]); if last { write_i8(stream, Reply::LogContent as i8).await?; @@ -174,10 +174,16 @@ mod remote_coremgmt { return Ok(()); } } - _ => { + Ok(packet) => { + error!("received unexpected aux packet: {:?}", packet); write_i8(stream, Reply::Error as i8).await?; return Err(drtio::Error::UnexpectedReply.into()); } + Err(e) => { + error!("aux packet error ({})", e); + write_i8(stream, Reply::Error as i8).await?; + return Err(e.into()); + } } } } @@ -197,16 +203,22 @@ mod remote_coremgmt { &Packet::CoreMgmtClearLogRequest { destination }, timer, ) - .await?; + .await; match reply { - Packet::CoreMgmtAck => { + Ok(Packet::CoreMgmtAck) => { write_i8(stream, Reply::Success as i8).await?; Ok(()) } - _ => { + Ok(packet) => { + error!("received unexpected aux packet: {:?}", packet); write_i8(stream, Reply::Error as i8).await?; - return Err(drtio::Error::UnexpectedReply.into()); + Err(drtio::Error::UnexpectedReply.into()) + } + Err(e) => { + error!("aux packet error ({})", e); + write_i8(stream, Reply::Error as i8).await?; + Err(e.into()) } } } @@ -232,7 +244,7 @@ mod remote_coremgmt { break; } - match drtio::aux_transact( + let reply = drtio::aux_transact( aux_mutex, linkno, routing_table, @@ -242,13 +254,20 @@ mod remote_coremgmt { }, timer, ) - .await - { + .await; + + match reply { Ok(Packet::CoreMgmtGetLogReply { last: _, length, data }) => { write_chunk(stream, &data[..length as usize]).await?; } - - _ => return Err(drtio::Error::UnexpectedReply.into()), + Ok(packet) => { + error!("received unexpected aux packet: {:?}", packet); + return Err(drtio::Error::UnexpectedReply.into()); + } + Err(e) => { + error!("aux packet error ({})", e); + return Err(e.into()); + } } } @@ -274,16 +293,22 @@ mod remote_coremgmt { }, timer, ) - .await?; + .await; match reply { - Packet::CoreMgmtAck => { + Ok(Packet::CoreMgmtAck) => { write_i8(stream, Reply::Success as i8).await?; Ok(()) } - _ => { + Ok(packet) => { + error!("received unexpected aux packet: {:?}", packet); write_i8(stream, Reply::Error as i8).await?; - return Err(drtio::Error::UnexpectedReply.into()); + Err(drtio::Error::UnexpectedReply.into()) + } + Err(e) => { + error!("aux packet error ({})", e); + write_i8(stream, Reply::Error as i8).await?; + Err(e.into()) } } } @@ -307,16 +332,22 @@ mod remote_coremgmt { }, timer, ) - .await?; + .await; match reply { - Packet::CoreMgmtAck => { + Ok(Packet::CoreMgmtAck) => { write_i8(stream, Reply::Success as i8).await?; Ok(()) } - _ => { + Ok(packet) => { + error!("received unexpected aux packet: {:?}", packet); write_i8(stream, Reply::Error as i8).await?; - return Err(drtio::Error::UnexpectedReply.into()); + Err(drtio::Error::UnexpectedReply.into()) + } + Err(e) => { + error!("aux packet error ({})", e); + write_i8(stream, Reply::Error as i8).await?; + Err(e.into()) } } } @@ -346,12 +377,12 @@ mod remote_coremgmt { }, timer, ) - .await?; + .await; let mut buffer = Vec::::new(); loop { match reply { - Packet::CoreMgmtConfigReadReply { last, length, value } => { + Ok(Packet::CoreMgmtConfigReadReply { last, length, value }) => { buffer.extend(&value[..length as usize]); if last { @@ -369,13 +400,18 @@ mod remote_coremgmt { }, timer, ) - .await?; + .await; } - - _ => { + Ok(packet) => { + error!("received unexpected aux packet: {:?}", packet); write_i8(stream, Reply::Error as i8).await?; return Err(drtio::Error::UnexpectedReply.into()); } + Err(e) => { + error!("aux packet error ({})", e); + write_i8(stream, Reply::Error as i8).await?; + return Err(e.into()); + } } } } @@ -409,9 +445,9 @@ mod remote_coremgmt { }, |reply| match reply { Packet::CoreMgmtAck => Ok(()), - _ => { - error!("received unknown packet"); - Err(drtio::Error::UnexpectedReply.into()) + packet => { + error!("received unexpected aux packet: {:?}", packet); + Err(drtio::Error::UnexpectedReply) } }, ) @@ -421,9 +457,10 @@ mod remote_coremgmt { write_i8(stream, Reply::Success as i8).await?; Ok(()) } - error => { + Err(e) => { + error!("aux packet error ({})", e); write_i8(stream, Reply::Error as i8).await?; - error + Err(e.into()) } } } @@ -453,17 +490,23 @@ mod remote_coremgmt { }, timer, ) - .await?; + .await; match reply { - Packet::CoreMgmtAck => { + Ok(Packet::CoreMgmtAck) => { write_i8(stream, Reply::Success as i8).await?; Ok(()) } - _ => { + Ok(packet) => { + error!("received unexpected aux packet: {:?}", packet); write_i8(stream, Reply::Error as i8).await?; Err(drtio::Error::UnexpectedReply.into()) } + Err(e) => { + error!("aux packet error ({})", e); + write_i8(stream, Reply::Error as i8).await?; + Err(e.into()) + } } } @@ -484,17 +527,23 @@ mod remote_coremgmt { }, timer, ) - .await?; + .await; match reply { - Packet::CoreMgmtAck => { + Ok(Packet::CoreMgmtAck) => { write_i8(stream, Reply::Success as i8).await?; Ok(()) } - _ => { + Ok(packet) => { + error!("received unexpected aux packet: {:?}", packet); write_i8(stream, Reply::Error as i8).await?; Err(drtio::Error::UnexpectedReply.into()) } + Err(e) => { + error!("aux packet error ({})", e); + write_i8(stream, Reply::Error as i8).await?; + Err(e.into()) + } } } @@ -516,18 +565,23 @@ mod remote_coremgmt { }, timer, ) - .await?; + .await; match reply { - Packet::CoreMgmtAck => { + Ok(Packet::CoreMgmtAck) => { write_i8(stream, Reply::RebootImminent as i8).await?; Ok(()) } - _ => { - error!("received unknown packet"); + Ok(packet) => { + error!("received unexpected aux packet: {:?}", packet); write_i8(stream, Reply::Error as i8).await?; Err(drtio::Error::UnexpectedReply.into()) } + Err(e) => { + error!("aux packet error ({})", e); + write_i8(stream, Reply::Error as i8).await?; + Err(e.into()) + } } } @@ -548,18 +602,21 @@ mod remote_coremgmt { }, timer, ) - .await?; + .await; match reply { - Packet::CoreMgmtAck => { + Ok(Packet::CoreMgmtAck) => { write_i8(stream, Reply::Success as i8).await?; Ok(()) } - _ => { - error!("received unknown packet"); - write_i8(stream, Reply::Error as i8).await?; + Ok(packet) => { + error!("received unexpected aux packet: {:?}", packet); Err(drtio::Error::UnexpectedReply.into()) } + Err(e) => { + error!("aux packet error ({})", e); + Err(e.into()) + } } } }