From d1dec0959b278c37bc2041e0b6d3ad20b952d8be Mon Sep 17 00:00:00 2001 From: Adrien Guillo Date: Thu, 18 Jan 2024 13:27:30 -0500 Subject: [PATCH 1/3] Return 404 on index not found in ES Bulk API --- .../src/elastic_search_api/bulk.rs | 1 + .../src/elastic_search_api/bulk_v2.rs | 69 ++++++++++++++----- 2 files changed, 53 insertions(+), 17 deletions(-) diff --git a/quickwit/quickwit-serve/src/elastic_search_api/bulk.rs b/quickwit/quickwit-serve/src/elastic_search_api/bulk.rs index f1a71ad2ea5..3ab0186e7d3 100644 --- a/quickwit/quickwit-serve/src/elastic_search_api/bulk.rs +++ b/quickwit/quickwit-serve/src/elastic_search_api/bulk.rs @@ -131,6 +131,7 @@ async fn elastic_ingest_bulk( commit: commit_type.into(), }; ingest_service.ingest(ingest_request).await?; + let took_millis = now.elapsed().as_millis() as u64; let errors = false; let bulk_response = ElasticBulkResponse { diff --git a/quickwit/quickwit-serve/src/elastic_search_api/bulk_v2.rs b/quickwit/quickwit-serve/src/elastic_search_api/bulk_v2.rs index 6157b16aef8..019978fe2fa 100644 --- a/quickwit/quickwit-serve/src/elastic_search_api/bulk_v2.rs +++ b/quickwit/quickwit-serve/src/elastic_search_api/bulk_v2.rs @@ -23,7 +23,9 @@ use bytes::Bytes; use hyper::StatusCode; use quickwit_config::INGEST_V2_SOURCE_ID; use quickwit_ingest::IngestRequestV2Builder; -use quickwit_proto::ingest::router::{IngestRouterService, IngestRouterServiceClient}; +use quickwit_proto::ingest::router::{ + IngestFailureReason, IngestRouterService, IngestRouterServiceClient, +}; use quickwit_proto::ingest::CommitTypeV2; use quickwit_proto::types::IndexId; use serde::{Deserialize, Serialize}; @@ -88,6 +90,15 @@ pub(crate) async fn elastic_bulk_ingest_v2( let ingest_response_v2 = ingest_router.ingest(ingest_request).await?; let took_millis = now.elapsed().as_millis() as u64; let errors = !ingest_response_v2.failures.is_empty(); + + for failure in ingest_response_v2.failures { + // This custom logic for Airmail is temporary. + if failure.reason() == IngestFailureReason::IndexNotFound { + let reason = format!("index `{}` not found", failure.index_id); + let elasticsearch_error = ElasticSearchError::new(StatusCode::NOT_FOUND, reason); + return Err(elasticsearch_error); + } + } let bulk_response = ElasticBulkResponse { took_millis, errors, @@ -133,13 +144,12 @@ mod tests { .expect_ingest() .once() .returning(|ingest_request| { - assert_eq!(ingest_request.subrequests.len(), 3); + assert_eq!(ingest_request.subrequests.len(), 2); assert_eq!(ingest_request.commit_type(), CommitTypeV2::Auto); let mut subrequests = ingest_request.subrequests; assert_eq!(subrequests[0].subrequest_id, 0); assert_eq!(subrequests[1].subrequest_id, 1); - assert_eq!(subrequests[2].subrequest_id, 2); subrequests.sort_by(|left, right| left.index_id.cmp(&right.index_id)); @@ -153,11 +163,6 @@ mod tests { assert_eq!(subrequests[1].doc_batch.as_ref().unwrap().num_docs(), 1); assert_eq!(subrequests[1].doc_batch.as_ref().unwrap().num_bytes(), 48); - assert_eq!(subrequests[2].index_id, "my-index-3"); - assert_eq!(subrequests[2].source_id, INGEST_V2_SOURCE_ID); - assert_eq!(subrequests[2].doc_batch.as_ref().unwrap().num_docs(), 1); - assert_eq!(subrequests[2].doc_batch.as_ref().unwrap().num_bytes(), 48); - Ok(IngestResponseV2 { successes: vec![ IngestSuccess { @@ -175,12 +180,7 @@ mod tests { replication_position_inclusive: Some(Position::offset(0u64)), }, ], - failures: vec![IngestFailure { - subrequest_id: 2, - index_id: "my-index-3".to_string(), - source_id: INGEST_V2_SOURCE_ID.to_string(), - reason: IngestFailureReason::IndexNotFound as i32, - }], + failures: Vec::new(), }) }); let ingest_router = IngestRouterServiceClient::from(ingest_router_mock); @@ -193,8 +193,6 @@ mod tests { {"ts": 1, "message": "my-message-1"} {"create": {"_index": "my-index-1"}} {"ts": 2, "message": "my-message-2"} - {"create": {"_index": "my-index-3"}} - {"ts": 1, "message": "my-message-1"} "#; let response = warp::test::request() .path("/_elastic/_bulk") @@ -205,7 +203,7 @@ mod tests { assert_eq!(response.status(), 200); let bulk_response: ElasticBulkResponse = serde_json::from_slice(response.body()).unwrap(); - assert!(bulk_response.errors); + assert!(!bulk_response.errors); } #[tokio::test] @@ -338,4 +336,41 @@ mod tests { let reason = es_error.error.reason.unwrap(); assert_eq!(reason, "`_index` field of action on line #0 is missing"); } + + // Airmail-specific test. It should go away when we straighten out the API response. + #[tokio::test] + async fn test_bulk_api_returns_404_on_index_not_found() { + let mut ingest_router_mock = IngestRouterServiceClient::mock(); + ingest_router_mock.expect_ingest().once().returning(|_| { + Ok(IngestResponseV2 { + successes: Vec::new(), + failures: vec![IngestFailure { + subrequest_id: 2, + index_id: "my-index".to_string(), + source_id: INGEST_V2_SOURCE_ID.to_string(), + reason: IngestFailureReason::IndexNotFound as i32, + }], + }) + }); + let ingest_router = IngestRouterServiceClient::from(ingest_router_mock); + let handler = es_compat_bulk_handler_v2(ingest_router); + + let payload = r#" + {"create": {"_index": "my-index", "_id" : "1"}} + {"ts": 1, "message": "my-message"} + "#; + let response = warp::test::request() + .path("/_elastic/_bulk") + .method("POST") + .body(payload) + .reply(&handler) + .await; + assert_eq!(response.status(), 404); + + let es_error: ElasticSearchError = serde_json::from_slice(response.body()).unwrap(); + assert_eq!(es_error.status, StatusCode::NOT_FOUND); + + let reason = es_error.error.reason.unwrap(); + assert_eq!(reason, "index `my-index` not found"); + } } From f8e2283c22b1f07931660c4d060e9bcbd719c3fe Mon Sep 17 00:00:00 2001 From: Adrien Guillo Date: Thu, 18 Jan 2024 14:35:07 -0500 Subject: [PATCH 2/3] Rename `elastic_search` -> `elasticsearch` --- .../bulk.rs | 12 ++++++------ .../bulk_v2.rs | 10 +++++----- .../filter.rs | 4 ++-- .../{elastic_search_api => elasticsearch_api}/mod.rs | 6 +++--- .../model/bulk_body.rs | 4 ++-- .../model/bulk_query_params.rs | 4 ++-- .../model/error.rs | 0 .../model/field_capability.rs | 0 .../model/mod.rs | 0 .../model/multi_search.rs | 0 .../model/scroll.rs | 0 .../model/search_body.rs | 4 ++-- .../model/search_query_params.rs | 2 +- .../rest_handler.rs | 4 ++-- quickwit/quickwit-serve/src/lib.rs | 2 +- quickwit/quickwit-serve/src/openapi.rs | 2 +- quickwit/quickwit-serve/src/rest.rs | 2 +- 17 files changed, 28 insertions(+), 28 deletions(-) rename quickwit/quickwit-serve/src/{elastic_search_api => elasticsearch_api}/bulk.rs (97%) rename quickwit/quickwit-serve/src/{elastic_search_api => elasticsearch_api}/bulk_v2.rs (97%) rename quickwit/quickwit-serve/src/{elastic_search_api => elasticsearch_api}/filter.rs (99%) rename quickwit/quickwit-serve/src/{elastic_search_api => elasticsearch_api}/mod.rs (98%) rename quickwit/quickwit-serve/src/{elastic_search_api => elasticsearch_api}/model/bulk_body.rs (96%) rename quickwit/quickwit-serve/src/{elastic_search_api => elasticsearch_api}/model/bulk_query_params.rs (96%) rename quickwit/quickwit-serve/src/{elastic_search_api => elasticsearch_api}/model/error.rs (100%) rename quickwit/quickwit-serve/src/{elastic_search_api => elasticsearch_api}/model/field_capability.rs (100%) rename quickwit/quickwit-serve/src/{elastic_search_api => elasticsearch_api}/model/mod.rs (100%) rename quickwit/quickwit-serve/src/{elastic_search_api => elasticsearch_api}/model/multi_search.rs (100%) rename quickwit/quickwit-serve/src/{elastic_search_api => elasticsearch_api}/model/scroll.rs (100%) rename quickwit/quickwit-serve/src/{elastic_search_api => elasticsearch_api}/model/search_body.rs (98%) rename quickwit/quickwit-serve/src/{elastic_search_api => elasticsearch_api}/model/search_query_params.rs (99%) rename quickwit/quickwit-serve/src/{elastic_search_api => elasticsearch_api}/rest_handler.rs (99%) diff --git a/quickwit/quickwit-serve/src/elastic_search_api/bulk.rs b/quickwit/quickwit-serve/src/elasticsearch_api/bulk.rs similarity index 97% rename from quickwit/quickwit-serve/src/elastic_search_api/bulk.rs rename to quickwit/quickwit-serve/src/elasticsearch_api/bulk.rs index 3ab0186e7d3..0b8671d57d8 100644 --- a/quickwit/quickwit-serve/src/elastic_search_api/bulk.rs +++ b/quickwit/quickwit-serve/src/elasticsearch_api/bulk.rs @@ -31,9 +31,9 @@ use quickwit_proto::types::IndexId; use warp::{Filter, Rejection}; use super::bulk_v2::{elastic_bulk_ingest_v2, ElasticBulkResponse}; -use crate::elastic_search_api::filter::{elastic_bulk_filter, elastic_index_bulk_filter}; -use crate::elastic_search_api::make_elastic_api_response; -use crate::elastic_search_api::model::{BulkAction, ElasticBulkOptions, ElasticSearchError}; +use crate::elasticsearch_api::filter::{elastic_bulk_filter, elastic_index_bulk_filter}; +use crate::elasticsearch_api::make_elastic_api_response; +use crate::elasticsearch_api::model::{BulkAction, ElasticBulkOptions, ElasticSearchError}; use crate::format::extract_format_from_qs; use crate::ingest_api::lines; use crate::with_arg; @@ -152,9 +152,9 @@ mod tests { use quickwit_proto::ingest::router::IngestRouterServiceClient; use quickwit_search::MockSearchService; - use crate::elastic_search_api::bulk_v2::ElasticBulkResponse; - use crate::elastic_search_api::elastic_api_handlers; - use crate::elastic_search_api::model::ElasticSearchError; + use crate::elasticsearch_api::bulk_v2::ElasticBulkResponse; + use crate::elasticsearch_api::elastic_api_handlers; + use crate::elasticsearch_api::model::ElasticSearchError; use crate::ingest_api::setup_ingest_service; #[tokio::test] diff --git a/quickwit/quickwit-serve/src/elastic_search_api/bulk_v2.rs b/quickwit/quickwit-serve/src/elasticsearch_api/bulk_v2.rs similarity index 97% rename from quickwit/quickwit-serve/src/elastic_search_api/bulk_v2.rs rename to quickwit/quickwit-serve/src/elasticsearch_api/bulk_v2.rs index 019978fe2fa..9cd442eb434 100644 --- a/quickwit/quickwit-serve/src/elastic_search_api/bulk_v2.rs +++ b/quickwit/quickwit-serve/src/elasticsearch_api/bulk_v2.rs @@ -31,7 +31,7 @@ use quickwit_proto::types::IndexId; use serde::{Deserialize, Serialize}; use tracing::warn; -use crate::elastic_search_api::model::{BulkAction, ElasticBulkOptions, ElasticSearchError}; +use crate::elasticsearch_api::model::{BulkAction, ElasticBulkOptions, ElasticSearchError}; use crate::ingest_api::lines; #[derive(Debug, Default, Serialize, Deserialize)] @@ -118,10 +118,10 @@ mod tests { use warp::{Filter, Rejection, Reply}; use super::*; - use crate::elastic_search_api::bulk_v2::ElasticBulkResponse; - use crate::elastic_search_api::filter::elastic_bulk_filter; - use crate::elastic_search_api::make_elastic_api_response; - use crate::elastic_search_api::model::ElasticSearchError; + use crate::elasticsearch_api::bulk_v2::ElasticBulkResponse; + use crate::elasticsearch_api::filter::elastic_bulk_filter; + use crate::elasticsearch_api::make_elastic_api_response; + use crate::elasticsearch_api::model::ElasticSearchError; use crate::format::extract_format_from_qs; use crate::with_arg; diff --git a/quickwit/quickwit-serve/src/elastic_search_api/filter.rs b/quickwit/quickwit-serve/src/elasticsearch_api/filter.rs similarity index 99% rename from quickwit/quickwit-serve/src/elastic_search_api/filter.rs rename to quickwit/quickwit-serve/src/elasticsearch_api/filter.rs index 2e41c6d013b..e20dc0e6b2f 100644 --- a/quickwit/quickwit-serve/src/elastic_search_api/filter.rs +++ b/quickwit/quickwit-serve/src/elasticsearch_api/filter.rs @@ -27,7 +27,7 @@ use super::model::{ FieldCapabilityQueryParams, FieldCapabilityRequestBody, MultiSearchQueryParams, SearchQueryParamsCount, }; -use crate::elastic_search_api::model::{ +use crate::elasticsearch_api::model::{ ElasticBulkOptions, ScrollQueryParams, SearchBody, SearchQueryParams, }; use crate::search_api::{extract_index_id_patterns, extract_index_id_patterns_default}; @@ -50,7 +50,7 @@ pub(crate) fn elastic_cluster_info_filter() -> impl Filter impl Filter + Clone { warp::path!("_elastic" / "_search") .and(warp::get().or(warp::post()).unify()) diff --git a/quickwit/quickwit-serve/src/elastic_search_api/mod.rs b/quickwit/quickwit-serve/src/elasticsearch_api/mod.rs similarity index 98% rename from quickwit/quickwit-serve/src/elastic_search_api/mod.rs rename to quickwit/quickwit-serve/src/elasticsearch_api/mod.rs index 99fa2605911..eed009fdce7 100644 --- a/quickwit/quickwit-serve/src/elastic_search_api/mod.rs +++ b/quickwit/quickwit-serve/src/elasticsearch_api/mod.rs @@ -42,7 +42,7 @@ use warp::{Filter, Rejection}; use self::rest_handler::{ es_compat_index_count_handler, es_compat_index_field_capabilities_handler, }; -use crate::elastic_search_api::model::ElasticSearchError; +use crate::elasticsearch_api::model::ElasticSearchError; use crate::json_api_response::JsonApiResponse; use crate::{BodyFormat, BuildInfo}; @@ -129,8 +129,8 @@ mod tests { use super::elastic_api_handlers; use super::model::ElasticSearchError; - use crate::elastic_search_api::model::MultiSearchResponse; - use crate::elastic_search_api::rest_handler::es_compat_cluster_info_handler; + use crate::elasticsearch_api::model::MultiSearchResponse; + use crate::elasticsearch_api::rest_handler::es_compat_cluster_info_handler; use crate::rest::recover_fn; use crate::BuildInfo; diff --git a/quickwit/quickwit-serve/src/elastic_search_api/model/bulk_body.rs b/quickwit/quickwit-serve/src/elasticsearch_api/model/bulk_body.rs similarity index 96% rename from quickwit/quickwit-serve/src/elastic_search_api/model/bulk_body.rs rename to quickwit/quickwit-serve/src/elasticsearch_api/model/bulk_body.rs index d4c65e56dad..2c394aafbbe 100644 --- a/quickwit/quickwit-serve/src/elastic_search_api/model/bulk_body.rs +++ b/quickwit/quickwit-serve/src/elasticsearch_api/model/bulk_body.rs @@ -48,8 +48,8 @@ pub struct BulkActionMeta { #[cfg(test)] mod tests { - use crate::elastic_search_api::model::bulk_body::BulkActionMeta; - use crate::elastic_search_api::model::BulkAction; + use crate::elasticsearch_api::model::bulk_body::BulkActionMeta; + use crate::elasticsearch_api::model::BulkAction; #[test] fn test_bulk_action_serde() { diff --git a/quickwit/quickwit-serve/src/elastic_search_api/model/bulk_query_params.rs b/quickwit/quickwit-serve/src/elasticsearch_api/model/bulk_query_params.rs similarity index 96% rename from quickwit/quickwit-serve/src/elastic_search_api/model/bulk_query_params.rs rename to quickwit/quickwit-serve/src/elasticsearch_api/model/bulk_query_params.rs index 593c6364bda..8c343e20783 100644 --- a/quickwit/quickwit-serve/src/elastic_search_api/model/bulk_query_params.rs +++ b/quickwit/quickwit-serve/src/elasticsearch_api/model/bulk_query_params.rs @@ -73,8 +73,8 @@ impl From for CommitTypeV2 { #[cfg(test)] mod tests { - use crate::elastic_search_api::model::bulk_query_params::ElasticRefresh; - use crate::elastic_search_api::model::ElasticBulkOptions; + use crate::elasticsearch_api::model::bulk_query_params::ElasticRefresh; + use crate::elasticsearch_api::model::ElasticBulkOptions; #[test] fn test_elastic_refresh_parsing() { diff --git a/quickwit/quickwit-serve/src/elastic_search_api/model/error.rs b/quickwit/quickwit-serve/src/elasticsearch_api/model/error.rs similarity index 100% rename from quickwit/quickwit-serve/src/elastic_search_api/model/error.rs rename to quickwit/quickwit-serve/src/elasticsearch_api/model/error.rs diff --git a/quickwit/quickwit-serve/src/elastic_search_api/model/field_capability.rs b/quickwit/quickwit-serve/src/elasticsearch_api/model/field_capability.rs similarity index 100% rename from quickwit/quickwit-serve/src/elastic_search_api/model/field_capability.rs rename to quickwit/quickwit-serve/src/elasticsearch_api/model/field_capability.rs diff --git a/quickwit/quickwit-serve/src/elastic_search_api/model/mod.rs b/quickwit/quickwit-serve/src/elasticsearch_api/model/mod.rs similarity index 100% rename from quickwit/quickwit-serve/src/elastic_search_api/model/mod.rs rename to quickwit/quickwit-serve/src/elasticsearch_api/model/mod.rs diff --git a/quickwit/quickwit-serve/src/elastic_search_api/model/multi_search.rs b/quickwit/quickwit-serve/src/elasticsearch_api/model/multi_search.rs similarity index 100% rename from quickwit/quickwit-serve/src/elastic_search_api/model/multi_search.rs rename to quickwit/quickwit-serve/src/elasticsearch_api/model/multi_search.rs diff --git a/quickwit/quickwit-serve/src/elastic_search_api/model/scroll.rs b/quickwit/quickwit-serve/src/elasticsearch_api/model/scroll.rs similarity index 100% rename from quickwit/quickwit-serve/src/elastic_search_api/model/scroll.rs rename to quickwit/quickwit-serve/src/elasticsearch_api/model/scroll.rs diff --git a/quickwit/quickwit-serve/src/elastic_search_api/model/search_body.rs b/quickwit/quickwit-serve/src/elasticsearch_api/model/search_body.rs similarity index 98% rename from quickwit/quickwit-serve/src/elastic_search_api/model/search_body.rs rename to quickwit/quickwit-serve/src/elasticsearch_api/model/search_body.rs index 32fc486ca96..51b7296d516 100644 --- a/quickwit/quickwit-serve/src/elastic_search_api/model/search_body.rs +++ b/quickwit/quickwit-serve/src/elasticsearch_api/model/search_body.rs @@ -26,8 +26,8 @@ use serde::de::{MapAccess, Visitor}; use serde::{Deserialize, Deserializer, Serialize}; use super::ElasticDateFormat; -use crate::elastic_search_api::model::{default_elasticsearch_sort_order, SortField}; -use crate::elastic_search_api::TrackTotalHits; +use crate::elasticsearch_api::model::{default_elasticsearch_sort_order, SortField}; +use crate::elasticsearch_api::TrackTotalHits; #[derive(Debug, Clone, PartialEq, Deserialize)] #[serde(untagged)] diff --git a/quickwit/quickwit-serve/src/elastic_search_api/model/search_query_params.rs b/quickwit/quickwit-serve/src/elasticsearch_api/model/search_query_params.rs similarity index 99% rename from quickwit/quickwit-serve/src/elastic_search_api/model/search_query_params.rs rename to quickwit/quickwit-serve/src/elasticsearch_api/model/search_query_params.rs index 443c190ad66..7165343266e 100644 --- a/quickwit/quickwit-serve/src/elastic_search_api/model/search_query_params.rs +++ b/quickwit/quickwit-serve/src/elasticsearch_api/model/search_query_params.rs @@ -27,7 +27,7 @@ use serde::{Deserialize, Serialize}; use super::super::TrackTotalHits; use super::MultiSearchHeader; -use crate::elastic_search_api::model::{default_elasticsearch_sort_order, SortField}; +use crate::elasticsearch_api::model::{default_elasticsearch_sort_order, SortField}; use crate::simple_list::{from_simple_list, to_simple_list}; #[serde_with::skip_serializing_none] diff --git a/quickwit/quickwit-serve/src/elastic_search_api/rest_handler.rs b/quickwit/quickwit-serve/src/elasticsearch_api/rest_handler.rs similarity index 99% rename from quickwit/quickwit-serve/src/elastic_search_api/rest_handler.rs rename to quickwit/quickwit-serve/src/elasticsearch_api/rest_handler.rs index 1ea2e600a12..fc254c5f2e8 100644 --- a/quickwit/quickwit-serve/src/elastic_search_api/rest_handler.rs +++ b/quickwit/quickwit-serve/src/elasticsearch_api/rest_handler.rs @@ -45,7 +45,7 @@ use warp::{Filter, Rejection}; use super::filter::{ elastic_cluster_info_filter, elastic_field_capabilities_filter, elastic_index_count_filter, elastic_index_field_capabilities_filter, elastic_index_search_filter, - elastic_multi_search_filter, elastic_scroll_filter, elastic_search_filter, + elastic_multi_search_filter, elastic_scroll_filter, elasticsearch_filter, }; use super::model::{ build_list_field_request_for_es_api, convert_to_es_field_capabilities_response, @@ -87,7 +87,7 @@ pub fn es_compat_cluster_info_handler( pub fn es_compat_search_handler( _search_service: Arc, ) -> impl Filter + Clone { - elastic_search_filter().then(|_params: SearchQueryParams| async move { + elasticsearch_filter().then(|_params: SearchQueryParams| async move { // TODO let api_error = ApiError { service_code: ServiceErrorCode::NotSupportedYet, diff --git a/quickwit/quickwit-serve/src/lib.rs b/quickwit/quickwit-serve/src/lib.rs index d0f4f5d2b40..8ed0b4c3748 100644 --- a/quickwit/quickwit-serve/src/lib.rs +++ b/quickwit/quickwit-serve/src/lib.rs @@ -21,7 +21,7 @@ mod build_info; mod cluster_api; mod debugging_api; mod delete_task_api; -mod elastic_search_api; +mod elasticsearch_api; mod format; mod grpc; mod health_check_api; diff --git a/quickwit/quickwit-serve/src/openapi.rs b/quickwit/quickwit-serve/src/openapi.rs index 24319cfb36e..a9bcd32b6a3 100644 --- a/quickwit/quickwit-serve/src/openapi.rs +++ b/quickwit/quickwit-serve/src/openapi.rs @@ -30,7 +30,7 @@ use utoipa::OpenApi; use crate::cluster_api::ClusterApi; use crate::debugging_api::DebugApi; use crate::delete_task_api::DeleteTaskApi; -use crate::elastic_search_api::ElasticCompatibleApi; +use crate::elasticsearch_api::ElasticCompatibleApi; use crate::health_check_api::HealthCheckApi; use crate::index_api::IndexApi; use crate::indexing_api::IndexingApi; diff --git a/quickwit/quickwit-serve/src/rest.rs b/quickwit/quickwit-serve/src/rest.rs index 2e89fd28180..3e68614181e 100644 --- a/quickwit/quickwit-serve/src/rest.rs +++ b/quickwit/quickwit-serve/src/rest.rs @@ -35,7 +35,7 @@ use warp::{redirect, Filter, Rejection, Reply}; use crate::cluster_api::cluster_handler; use crate::debugging_api::debugging_handler; use crate::delete_task_api::delete_task_api_handlers; -use crate::elastic_search_api::elastic_api_handlers; +use crate::elasticsearch_api::elastic_api_handlers; use crate::health_check_api::health_check_handlers; use crate::index_api::index_management_handlers; use crate::indexing_api::indexing_get_handler; From b57998aaf232070d5629ea0411fb4dde808655c5 Mon Sep 17 00:00:00 2001 From: Adrien Guillo Date: Thu, 18 Jan 2024 14:41:32 -0500 Subject: [PATCH 3/3] Rename `ElasticSearch` -> `Elasticsearch` --- .../src/query_ast/bool_query.rs | 2 +- .../src/elasticsearch_api/bulk.rs | 14 +++--- .../src/elasticsearch_api/bulk_v2.rs | 22 ++++----- .../src/elasticsearch_api/mod.rs | 14 +++--- .../src/elasticsearch_api/model/error.rs | 18 +++---- .../model/field_capability.rs | 4 +- .../src/elasticsearch_api/model/mod.rs | 2 +- .../elasticsearch_api/model/multi_search.rs | 14 +++--- .../src/elasticsearch_api/rest_handler.rs | 48 +++++++++---------- 9 files changed, 69 insertions(+), 69 deletions(-) diff --git a/quickwit/quickwit-query/src/query_ast/bool_query.rs b/quickwit/quickwit-query/src/query_ast/bool_query.rs index 2c2801b0ec5..e8f3dc9819a 100644 --- a/quickwit/quickwit-query/src/query_ast/bool_query.rs +++ b/quickwit/quickwit-query/src/query_ast/bool_query.rs @@ -32,7 +32,7 @@ use crate::InvalidQuery; /// Edge cases of BooleanQuery are not obvious, /// and different beahvior could be justified. /// -/// Here we aligne ourselves with ElasticSearch. +/// Here we aligne ourselves with Elasticsearch. /// A boolean query is to be interpreted like a filtering predicate /// over the set of documents. /// diff --git a/quickwit/quickwit-serve/src/elasticsearch_api/bulk.rs b/quickwit/quickwit-serve/src/elasticsearch_api/bulk.rs index 0b8671d57d8..5566eaff2b9 100644 --- a/quickwit/quickwit-serve/src/elasticsearch_api/bulk.rs +++ b/quickwit/quickwit-serve/src/elasticsearch_api/bulk.rs @@ -33,7 +33,7 @@ use warp::{Filter, Rejection}; use super::bulk_v2::{elastic_bulk_ingest_v2, ElasticBulkResponse}; use crate::elasticsearch_api::filter::{elastic_bulk_filter, elastic_index_bulk_filter}; use crate::elasticsearch_api::make_elastic_api_response; -use crate::elasticsearch_api::model::{BulkAction, ElasticBulkOptions, ElasticSearchError}; +use crate::elasticsearch_api::model::{BulkAction, ElasticBulkOptions, ElasticsearchError}; use crate::format::extract_format_from_qs; use crate::ingest_api::lines; use crate::with_arg; @@ -82,7 +82,7 @@ async fn elastic_ingest_bulk( bulk_options: ElasticBulkOptions, mut ingest_service: IngestServiceClient, ingest_router: IngestRouterServiceClient, -) -> Result { +) -> Result { if enable_ingest_v2() { return elastic_bulk_ingest_v2(default_index_id, body, bulk_options, ingest_router).await; } @@ -92,13 +92,13 @@ async fn elastic_ingest_bulk( while let Some((line_number, line)) = lines.next() { let action = serde_json::from_slice::(line).map_err(|error| { - ElasticSearchError::new( + ElasticsearchError::new( StatusCode::BAD_REQUEST, format!("Malformed action/metadata line [#{line_number}]. Details: `{error}`"), ) })?; let (_, source) = lines.next().ok_or_else(|| { - ElasticSearchError::new( + ElasticsearchError::new( StatusCode::BAD_REQUEST, "expected source for the action".to_string(), ) @@ -110,7 +110,7 @@ async fn elastic_ingest_bulk( .into_index_id() .or_else(|| default_index_id.clone()) .ok_or_else(|| { - ElasticSearchError::new( + ElasticsearchError::new( StatusCode::BAD_REQUEST, format!("missing required field: `_index` in the line [#{line_number}]."), ) @@ -154,7 +154,7 @@ mod tests { use crate::elasticsearch_api::bulk_v2::ElasticBulkResponse; use crate::elasticsearch_api::elastic_api_handlers; - use crate::elasticsearch_api::model::ElasticSearchError; + use crate::elasticsearch_api::model::ElasticsearchError; use crate::ingest_api::setup_ingest_service; #[tokio::test] @@ -437,7 +437,7 @@ mod tests { .reply(&elastic_api_handlers) .await; assert_eq!(resp.status(), 400); - let es_error: ElasticSearchError = serde_json::from_slice(resp.body()).unwrap(); + let es_error: ElasticsearchError = serde_json::from_slice(resp.body()).unwrap(); assert_eq!(es_error.status, StatusCode::BAD_REQUEST); assert_eq!( es_error.error.reason.unwrap(), diff --git a/quickwit/quickwit-serve/src/elasticsearch_api/bulk_v2.rs b/quickwit/quickwit-serve/src/elasticsearch_api/bulk_v2.rs index 9cd442eb434..a0bdaa70dbf 100644 --- a/quickwit/quickwit-serve/src/elasticsearch_api/bulk_v2.rs +++ b/quickwit/quickwit-serve/src/elasticsearch_api/bulk_v2.rs @@ -31,7 +31,7 @@ use quickwit_proto::types::IndexId; use serde::{Deserialize, Serialize}; use tracing::warn; -use crate::elasticsearch_api::model::{BulkAction, ElasticBulkOptions, ElasticSearchError}; +use crate::elasticsearch_api::model::{BulkAction, ElasticBulkOptions, ElasticsearchError}; use crate::ingest_api::lines; #[derive(Debug, Default, Serialize, Deserialize)] @@ -46,20 +46,20 @@ pub(crate) async fn elastic_bulk_ingest_v2( body: Bytes, bulk_options: ElasticBulkOptions, mut ingest_router: IngestRouterServiceClient, -) -> Result { +) -> Result { let now = Instant::now(); let mut ingest_request_builder = IngestRequestV2Builder::default(); let mut lines = lines(&body).enumerate(); while let Some((line_no, line)) = lines.next() { let action = serde_json::from_slice::(line).map_err(|error| { - ElasticSearchError::new( + ElasticsearchError::new( StatusCode::BAD_REQUEST, format!("unsupported or malformed action on line #{line_no}: `{error}`"), ) })?; let (_, source) = lines.next().ok_or_else(|| { - ElasticSearchError::new( + ElasticsearchError::new( StatusCode::BAD_REQUEST, format!("associated source data with action on line #{line_no} is missing"), ) @@ -72,7 +72,7 @@ pub(crate) async fn elastic_bulk_ingest_v2( .into_index_id() .or_else(|| default_index_id.clone()) .ok_or_else(|| { - ElasticSearchError::new( + ElasticsearchError::new( StatusCode::BAD_REQUEST, format!("`_index` field of action on line #{line_no} is missing"), ) @@ -95,7 +95,7 @@ pub(crate) async fn elastic_bulk_ingest_v2( // This custom logic for Airmail is temporary. if failure.reason() == IngestFailureReason::IndexNotFound { let reason = format!("index `{}` not found", failure.index_id); - let elasticsearch_error = ElasticSearchError::new(StatusCode::NOT_FOUND, reason); + let elasticsearch_error = ElasticsearchError::new(StatusCode::NOT_FOUND, reason); return Err(elasticsearch_error); } } @@ -121,7 +121,7 @@ mod tests { use crate::elasticsearch_api::bulk_v2::ElasticBulkResponse; use crate::elasticsearch_api::filter::elastic_bulk_filter; use crate::elasticsearch_api::make_elastic_api_response; - use crate::elasticsearch_api::model::ElasticSearchError; + use crate::elasticsearch_api::model::ElasticsearchError; use crate::format::extract_format_from_qs; use crate::with_arg; @@ -289,7 +289,7 @@ mod tests { .await; assert_eq!(response.status(), 400); - let es_error: ElasticSearchError = serde_json::from_slice(response.body()).unwrap(); + let es_error: ElasticsearchError = serde_json::from_slice(response.body()).unwrap(); assert_eq!(es_error.status, StatusCode::BAD_REQUEST); let reason = es_error.error.reason.unwrap(); @@ -309,7 +309,7 @@ mod tests { .await; assert_eq!(response.status(), 400); - let es_error: ElasticSearchError = serde_json::from_slice(response.body()).unwrap(); + let es_error: ElasticsearchError = serde_json::from_slice(response.body()).unwrap(); assert_eq!(es_error.status, StatusCode::BAD_REQUEST); let reason = es_error.error.reason.unwrap(); @@ -330,7 +330,7 @@ mod tests { .await; assert_eq!(response.status(), 400); - let es_error: ElasticSearchError = serde_json::from_slice(response.body()).unwrap(); + let es_error: ElasticsearchError = serde_json::from_slice(response.body()).unwrap(); assert_eq!(es_error.status, StatusCode::BAD_REQUEST); let reason = es_error.error.reason.unwrap(); @@ -367,7 +367,7 @@ mod tests { .await; assert_eq!(response.status(), 404); - let es_error: ElasticSearchError = serde_json::from_slice(response.body()).unwrap(); + let es_error: ElasticsearchError = serde_json::from_slice(response.body()).unwrap(); assert_eq!(es_error.status, StatusCode::NOT_FOUND); let reason = es_error.error.reason.unwrap(); diff --git a/quickwit/quickwit-serve/src/elasticsearch_api/mod.rs b/quickwit/quickwit-serve/src/elasticsearch_api/mod.rs index eed009fdce7..356d20b89c2 100644 --- a/quickwit/quickwit-serve/src/elasticsearch_api/mod.rs +++ b/quickwit/quickwit-serve/src/elasticsearch_api/mod.rs @@ -42,7 +42,7 @@ use warp::{Filter, Rejection}; use self::rest_handler::{ es_compat_index_count_handler, es_compat_index_field_capabilities_handler, }; -use crate::elasticsearch_api::model::ElasticSearchError; +use crate::elasticsearch_api::model::ElasticsearchError; use crate::json_api_response::JsonApiResponse; use crate::{BodyFormat, BuildInfo}; @@ -103,7 +103,7 @@ impl From for TrackTotalHits { } fn make_elastic_api_response( - elasticsearch_result: Result, + elasticsearch_result: Result, format: BodyFormat, ) -> JsonApiResponse { let status_code = match &elasticsearch_result { @@ -128,7 +128,7 @@ mod tests { use warp::Filter; use super::elastic_api_handlers; - use super::model::ElasticSearchError; + use super::model::ElasticsearchError; use crate::elasticsearch_api::model::MultiSearchResponse; use crate::elasticsearch_api::rest_handler::es_compat_cluster_info_handler; use crate::rest::recover_fn; @@ -263,7 +263,7 @@ mod tests { .reply(&es_search_api_handler) .await; assert_eq!(resp.status(), 400); - let es_error: ElasticSearchError = serde_json::from_slice(resp.body()).unwrap(); + let es_error: ElasticsearchError = serde_json::from_slice(resp.body()).unwrap(); assert!(es_error .error .reason @@ -294,7 +294,7 @@ mod tests { .reply(&es_search_api_handler) .await; assert_eq!(resp.status(), 400); - let es_error: ElasticSearchError = serde_json::from_slice(resp.body()).unwrap(); + let es_error: ElasticsearchError = serde_json::from_slice(resp.body()).unwrap(); assert!(es_error .error .reason @@ -324,7 +324,7 @@ mod tests { .reply(&es_search_api_handler) .await; assert_eq!(resp.status(), 400); - let es_error: ElasticSearchError = serde_json::from_slice(resp.body()).unwrap(); + let es_error: ElasticsearchError = serde_json::from_slice(resp.body()).unwrap(); assert!(es_error .error .reason @@ -355,7 +355,7 @@ mod tests { .reply(&es_search_api_handler) .await; assert_eq!(resp.status(), 400); - let es_error: ElasticSearchError = serde_json::from_slice(resp.body()).unwrap(); + let es_error: ElasticsearchError = serde_json::from_slice(resp.body()).unwrap(); assert_eq!( es_error.error.reason.unwrap(), "Invalid argument: `_msearch` request header must define at least one index" diff --git a/quickwit/quickwit-serve/src/elasticsearch_api/model/error.rs b/quickwit/quickwit-serve/src/elasticsearch_api/model/error.rs index 4e6f3efc21f..674800a8509 100644 --- a/quickwit/quickwit-serve/src/elasticsearch_api/model/error.rs +++ b/quickwit/quickwit-serve/src/elasticsearch_api/model/error.rs @@ -26,15 +26,15 @@ use quickwit_search::SearchError; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] -pub struct ElasticSearchError { +pub struct ElasticsearchError { #[serde(with = "http_serde::status_code")] pub status: StatusCode, pub error: ErrorCause, } -impl ElasticSearchError { +impl ElasticsearchError { pub fn new(status: StatusCode, reason_string: String) -> Self { - ElasticSearchError { + ElasticsearchError { status, error: ErrorCause { reason: Some(reason_string), @@ -49,7 +49,7 @@ impl ElasticSearchError { } } -impl From for ElasticSearchError { +impl From for ElasticsearchError { fn from(search_error: SearchError) -> Self { let status = search_error.error_code().to_http_status_code(); // Fill only reason field to keep it simple. @@ -62,14 +62,14 @@ impl From for ElasticSearchError { ty: None, additional_details: Default::default(), }; - ElasticSearchError { + ElasticsearchError { status, error: reason, } } } -impl From for ElasticSearchError { +impl From for ElasticsearchError { fn from(ingest_service_error: IngestServiceError) -> Self { let status = ingest_service_error.error_code().to_http_status_code(); @@ -82,14 +82,14 @@ impl From for ElasticSearchError { ty: None, additional_details: Default::default(), }; - ElasticSearchError { + ElasticsearchError { status, error: reason, } } } -impl From for ElasticSearchError { +impl From for ElasticsearchError { fn from(ingest_error: IngestV2Error) -> Self { let status = ingest_error.error_code().to_http_status_code(); @@ -102,7 +102,7 @@ impl From for ElasticSearchError { ty: None, additional_details: Default::default(), }; - ElasticSearchError { + ElasticsearchError { status, error: reason, } diff --git a/quickwit/quickwit-serve/src/elasticsearch_api/model/field_capability.rs b/quickwit/quickwit-serve/src/elasticsearch_api/model/field_capability.rs index dd54b07aa83..46b0af9503c 100644 --- a/quickwit/quickwit-serve/src/elasticsearch_api/model/field_capability.rs +++ b/quickwit/quickwit-serve/src/elasticsearch_api/model/field_capability.rs @@ -23,7 +23,7 @@ use quickwit_proto::search::{ListFieldType, ListFieldsEntryResponse, ListFieldsR use serde::{Deserialize, Serialize}; use super::search_query_params::*; -use super::ElasticSearchError; +use super::ElasticsearchError; use crate::simple_list::{from_simple_list, to_simple_list}; #[serde_with::skip_serializing_none] @@ -182,7 +182,7 @@ pub fn build_list_field_request_for_es_api( index_id_patterns: Vec, search_params: FieldCapabilityQueryParams, _search_body: FieldCapabilityRequestBody, -) -> Result { +) -> Result { Ok(quickwit_proto::search::ListFieldsRequest { index_id_patterns, fields: search_params.fields.unwrap_or_default(), diff --git a/quickwit/quickwit-serve/src/elasticsearch_api/model/mod.rs b/quickwit/quickwit-serve/src/elasticsearch_api/model/mod.rs index 33776c5a097..6438256e6c8 100644 --- a/quickwit/quickwit-serve/src/elasticsearch_api/model/mod.rs +++ b/quickwit/quickwit-serve/src/elasticsearch_api/model/mod.rs @@ -28,7 +28,7 @@ mod search_query_params; pub use bulk_body::BulkAction; pub use bulk_query_params::ElasticBulkOptions; -pub use error::ElasticSearchError; +pub use error::ElasticsearchError; pub use field_capability::{ build_list_field_request_for_es_api, convert_to_es_field_capabilities_response, FieldCapabilityQueryParams, FieldCapabilityRequestBody, FieldCapabilityResponse, diff --git a/quickwit/quickwit-serve/src/elasticsearch_api/model/multi_search.rs b/quickwit/quickwit-serve/src/elasticsearch_api/model/multi_search.rs index c57800e6518..f175273c9db 100644 --- a/quickwit/quickwit-serve/src/elasticsearch_api/model/multi_search.rs +++ b/quickwit/quickwit-serve/src/elasticsearch_api/model/multi_search.rs @@ -17,7 +17,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use elasticsearch_dsl::search::SearchResponse as ElasticSearchResponse; +use elasticsearch_dsl::search::SearchResponse as ElasticsearchResponse; use elasticsearch_dsl::ErrorCause; use hyper::StatusCode; use serde::{Deserialize, Serialize}; @@ -25,7 +25,7 @@ use serde_with::formats::PreferMany; use serde_with::{serde_as, OneOrMany}; use super::search_query_params::ExpandWildcards; -use super::ElasticSearchError; +use super::ElasticsearchError; use crate::simple_list::{from_simple_list, to_simple_list}; // Multi search doc: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html @@ -96,14 +96,14 @@ pub struct MultiSearchSingleResponse { #[serde(default)] #[serde(skip_serializing_if = "Option::is_none")] #[serde(flatten)] - pub response: Option, + pub response: Option, #[serde(default)] #[serde(skip_serializing_if = "Option::is_none")] pub error: Option, } -impl From for MultiSearchSingleResponse { - fn from(response: ElasticSearchResponse) -> Self { +impl From for MultiSearchSingleResponse { + fn from(response: ElasticsearchResponse) -> Self { MultiSearchSingleResponse { status: StatusCode::OK, response: Some(response), @@ -112,8 +112,8 @@ impl From for MultiSearchSingleResponse { } } -impl From for MultiSearchSingleResponse { - fn from(error: ElasticSearchError) -> Self { +impl From for MultiSearchSingleResponse { + fn from(error: ElasticsearchError) -> Self { MultiSearchSingleResponse { status: error.status, response: None, diff --git a/quickwit/quickwit-serve/src/elasticsearch_api/rest_handler.rs b/quickwit/quickwit-serve/src/elasticsearch_api/rest_handler.rs index fc254c5f2e8..3be0a4549a7 100644 --- a/quickwit/quickwit-serve/src/elasticsearch_api/rest_handler.rs +++ b/quickwit/quickwit-serve/src/elasticsearch_api/rest_handler.rs @@ -23,7 +23,7 @@ use std::sync::Arc; use std::time::{Duration, Instant}; use bytes::Bytes; -use elasticsearch_dsl::search::{Hit as ElasticHit, SearchResponse as ElasticSearchResponse}; +use elasticsearch_dsl::search::{Hit as ElasticHit, SearchResponse as ElasticsearchResponse}; use elasticsearch_dsl::{HitsMetadata, Source, TotalHits, TotalHitsRelation}; use futures_util::StreamExt; use hyper::StatusCode; @@ -49,7 +49,7 @@ use super::filter::{ }; use super::model::{ build_list_field_request_for_es_api, convert_to_es_field_capabilities_response, - ElasticSearchError, FieldCapabilityQueryParams, FieldCapabilityRequestBody, + ElasticsearchError, FieldCapabilityQueryParams, FieldCapabilityRequestBody, FieldCapabilityResponse, MultiSearchHeader, MultiSearchQueryParams, MultiSearchResponse, MultiSearchSingleResponse, ScrollQueryParams, SearchBody, SearchQueryParams, SearchQueryParamsCount, @@ -138,7 +138,7 @@ pub fn es_compat_index_multi_search_handler( elastic_multi_search_filter() .and(with_arg(search_service)) .then(es_compat_index_multi_search) - .map(|result: Result| { + .map(|result: Result| { let status_code = match &result { Ok(_) => StatusCode::OK, Err(err) => err.status, @@ -161,7 +161,7 @@ fn build_request_for_es_api( index_id_patterns: Vec, search_params: SearchQueryParams, search_body: SearchBody, -) -> Result<(quickwit_proto::search::SearchRequest, bool), ElasticSearchError> { +) -> Result<(quickwit_proto::search::SearchRequest, bool), ElasticsearchError> { let default_operator = search_params.default_operator.unwrap_or(BooleanOperand::Or); // The query string, if present, takes priority over what can be in the request // body. @@ -211,7 +211,7 @@ fn build_request_for_es_api( .take_while_inclusive(|sort_field| !is_doc_field(sort_field)) .collect(); if sort_fields.len() >= 3 { - return Err(ElasticSearchError::from(SearchError::InvalidArgument( + return Err(ElasticsearchError::from(SearchError::InvalidArgument( format!("only up to two sort fields supported at the moment. got {sort_fields:?}"), ))); } @@ -248,12 +248,12 @@ fn is_doc_field(field: &quickwit_proto::search::SortField) -> bool { fn partial_hit_from_search_after_param( search_after: Vec, sort_order: &[quickwit_proto::search::SortField], -) -> Result, ElasticSearchError> { +) -> Result, ElasticsearchError> { if search_after.is_empty() { return Ok(None); } if search_after.len() != sort_order.len() { - return Err(ElasticSearchError::new( + return Err(ElasticsearchError::new( StatusCode::BAD_REQUEST, "sort and search_after are of different length".to_string(), )); @@ -264,7 +264,7 @@ fn partial_hit_from_search_after_param( if let Some(value_str) = value.as_str() { let address: quickwit_search::GlobalDocAddress = value_str.parse().map_err(|_| { - ElasticSearchError::new( + ElasticsearchError::new( StatusCode::BAD_REQUEST, "invalid search_after doc id, must be of form \ `{split_id}:{segment_id: u32}:{doc_id: u32}`" @@ -276,14 +276,14 @@ fn partial_hit_from_search_after_param( parsed_search_after.doc_id = address.doc_addr.doc_id; return Ok(Some(parsed_search_after)); } else { - return Err(ElasticSearchError::new( + return Err(ElasticsearchError::new( StatusCode::BAD_REQUEST, "search_after doc id must be of string type".to_string(), )); } } else { let value = SortByValue::try_from_json(value).ok_or_else(|| { - ElasticSearchError::new( + ElasticsearchError::new( StatusCode::BAD_REQUEST, "invalid search_after field value, expect bool, number or string".to_string(), ) @@ -300,7 +300,7 @@ fn partial_hit_from_search_after_param( } #[derive(Debug, Serialize, Deserialize)] -struct ElasticSearchCountResponse { +struct ElasticsearchCountResponse { count: u64, } @@ -309,12 +309,12 @@ async fn es_compat_index_count( search_params: SearchQueryParamsCount, search_body: SearchBody, search_service: Arc, -) -> Result { +) -> Result { let search_params: SearchQueryParams = search_params.into(); let (search_request, _append_shard_doc) = build_request_for_es_api(index_id_patterns, search_params, search_body)?; let search_response: SearchResponse = search_service.root_search(search_request).await?; - let search_response_rest: ElasticSearchCountResponse = ElasticSearchCountResponse { + let search_response_rest: ElasticsearchCountResponse = ElasticsearchCountResponse { count: search_response.num_hits, }; Ok(search_response_rest) @@ -325,13 +325,13 @@ async fn es_compat_index_search( search_params: SearchQueryParams, search_body: SearchBody, search_service: Arc, -) -> Result { +) -> Result { let start_instant = Instant::now(); let (search_request, append_shard_doc) = build_request_for_es_api(index_id_patterns, search_params, search_body)?; let search_response: SearchResponse = search_service.root_search(search_request).await?; let elapsed = start_instant.elapsed(); - let mut search_response_rest: ElasticSearchResponse = + let mut search_response_rest: ElasticsearchResponse = convert_to_es_search_response(search_response, append_shard_doc); search_response_rest.took = elapsed.as_millis() as u32; Ok(search_response_rest) @@ -342,7 +342,7 @@ async fn es_compat_index_field_capabilities( search_params: FieldCapabilityQueryParams, search_body: FieldCapabilityRequestBody, search_service: Arc, -) -> Result { +) -> Result { let search_request = build_list_field_request_for_es_api(index_id_patterns, search_params, search_body)?; let search_response: ListFieldsResponse = @@ -390,7 +390,7 @@ async fn es_compat_index_multi_search( payload: Bytes, multi_search_params: MultiSearchQueryParams, search_service: Arc, -) -> Result { +) -> Result { let mut search_requests = Vec::new(); let str_payload = from_utf8(&payload) .map_err(|err| SearchError::InvalidQuery(format!("invalid UTF-8: {}", err)))?; @@ -405,7 +405,7 @@ async fn es_compat_index_multi_search( )) })?; if request_header.index.is_empty() { - return Err(ElasticSearchError::from(SearchError::InvalidArgument( + return Err(ElasticsearchError::from(SearchError::InvalidArgument( "`_msearch` request header must define at least one index".to_string(), ))); } @@ -448,10 +448,10 @@ async fn es_compat_index_multi_search( let search_response: SearchResponse = search_service.clone().root_search(search_request).await?; let elapsed = start_instant.elapsed(); - let mut search_response_rest: ElasticSearchResponse = + let mut search_response_rest: ElasticsearchResponse = convert_to_es_search_response(search_response, append_shard_doc); search_response_rest.took = elapsed.as_millis() as u32; - Ok::<_, ElasticSearchError>(search_response_rest) + Ok::<_, ElasticsearchError>(search_response_rest) } }); let max_concurrent_searches = @@ -474,7 +474,7 @@ async fn es_compat_index_multi_search( async fn es_scroll( scroll_query_params: ScrollQueryParams, search_service: Arc, -) -> Result { +) -> Result { let start_instant = Instant::now(); let Some(scroll_id) = scroll_query_params.scroll_id.clone() else { return Err(SearchError::InvalidArgument("missing scroll_id".to_string()).into()); @@ -492,7 +492,7 @@ async fn es_scroll( }; let search_response: SearchResponse = search_service.scroll(scroll_request).await?; // TODO append_shard_doc depends on the initial request, but we don't have access to it - let mut search_response_rest: ElasticSearchResponse = + let mut search_response_rest: ElasticsearchResponse = convert_to_es_search_response(search_response, false); search_response_rest.took = start_instant.elapsed().as_millis() as u32; Ok(search_response_rest) @@ -501,7 +501,7 @@ async fn es_scroll( fn convert_to_es_search_response( resp: SearchResponse, append_shard_doc: bool, -) -> ElasticSearchResponse { +) -> ElasticsearchResponse { let hits: Vec = resp .hits .into_iter() @@ -512,7 +512,7 @@ fn convert_to_es_search_response( } else { None }; - ElasticSearchResponse { + ElasticsearchResponse { timed_out: false, hits: HitsMetadata { total: Some(TotalHits {