aboutsummaryrefslogtreecommitdiff
path: root/src/api/k2v
diff options
context:
space:
mode:
authorAlex <lx@deuxfleurs.fr>2025-02-19 09:59:32 +0000
committerAlex <lx@deuxfleurs.fr>2025-02-19 09:59:32 +0000
commitf64ec6e542c73a4eaaf1962330c7bfe4d7c47461 (patch)
treec44ffa88d70f99c512283dbd3d377990e4a55893 /src/api/k2v
parent859b38b0d260a0833e5e604c873c7d259acff22e (diff)
parent6d38907dac2872a43e5bbaa108c14e8877dd818e (diff)
downloadgarage-f64ec6e542c73a4eaaf1962330c7bfe4d7c47461.tar.gz
garage-f64ec6e542c73a4eaaf1962330c7bfe4d7c47461.zip
Merge pull request 'implement STREAMING-*-PAYLOAD-TRAILER' (#960) from fix-824 into main
Reviewed-on: https://git.deuxfleurs.fr/Deuxfleurs/garage/pulls/960
Diffstat (limited to 'src/api/k2v')
-rw-r--r--src/api/k2v/api_server.rs4
-rw-r--r--src/api/k2v/batch.rs8
-rw-r--r--src/api/k2v/error.rs7
-rw-r--r--src/api/k2v/item.rs4
4 files changed, 15 insertions, 8 deletions
diff --git a/src/api/k2v/api_server.rs b/src/api/k2v/api_server.rs
index eb276f5b..de5775da 100644
--- a/src/api/k2v/api_server.rs
+++ b/src/api/k2v/api_server.rs
@@ -81,7 +81,9 @@ impl ApiHandler for K2VApiServer {
return Ok(options_res.map(|_empty_body: EmptyBody| empty_body()));
}
- let (req, api_key, _content_sha256) = verify_request(&garage, req, "k2v").await?;
+ let verified_request = verify_request(&garage, req, "k2v").await?;
+ let req = verified_request.request;
+ let api_key = verified_request.access_key;
let bucket_id = garage
.bucket_helper()
diff --git a/src/api/k2v/batch.rs b/src/api/k2v/batch.rs
index c284dbd4..7a03d836 100644
--- a/src/api/k2v/batch.rs
+++ b/src/api/k2v/batch.rs
@@ -20,7 +20,7 @@ pub async fn handle_insert_batch(
let ReqCtx {
garage, bucket_id, ..
} = &ctx;
- let items = parse_json_body::<Vec<InsertBatchItem>, _, Error>(req).await?;
+ let items = req.into_body().json::<Vec<InsertBatchItem>>().await?;
let mut items2 = vec![];
for it in items {
@@ -47,7 +47,7 @@ pub async fn handle_read_batch(
ctx: ReqCtx,
req: Request<ReqBody>,
) -> Result<Response<ResBody>, Error> {
- let queries = parse_json_body::<Vec<ReadBatchQuery>, _, Error>(req).await?;
+ let queries = req.into_body().json::<Vec<ReadBatchQuery>>().await?;
let resp_results = futures::future::join_all(
queries
@@ -141,7 +141,7 @@ pub async fn handle_delete_batch(
ctx: ReqCtx,
req: Request<ReqBody>,
) -> Result<Response<ResBody>, Error> {
- let queries = parse_json_body::<Vec<DeleteBatchQuery>, _, Error>(req).await?;
+ let queries = req.into_body().json::<Vec<DeleteBatchQuery>>().await?;
let resp_results = futures::future::join_all(
queries
@@ -262,7 +262,7 @@ pub(crate) async fn handle_poll_range(
} = ctx;
use garage_model::k2v::sub::PollRange;
- let query = parse_json_body::<PollRangeQuery, _, Error>(req).await?;
+ let query = req.into_body().json::<PollRangeQuery>().await?;
let timeout_msec = query.timeout.unwrap_or(300).clamp(1, 600) * 1000;
diff --git a/src/api/k2v/error.rs b/src/api/k2v/error.rs
index 3cd0e6f7..257ff893 100644
--- a/src/api/k2v/error.rs
+++ b/src/api/k2v/error.rs
@@ -23,6 +23,10 @@ pub enum Error {
#[error(display = "Authorization header malformed, unexpected scope: {}", _0)]
AuthorizationHeaderMalformed(String),
+ /// The provided digest (checksum) value was invalid
+ #[error(display = "Invalid digest: {}", _0)]
+ InvalidDigest(String),
+
/// The object requested don't exists
#[error(display = "Key not found")]
NoSuchKey,
@@ -54,6 +58,7 @@ impl From<SignatureError> for Error {
Self::AuthorizationHeaderMalformed(c)
}
SignatureError::InvalidUtf8Str(i) => Self::InvalidUtf8Str(i),
+ SignatureError::InvalidDigest(d) => Self::InvalidDigest(d),
}
}
}
@@ -71,6 +76,7 @@ impl Error {
Error::InvalidBase64(_) => "InvalidBase64",
Error::InvalidUtf8Str(_) => "InvalidUtf8String",
Error::InvalidCausalityToken => "CausalityToken",
+ Error::InvalidDigest(_) => "InvalidDigest",
}
}
}
@@ -85,6 +91,7 @@ impl ApiError for Error {
Error::AuthorizationHeaderMalformed(_)
| Error::InvalidBase64(_)
| Error::InvalidUtf8Str(_)
+ | Error::InvalidDigest(_)
| Error::InvalidCausalityToken => StatusCode::BAD_REQUEST,
}
}
diff --git a/src/api/k2v/item.rs b/src/api/k2v/item.rs
index 4e28b499..0fb945d2 100644
--- a/src/api/k2v/item.rs
+++ b/src/api/k2v/item.rs
@@ -144,9 +144,7 @@ pub async fn handle_insert_item(
.map(parse_causality_token)
.transpose()?;
- let body = http_body_util::BodyExt::collect(req.into_body())
- .await?
- .to_bytes();
+ let body = req.into_body().collect().await?;
let value = DvvsValue::Value(body.to_vec());