From a9641dadffd9c0bcba9f8bb9fbe87ec5e8d69d9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois-Xavier=20Talbot?= <108630700+fetchfern@users.noreply.github.com> Date: Tue, 20 Jan 2026 14:06:37 -0500 Subject: [PATCH] Meilisearch task management, improved task o11y, timeout & batch size adjustments (#5158) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Better observability * Search management routes * Probably fluke * Use utoipa routes * Update apps/labrinth/src/routes/internal/search.rs Co-authored-by: aecsocket Signed-off-by: François-Xavier Talbot <108630700+fetchfern@users.noreply.github.com> * Update apps/labrinth/src/search/indexing/mod.rs Co-authored-by: aecsocket Signed-off-by: François-Xavier Talbot <108630700+fetchfern@users.noreply.github.com> * Update apps/labrinth/src/routes/internal/search.rs Co-authored-by: aecsocket Signed-off-by: François-Xavier Talbot <108630700+fetchfern@users.noreply.github.com> * Fix --------- Signed-off-by: François-Xavier Talbot <108630700+fetchfern@users.noreply.github.com> Co-authored-by: aecsocket --- apps/labrinth/src/routes/internal/mod.rs | 6 + apps/labrinth/src/routes/internal/search.rs | 121 ++++++++++++++++++ .../src/search/indexing/local_import.rs | 5 +- apps/labrinth/src/search/indexing/mod.rs | 96 +++++++++++--- 4 files changed, 208 insertions(+), 20 deletions(-) create mode 100644 apps/labrinth/src/routes/internal/search.rs diff --git a/apps/labrinth/src/routes/internal/mod.rs b/apps/labrinth/src/routes/internal/mod.rs index 08ca8fa2..13db9092 100644 --- a/apps/labrinth/src/routes/internal/mod.rs +++ b/apps/labrinth/src/routes/internal/mod.rs @@ -10,6 +10,7 @@ pub mod medal; pub mod moderation; pub mod mural; pub mod pats; +pub mod search; pub mod session; pub mod statuses; @@ -49,5 +50,10 @@ pub fn utoipa_config( utoipa_actix_web::scope("/_internal/affiliate") .wrap(default_cors()) .configure(affiliate::config), + ) + .service( + utoipa_actix_web::scope("/_internal/search-management") + .wrap(default_cors()) + .configure(search::config), ); } diff --git a/apps/labrinth/src/routes/internal/search.rs b/apps/labrinth/src/routes/internal/search.rs new file mode 100644 index 00000000..43bd21ec --- /dev/null +++ b/apps/labrinth/src/routes/internal/search.rs @@ -0,0 +1,121 @@ +use crate::routes::ApiError; +use crate::search::SearchConfig; +use crate::util::guards::admin_key_guard; +use actix_web::{HttpResponse, delete, get, web}; +use meilisearch_sdk::tasks::{Task, TasksCancelQuery}; +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; +use std::time::Duration; +use utoipa::ToSchema; + +pub fn config(cfg: &mut utoipa_actix_web::service_config::ServiceConfig) { + cfg.service(tasks).service(tasks_cancel); +} + +#[utoipa::path] +#[get("tasks", guard = "admin_key_guard")] +pub async fn tasks( + config: web::Data, +) -> Result { + let client = config.make_batch_client()?; + let tasks = client + .with_all_clients("get_tasks", async |client| { + let tasks = client.get_tasks().await?; + + Ok(tasks.results) + }) + .await?; + + #[derive(Serialize, ToSchema)] + struct MeiliTask