forked from mirrors/relay
Don't fail jobs for fine scenarios
- dont fail contact for breaker - dont fail instance for not found
This commit is contained in:
parent
6be72a836b
commit
0768cb6ac6
5 changed files with 34 additions and 16 deletions
|
@ -18,6 +18,14 @@ impl Error {
|
|||
pub(crate) fn is_breaker(&self) -> bool {
|
||||
matches!(self.kind, ErrorKind::Breaker)
|
||||
}
|
||||
|
||||
pub(crate) fn is_not_found(&self) -> bool {
|
||||
matches!(self.kind, ErrorKind::Status(_, StatusCode::NOT_FOUND))
|
||||
}
|
||||
|
||||
pub(crate) fn is_bad_request(&self) -> bool {
|
||||
matches!(self.kind, ErrorKind::Status(_, StatusCode::BAD_REQUEST))
|
||||
}
|
||||
}
|
||||
|
||||
impl std::fmt::Debug for Error {
|
||||
|
|
|
@ -40,10 +40,18 @@ impl QueryContact {
|
|||
return Ok(());
|
||||
}
|
||||
|
||||
let contact = state
|
||||
let contact = match state
|
||||
.requests
|
||||
.fetch::<AcceptedActors>(self.contact_id.as_str())
|
||||
.await?;
|
||||
.await
|
||||
{
|
||||
Ok(contact) => contact,
|
||||
Err(e) if e.is_breaker() => {
|
||||
tracing::debug!("Not retrying due to failed breaker");
|
||||
return Ok(());
|
||||
}
|
||||
Err(e) => return Err(e),
|
||||
};
|
||||
|
||||
let (username, display_name, url, avatar) =
|
||||
to_contact(contact).ok_or(ErrorKind::Extract("contact"))?;
|
||||
|
|
|
@ -40,6 +40,10 @@ impl Deliver {
|
|||
tracing::debug!("Not trying due to failed breaker");
|
||||
return Ok(());
|
||||
}
|
||||
if e.is_bad_request() {
|
||||
tracing::debug!("Server didn't understand the activity");
|
||||
return Ok(());
|
||||
}
|
||||
return Err(e);
|
||||
}
|
||||
Ok(())
|
||||
|
|
|
@ -57,6 +57,10 @@ impl QueryInstance {
|
|||
tracing::debug!("Not retrying due to failed breaker");
|
||||
return Ok(());
|
||||
}
|
||||
Err(e) if e.is_not_found() => {
|
||||
tracing::debug!("Server doesn't implement instance endpoint");
|
||||
return Ok(());
|
||||
}
|
||||
Err(e) => return Err(e),
|
||||
};
|
||||
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
use crate::error::{Error, ErrorKind};
|
||||
use activitystreams::iri_string::types::IriString;
|
||||
use actix_web::{
|
||||
http::{header::Date, StatusCode},
|
||||
web::Bytes,
|
||||
};
|
||||
use actix_web::{http::header::Date, web::Bytes};
|
||||
use awc::Client;
|
||||
use dashmap::DashMap;
|
||||
use http_signature_normalization_actix::prelude::*;
|
||||
|
@ -394,19 +391,16 @@ impl Requests {
|
|||
self.reset_err();
|
||||
|
||||
if !res.status().is_success() {
|
||||
// Bad Request means the server didn't understand our activity - that's fine
|
||||
if res.status() != StatusCode::BAD_REQUEST {
|
||||
if let Ok(bytes) = res.body().await {
|
||||
if let Ok(s) = String::from_utf8(bytes.as_ref().to_vec()) {
|
||||
if !s.is_empty() {
|
||||
tracing::warn!("Response from {}, {}", inbox.as_str(), s);
|
||||
}
|
||||
if let Ok(bytes) = res.body().await {
|
||||
if let Ok(s) = String::from_utf8(bytes.as_ref().to_vec()) {
|
||||
if !s.is_empty() {
|
||||
tracing::warn!("Response from {}, {}", inbox.as_str(), s);
|
||||
}
|
||||
}
|
||||
|
||||
self.breakers.fail(&inbox);
|
||||
return Err(ErrorKind::Status(inbox.to_string(), res.status()).into());
|
||||
}
|
||||
|
||||
self.breakers.fail(&inbox);
|
||||
return Err(ErrorKind::Status(inbox.to_string(), res.status()).into());
|
||||
}
|
||||
|
||||
self.breakers.succeed(&inbox);
|
||||
|
|
Loading…
Reference in a new issue