Fix most of the easy issues

This commit is contained in:
Clément Renault 2025-06-30 18:31:32 +02:00
parent 7219299436
commit 85037352b9
No known key found for this signature in database
GPG key ID: F250A4C4E3AE5F5F
6 changed files with 39 additions and 16 deletions

View file

@ -178,8 +178,8 @@ make_enum_progress! {
make_enum_progress! {
pub enum Export {
EnsuringCorrectnessOfTheTarget,
ExportTheSettings,
ExportTheDocuments,
ExporingTheSettings,
ExporingTheDocuments,
}
}

View file

@ -510,9 +510,9 @@ impl IndexScheduler {
// 3. we batch the export.
let to_export = self.queue.tasks.get_kind(rtxn, Kind::Export)? & enqueued;
if !to_export.is_empty() {
let mut tasks = self.queue.tasks.get_existing_tasks(rtxn, to_export)?;
current_batch.processing(&mut tasks);
let task = tasks.pop().expect("There must be only one export task");
let task_id = to_export.iter().next().expect("There must be only one export task");
let mut task = self.queue.tasks.get_task(rtxn, task_id)?.unwrap();
current_batch.processing([&mut task]);
current_batch.reason(BatchStopReason::TaskKindCannotBeBatched { kind: Kind::Export });
return Ok(Some((Batch::Export { task }, current_batch)));
}

View file

@ -86,10 +86,11 @@ impl IndexScheduler {
}
// Retry logic for sending settings
let url = format!("{base_url}/indexes/{uid}/settings");
let bearer = api_key.map(|api_key| format!("Bearer {api_key}"));
retry(&must_stop_processing, || {
let mut request = agent.patch(&url);
if let Some(api_key) = api_key {
request = request.set("Authorization", &format!("Bearer {api_key}"));
if let Some(bearer) = bearer.as_ref() {
request = request.set("Authorization", bearer);
}
request.send_json(settings.clone()).map_err(into_backoff_error)
})?;

View file

@ -273,7 +273,7 @@ pub fn swap_index_uid_in_task(task: &mut Task, swap: (&str, &str)) {
K::TaskCancelation { .. }
| K::TaskDeletion { .. }
| K::DumpCreation { .. }
| K::Export { .. } // TODO I have patterns, not index uids
| K::Export { .. }
| K::UpgradeDatabase { .. }
| K::SnapshotCreation => (),
};

View file

@ -371,7 +371,10 @@ impl From<Details> for DetailsView {
}
Details::Export { url, api_key, payload_size, indexes } => DetailsView {
url: Some(url),
api_key,
api_key: api_key.map(|mut api_key| {
hide_secret(&mut api_key);
api_key
}),
payload_size: payload_size
.map(|ps| ps.get_appropriate_unit(UnitType::Both).to_string()),
indexes: Some(
@ -390,3 +393,21 @@ impl From<Details> for DetailsView {
}
}
}
// We definitely need to factorize the code to hide the secret key
fn hide_secret(secret: &mut String) {
match secret.len() {
x if x < 10 => {
secret.replace_range(.., "XXX...");
}
x if x < 20 => {
secret.replace_range(2.., "XXXX...");
}
x if x < 30 => {
secret.replace_range(3.., "XXXXX...");
}
_x => {
secret.replace_range(5.., "XXXXXX...");
}
}
}

View file

@ -42,17 +42,18 @@ pub fn configure(cfg: &mut web::ServiceConfig) {
}
#[utoipa::path(
get,
post,
path = "",
tag = "Export",
security(("Bearer" = ["export", "*"])),
responses(
(status = OK, description = "Known nodes are returned", body = Export, content_type = "application/json", example = json!(
{
"indexes": ["movie", "steam-*"],
"skip_embeddings": true,
"apiKey": "meilisearch-api-key"
})),
{
"taskUid": 1,
"status": "enqueued",
"type": "export",
"enqueuedAt": "2021-08-11T09:25:53.000000Z"
})),
(status = 401, description = "The authorization header is missing", body = ResponseError, content_type = "application/json", example = json!(
{
"message": "The Authorization header is missing. It must use the bearer authorization method.",
@ -126,7 +127,7 @@ pub struct Export {
#[serde(default)]
#[deserr(default, error = DeserrJsonError<InvalidExportPayloadSize>)]
pub payload_size: Option<ByteWithDeserr>,
#[schema(value_type = Option<BTreeSet<String>>, example = json!(["movies", "steam-*"]))]
#[schema(value_type = Option<BTreeMap<String, ExportIndexSettings>>, example = json!({ "*": { "filter": null } }))]
#[deserr(default)]
#[serde(default)]
pub indexes: BTreeMap<IndexUidPattern, ExportIndexSettings>,