Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion frontend/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ async-trait = "0.1"
axum = { version = "0.8", features = ["http2"] }
tower-http = { version = "0.6", features = ["cors", "compression-full"] }
polytope-edr = { git = "https://github.com/ecmwf/polytope-edr", branch = "master" }
bits = { git = "https://github.com/ecmwf/bits-broker.git", rev = "d6ceded4324652739f5e6a79c14bf72550e3eecf", features = ["nats"] }
bits = { git = "https://github.com/ecmwf/bits-broker.git", rev = "9eb29779c65fb09d867a543f77525fc160b7d4f0", features = ["nats"] }
bytes = "1"
clap = { version = "4", features = ["derive"] }
futures = "0.3"
Expand Down
20 changes: 18 additions & 2 deletions frontend/src/api/v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use axum::{
http::{HeaderMap, StatusCode, header},
response::{IntoResponse, Response},
};
use bits::{Job, JobResult, PollOutcome};
use bits::{Job, JobResult, PollOutcome, SubmitOutcome};
use bytes::BytesMut;
use futures::TryStreamExt;
use serde::{Deserialize, Serialize};
Expand Down Expand Up @@ -101,7 +101,23 @@ pub async fn submit_request(
super::set_job_mock_time_metadata(&mut job, mock_time_extensions.mock_time.as_ref());

let submitted_request = job.request.clone();
let handle = route_handle.submit(job);
let handle = match route_handle.submit(job) {
SubmitOutcome::Accepted(handle) => handle,
SubmitOutcome::Overloaded => {
tracing::warn!(
"event.name" = "api.job.rejected",
outcome = "overloaded",
collection = %collection,
reason = "broker_overloaded",
"job rejected"
);
return super::overloaded_response(json!({
"status": "failed",
"message": "broker at capacity",
"retryable": true,
}));
}
};
super::audit_mock_job_submission(
mock_audit.as_ref().map(|Extension(audit)| audit),
&handle.id,
Expand Down
18 changes: 16 additions & 2 deletions frontend/src/api/v2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use axum::{
http::{HeaderMap, StatusCode, header},
response::{IntoResponse, Response},
};
use bits::{Job, JobResult, PollOutcome};
use bits::{Job, JobResult, PollOutcome, SubmitOutcome};
use serde_json::{Value, json};

use crate::auth::{AuthUser, MockRolesAudit};
Expand Down Expand Up @@ -82,7 +82,21 @@ pub async fn submit_collection(
"client IP candidate headers present"
);
let submitted_request = job.request.clone();
let id = route_handle.submit(job).id;
let id = match route_handle.submit(job) {
SubmitOutcome::Accepted(handle) => handle.id,
SubmitOutcome::Overloaded => {
tracing::warn!(
"event.name" = "api.job.rejected",
outcome = "overloaded",
collection = %collection,
reason = "broker_overloaded",
"job rejected"
);
return super::overloaded_response(
json!({"error": "broker at capacity", "retryable": true}),
);
}
};
if let Some(Extension(user)) = auth_user.as_ref() {
tracing::info!("event.name" = "api.job.submitted", outcome = "success", job.id = %id, "enduser.id" = %user.username, "enduser.realm" = %user.realm, polytope.request = %polytope_observability::request(&submitted_request), "job submitted");
} else {
Expand Down
9 changes: 8 additions & 1 deletion frontend/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,14 @@ impl polytope_edr::RequestSubmitter for BitsSubmitter {
))
})?
.clone();
route_handle.submit(job)
match route_handle.submit(job) {
bits::SubmitOutcome::Accepted(handle) => handle,
bits::SubmitOutcome::Overloaded => {
return Err(polytope_edr::SubmitError::Upstream(
"broker at capacity".to_string(),
));
}
}
};
Ok(polytope_edr::SubmitResponse {
id: handle.id.clone(),
Expand Down
Loading