mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-11-30 00:34:26 +01:00
Merge #3739
3739: fix: update `payload_too_large` error message to include human readable maximum acceptable payload size r=Kerollmops a=cymruu # Pull Request ## Related issue Fixes #3736 ## What does this PR do? - update `payload_too_large` error message as requested in ticket ## PR checklist Please check if your PR fulfills the following requirements: - [x] Does this PR fix an existing issue, or have you listed the changes applied in the PR description (and why they are needed)? - [x] Have you read the contributing guidelines? - [x] Have you made sure that the title is accurate and descriptive of the changes? Thank you so much for contributing to Meilisearch! Co-authored-by: Filip Bachul <filipbachul@gmail.com>
This commit is contained in:
commit
e01980c6f4
@ -1,5 +1,6 @@
|
|||||||
use actix_web as aweb;
|
use actix_web as aweb;
|
||||||
use aweb::error::{JsonPayloadError, QueryPayloadError};
|
use aweb::error::{JsonPayloadError, QueryPayloadError};
|
||||||
|
use byte_unit::Byte;
|
||||||
use meilisearch_types::document_formats::{DocumentFormatError, PayloadType};
|
use meilisearch_types::document_formats::{DocumentFormatError, PayloadType};
|
||||||
use meilisearch_types::error::{Code, ErrorCode, ResponseError};
|
use meilisearch_types::error::{Code, ErrorCode, ResponseError};
|
||||||
use meilisearch_types::index_uid::{IndexUid, IndexUidFormatError};
|
use meilisearch_types::index_uid::{IndexUid, IndexUidFormatError};
|
||||||
@ -26,8 +27,8 @@ pub enum MeilisearchHttpError {
|
|||||||
InvalidExpression(&'static [&'static str], Value),
|
InvalidExpression(&'static [&'static str], Value),
|
||||||
#[error("A {0} payload is missing.")]
|
#[error("A {0} payload is missing.")]
|
||||||
MissingPayload(PayloadType),
|
MissingPayload(PayloadType),
|
||||||
#[error("The provided payload reached the size limit.")]
|
#[error("The provided payload reached the size limit. The maximum accepted payload size is {}.", Byte::from_bytes(*.0 as u64).get_appropriate_unit(true))]
|
||||||
PayloadTooLarge,
|
PayloadTooLarge(usize),
|
||||||
#[error("Two indexes must be given for each swap. The list `[{}]` contains {} indexes.",
|
#[error("Two indexes must be given for each swap. The list `[{}]` contains {} indexes.",
|
||||||
.0.iter().map(|uid| format!("\"{uid}\"")).collect::<Vec<_>>().join(", "), .0.len()
|
.0.iter().map(|uid| format!("\"{uid}\"")).collect::<Vec<_>>().join(", "), .0.len()
|
||||||
)]
|
)]
|
||||||
@ -62,7 +63,7 @@ impl ErrorCode for MeilisearchHttpError {
|
|||||||
MeilisearchHttpError::DocumentNotFound(_) => Code::DocumentNotFound,
|
MeilisearchHttpError::DocumentNotFound(_) => Code::DocumentNotFound,
|
||||||
MeilisearchHttpError::EmptyFilter => Code::InvalidDocumentDeleteFilter,
|
MeilisearchHttpError::EmptyFilter => Code::InvalidDocumentDeleteFilter,
|
||||||
MeilisearchHttpError::InvalidExpression(_, _) => Code::InvalidSearchFilter,
|
MeilisearchHttpError::InvalidExpression(_, _) => Code::InvalidSearchFilter,
|
||||||
MeilisearchHttpError::PayloadTooLarge => Code::PayloadTooLarge,
|
MeilisearchHttpError::PayloadTooLarge(_) => Code::PayloadTooLarge,
|
||||||
MeilisearchHttpError::SwapIndexPayloadWrongLength(_) => Code::InvalidSwapIndexes,
|
MeilisearchHttpError::SwapIndexPayloadWrongLength(_) => Code::InvalidSwapIndexes,
|
||||||
MeilisearchHttpError::IndexUid(e) => e.error_code(),
|
MeilisearchHttpError::IndexUid(e) => e.error_code(),
|
||||||
MeilisearchHttpError::SerdeJson(_) => Code::Internal,
|
MeilisearchHttpError::SerdeJson(_) => Code::Internal,
|
||||||
|
@ -11,6 +11,7 @@ use crate::error::MeilisearchHttpError;
|
|||||||
pub struct Payload {
|
pub struct Payload {
|
||||||
payload: Decompress<dev::Payload>,
|
payload: Decompress<dev::Payload>,
|
||||||
limit: usize,
|
limit: usize,
|
||||||
|
remaining: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct PayloadConfig {
|
pub struct PayloadConfig {
|
||||||
@ -43,6 +44,7 @@ impl FromRequest for Payload {
|
|||||||
ready(Ok(Payload {
|
ready(Ok(Payload {
|
||||||
payload: Decompress::from_headers(payload.take(), req.headers()),
|
payload: Decompress::from_headers(payload.take(), req.headers()),
|
||||||
limit,
|
limit,
|
||||||
|
remaining: limit,
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -54,12 +56,14 @@ impl Stream for Payload {
|
|||||||
fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
|
fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
|
||||||
match Pin::new(&mut self.payload).poll_next(cx) {
|
match Pin::new(&mut self.payload).poll_next(cx) {
|
||||||
Poll::Ready(Some(result)) => match result {
|
Poll::Ready(Some(result)) => match result {
|
||||||
Ok(bytes) => match self.limit.checked_sub(bytes.len()) {
|
Ok(bytes) => match self.remaining.checked_sub(bytes.len()) {
|
||||||
Some(new_limit) => {
|
Some(new_limit) => {
|
||||||
self.limit = new_limit;
|
self.remaining = new_limit;
|
||||||
Poll::Ready(Some(Ok(bytes)))
|
Poll::Ready(Some(Ok(bytes)))
|
||||||
}
|
}
|
||||||
None => Poll::Ready(Some(Err(MeilisearchHttpError::PayloadTooLarge))),
|
None => {
|
||||||
|
Poll::Ready(Some(Err(MeilisearchHttpError::PayloadTooLarge(self.limit))))
|
||||||
|
}
|
||||||
},
|
},
|
||||||
x => Poll::Ready(Some(x.map_err(MeilisearchHttpError::from))),
|
x => Poll::Ready(Some(x.map_err(MeilisearchHttpError::from))),
|
||||||
},
|
},
|
||||||
|
@ -1781,7 +1781,7 @@ async fn error_add_documents_payload_size() {
|
|||||||
snapshot!(json_string!(response, { ".duration" => "[duration]", ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]" }),
|
snapshot!(json_string!(response, { ".duration" => "[duration]", ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]" }),
|
||||||
@r###"
|
@r###"
|
||||||
{
|
{
|
||||||
"message": "The provided payload reached the size limit.",
|
"message": "The provided payload reached the size limit. The maximum accepted payload size is 10.00 MiB.",
|
||||||
"code": "payload_too_large",
|
"code": "payload_too_large",
|
||||||
"type": "invalid_request",
|
"type": "invalid_request",
|
||||||
"link": "https://docs.meilisearch.com/errors#payload_too_large"
|
"link": "https://docs.meilisearch.com/errors#payload_too_large"
|
||||||
|
Loading…
Reference in New Issue
Block a user