mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-29 11:27:58 +00:00
fatality based errors (#4448)
* seed commit for fatality based errors * fatality * first draft of fatality * cleanup * differnt approach * simplify * first working version for enums, with documentation * add split * fix simple split test case * extend README.md * update fatality impl * make tests passed * apply fatality to first subsystem * fatality fixes * use fatality in a subsystem * fix subsystemg * fixup proc macro * fix/test: log::*! do not execute when log handler is missing * fix spelling * rename Runtime2 to something sane * allow nested split with `forward` annotations * add free license * enable and fixup all tests * use external fatality Makes this more reviewable. * bump fatality dep Avoid duplicate expander compilations. * migrate availability distribution * more fatality usage * chore: bump fatality to 0.0.6 * fixup remaining subsystems * chore: fmt * make cargo spellcheck happy * remove single instance of `#[fatal(false)]` * last quality sweep * fixup
This commit is contained in:
committed by
GitHub
parent
85fa087405
commit
d946582707
@@ -33,7 +33,7 @@ use polkadot_subsystem::{
|
||||
};
|
||||
|
||||
use crate::{
|
||||
error::{Fatal, NonFatal},
|
||||
error::{Error, FatalError, JfyiError, Result},
|
||||
metrics::{FAILED, NOT_FOUND, SUCCEEDED},
|
||||
Metrics, LOG_TARGET,
|
||||
};
|
||||
@@ -48,7 +48,7 @@ pub async fn fetch_pov<Context>(
|
||||
pov_hash: Hash,
|
||||
tx: oneshot::Sender<PoV>,
|
||||
metrics: Metrics,
|
||||
) -> super::Result<()>
|
||||
) -> Result<()>
|
||||
where
|
||||
Context: SubsystemContext,
|
||||
{
|
||||
@@ -56,7 +56,7 @@ where
|
||||
let authority_id = info
|
||||
.discovery_keys
|
||||
.get(from_validator.0 as usize)
|
||||
.ok_or(NonFatal::InvalidValidatorIndex)?
|
||||
.ok_or(JfyiError::InvalidValidatorIndex)?
|
||||
.clone();
|
||||
let (req, pending_response) = OutgoingRequest::new(
|
||||
Recipient::Authority(authority_id.clone()),
|
||||
@@ -77,7 +77,7 @@ where
|
||||
"pov-fetcher",
|
||||
fetch_pov_job(pov_hash, authority_id, pending_response.boxed(), span, tx, metrics).boxed(),
|
||||
)
|
||||
.map_err(|e| Fatal::SpawnTask(e))?;
|
||||
.map_err(|e| FatalError::SpawnTask(e))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ where
|
||||
async fn fetch_pov_job(
|
||||
pov_hash: Hash,
|
||||
authority_id: AuthorityDiscoveryId,
|
||||
pending_response: BoxFuture<'static, Result<PoVFetchingResponse, RequestError>>,
|
||||
pending_response: BoxFuture<'static, std::result::Result<PoVFetchingResponse, RequestError>>,
|
||||
span: jaeger::Span,
|
||||
tx: oneshot::Sender<PoV>,
|
||||
metrics: Metrics,
|
||||
@@ -98,17 +98,17 @@ async fn fetch_pov_job(
|
||||
/// Do the actual work of waiting for the response.
|
||||
async fn do_fetch_pov(
|
||||
pov_hash: Hash,
|
||||
pending_response: BoxFuture<'static, Result<PoVFetchingResponse, RequestError>>,
|
||||
pending_response: BoxFuture<'static, std::result::Result<PoVFetchingResponse, RequestError>>,
|
||||
_span: jaeger::Span,
|
||||
tx: oneshot::Sender<PoV>,
|
||||
metrics: Metrics,
|
||||
) -> std::result::Result<(), NonFatal> {
|
||||
let response = pending_response.await.map_err(NonFatal::FetchPoV);
|
||||
) -> Result<()> {
|
||||
let response = pending_response.await.map_err(Error::FetchPoV);
|
||||
let pov = match response {
|
||||
Ok(PoVFetchingResponse::PoV(pov)) => pov,
|
||||
Ok(PoVFetchingResponse::NoSuchPoV) => {
|
||||
metrics.on_fetched_pov(NOT_FOUND);
|
||||
return Err(NonFatal::NoSuchPoV)
|
||||
return Err(Error::NoSuchPoV)
|
||||
},
|
||||
Err(err) => {
|
||||
metrics.on_fetched_pov(FAILED);
|
||||
@@ -117,10 +117,10 @@ async fn do_fetch_pov(
|
||||
};
|
||||
if pov.hash() == pov_hash {
|
||||
metrics.on_fetched_pov(SUCCEEDED);
|
||||
tx.send(pov).map_err(|_| NonFatal::SendResponse)
|
||||
tx.send(pov).map_err(|_| Error::SendResponse)
|
||||
} else {
|
||||
metrics.on_fetched_pov(FAILED);
|
||||
Err(NonFatal::UnexpectedPoV)
|
||||
Err(Error::UnexpectedPoV)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user