add the batch_id to the tasks

This commit is contained in:
Tamo 2024-11-13 11:27:12 +01:00
parent a5d7ae23bd
commit 87299ff34c
121 changed files with 531 additions and 150 deletions

View File

@ -1,6 +1,7 @@
#![allow(clippy::type_complexity)] #![allow(clippy::type_complexity)]
#![allow(clippy::wrong_self_convention)] #![allow(clippy::wrong_self_convention)]
use meilisearch_types::batches::BatchId;
use meilisearch_types::error::ResponseError; use meilisearch_types::error::ResponseError;
use meilisearch_types::keys::Key; use meilisearch_types::keys::Key;
use meilisearch_types::milli::update::IndexDocumentsMethod; use meilisearch_types::milli::update::IndexDocumentsMethod;
@ -57,6 +58,9 @@ pub enum Version {
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct TaskDump { pub struct TaskDump {
pub uid: TaskId, pub uid: TaskId,
// The batch ID were introduced in v1.12, everything prior to this version will be `None`.
#[serde(default)]
pub batch_uid: Option<BatchId>,
#[serde(default)] #[serde(default)]
pub index_uid: Option<String>, pub index_uid: Option<String>,
pub status: Status, pub status: Status,
@ -143,6 +147,7 @@ impl From<Task> for TaskDump {
fn from(task: Task) -> Self { fn from(task: Task) -> Self {
TaskDump { TaskDump {
uid: task.uid, uid: task.uid,
batch_uid: task.batch_uid,
index_uid: task.index_uid().map(|uid| uid.to_string()), index_uid: task.index_uid().map(|uid| uid.to_string()),
status: task.status, status: task.status,
kind: task.kind.into(), kind: task.kind.into(),
@ -297,6 +302,7 @@ pub(crate) mod test {
( (
TaskDump { TaskDump {
uid: 0, uid: 0,
batch_uid: Some(0),
index_uid: Some(S("doggo")), index_uid: Some(S("doggo")),
status: Status::Succeeded, status: Status::Succeeded,
kind: KindDump::DocumentImport { kind: KindDump::DocumentImport {
@ -320,6 +326,7 @@ pub(crate) mod test {
( (
TaskDump { TaskDump {
uid: 1, uid: 1,
batch_uid: None,
index_uid: Some(S("doggo")), index_uid: Some(S("doggo")),
status: Status::Enqueued, status: Status::Enqueued,
kind: KindDump::DocumentImport { kind: KindDump::DocumentImport {
@ -346,6 +353,7 @@ pub(crate) mod test {
( (
TaskDump { TaskDump {
uid: 5, uid: 5,
batch_uid: None,
index_uid: Some(S("catto")), index_uid: Some(S("catto")),
status: Status::Enqueued, status: Status::Enqueued,
kind: KindDump::IndexDeletion, kind: KindDump::IndexDeletion,

View File

@ -70,6 +70,7 @@ impl CompatV5ToV6 {
let task = v6::Task { let task = v6::Task {
uid: task_view.uid, uid: task_view.uid,
batch_uid: None,
index_uid: task_view.index_uid, index_uid: task_view.index_uid,
status: match task_view.status { status: match task_view.status {
v5::Status::Enqueued => v6::Status::Enqueued, v5::Status::Enqueued => v6::Status::Enqueued,

View File

@ -24,6 +24,7 @@ use std::fs::{self, File};
use std::io::BufWriter; use std::io::BufWriter;
use dump::IndexMetadata; use dump::IndexMetadata;
use meilisearch_types::batches::BatchId;
use meilisearch_types::error::Code; use meilisearch_types::error::Code;
use meilisearch_types::heed::{RoTxn, RwTxn}; use meilisearch_types::heed::{RoTxn, RwTxn};
use meilisearch_types::milli::documents::{obkv_to_object, DocumentsBatchReader}; use meilisearch_types::milli::documents::{obkv_to_object, DocumentsBatchReader};
@ -279,18 +280,22 @@ impl IndexScheduler {
rtxn: &RoTxn, rtxn: &RoTxn,
index_uid: String, index_uid: String,
batch: BatchKind, batch: BatchKind,
batch_id: BatchId,
must_create_index: bool, must_create_index: bool,
) -> Result<Option<Batch>> { ) -> Result<Option<Batch>> {
match batch { match batch {
BatchKind::DocumentClear { ids } => Ok(Some(Batch::IndexOperation { BatchKind::DocumentClear { ids } => Ok(Some(Batch::IndexOperation {
op: IndexOperation::DocumentClear { op: IndexOperation::DocumentClear {
tasks: self.get_existing_tasks(rtxn, ids)?, tasks: self.get_existing_tasks_with_batch_id(rtxn, batch_id, ids)?,
index_uid, index_uid,
}, },
must_create_index, must_create_index,
})), })),
BatchKind::DocumentEdition { id } => { BatchKind::DocumentEdition { id } => {
let task = self.get_task(rtxn, id)?.ok_or(Error::CorruptedTaskQueue)?; let task = self
.get_task(rtxn, id)?
.ok_or(Error::CorruptedTaskQueue)?
.with_batch_id(batch_id);
match &task.kind { match &task.kind {
KindWithContent::DocumentEdition { index_uid, .. } => { KindWithContent::DocumentEdition { index_uid, .. } => {
Ok(Some(Batch::IndexOperation { Ok(Some(Batch::IndexOperation {
@ -305,7 +310,7 @@ impl IndexScheduler {
} }
} }
BatchKind::DocumentOperation { method, operation_ids, .. } => { BatchKind::DocumentOperation { method, operation_ids, .. } => {
let tasks = self.get_existing_tasks(rtxn, operation_ids)?; let tasks = self.get_existing_tasks_with_batch_id(rtxn, batch_id, operation_ids)?;
let primary_key = tasks let primary_key = tasks
.iter() .iter()
.find_map(|task| match task.kind { .find_map(|task| match task.kind {
@ -352,7 +357,7 @@ impl IndexScheduler {
})) }))
} }
BatchKind::DocumentDeletion { deletion_ids, includes_by_filter: _ } => { BatchKind::DocumentDeletion { deletion_ids, includes_by_filter: _ } => {
let tasks = self.get_existing_tasks(rtxn, deletion_ids)?; let tasks = self.get_existing_tasks_with_batch_id(rtxn, batch_id, deletion_ids)?;
Ok(Some(Batch::IndexOperation { Ok(Some(Batch::IndexOperation {
op: IndexOperation::DocumentDeletion { index_uid, tasks }, op: IndexOperation::DocumentDeletion { index_uid, tasks },
@ -360,7 +365,7 @@ impl IndexScheduler {
})) }))
} }
BatchKind::Settings { settings_ids, .. } => { BatchKind::Settings { settings_ids, .. } => {
let tasks = self.get_existing_tasks(rtxn, settings_ids)?; let tasks = self.get_existing_tasks_with_batch_id(rtxn, batch_id, settings_ids)?;
let mut settings = Vec::new(); let mut settings = Vec::new();
for task in &tasks { for task in &tasks {
@ -383,6 +388,7 @@ impl IndexScheduler {
rtxn, rtxn,
index_uid, index_uid,
BatchKind::Settings { settings_ids, allow_index_creation }, BatchKind::Settings { settings_ids, allow_index_creation },
batch_id,
must_create_index, must_create_index,
)? )?
.unwrap() .unwrap()
@ -398,6 +404,7 @@ impl IndexScheduler {
rtxn, rtxn,
index_uid, index_uid,
BatchKind::DocumentClear { ids: other }, BatchKind::DocumentClear { ids: other },
batch_id,
must_create_index, must_create_index,
)? )?
.unwrap() .unwrap()
@ -430,6 +437,7 @@ impl IndexScheduler {
rtxn, rtxn,
index_uid.clone(), index_uid.clone(),
BatchKind::Settings { settings_ids, allow_index_creation }, BatchKind::Settings { settings_ids, allow_index_creation },
batch_id,
must_create_index, must_create_index,
)?; )?;
@ -442,6 +450,7 @@ impl IndexScheduler {
primary_key, primary_key,
operation_ids, operation_ids,
}, },
batch_id,
must_create_index, must_create_index,
)?; )?;
@ -479,7 +488,10 @@ impl IndexScheduler {
} }
} }
BatchKind::IndexCreation { id } => { BatchKind::IndexCreation { id } => {
let task = self.get_task(rtxn, id)?.ok_or(Error::CorruptedTaskQueue)?; let task = self
.get_task(rtxn, id)?
.ok_or(Error::CorruptedTaskQueue)?
.with_batch_id(batch_id);
let (index_uid, primary_key) = match &task.kind { let (index_uid, primary_key) = match &task.kind {
KindWithContent::IndexCreation { index_uid, primary_key } => { KindWithContent::IndexCreation { index_uid, primary_key } => {
(index_uid.clone(), primary_key.clone()) (index_uid.clone(), primary_key.clone())
@ -489,7 +501,10 @@ impl IndexScheduler {
Ok(Some(Batch::IndexCreation { index_uid, primary_key, task })) Ok(Some(Batch::IndexCreation { index_uid, primary_key, task }))
} }
BatchKind::IndexUpdate { id } => { BatchKind::IndexUpdate { id } => {
let task = self.get_task(rtxn, id)?.ok_or(Error::CorruptedTaskQueue)?; let task = self
.get_task(rtxn, id)?
.ok_or(Error::CorruptedTaskQueue)?
.with_batch_id(batch_id);
let primary_key = match &task.kind { let primary_key = match &task.kind {
KindWithContent::IndexUpdate { primary_key, .. } => primary_key.clone(), KindWithContent::IndexUpdate { primary_key, .. } => primary_key.clone(),
_ => unreachable!(), _ => unreachable!(),
@ -499,10 +514,13 @@ impl IndexScheduler {
BatchKind::IndexDeletion { ids } => Ok(Some(Batch::IndexDeletion { BatchKind::IndexDeletion { ids } => Ok(Some(Batch::IndexDeletion {
index_uid, index_uid,
index_has_been_created: must_create_index, index_has_been_created: must_create_index,
tasks: self.get_existing_tasks(rtxn, ids)?, tasks: self.get_existing_tasks_with_batch_id(rtxn, batch_id, ids)?,
})), })),
BatchKind::IndexSwap { id } => { BatchKind::IndexSwap { id } => {
let task = self.get_task(rtxn, id)?.ok_or(Error::CorruptedTaskQueue)?; let task = self
.get_task(rtxn, id)?
.ok_or(Error::CorruptedTaskQueue)?
.with_batch_id(batch_id);
Ok(Some(Batch::IndexSwap { task })) Ok(Some(Batch::IndexSwap { task }))
} }
} }
@ -515,10 +533,11 @@ impl IndexScheduler {
/// 4. We get the *next* dump to process. /// 4. We get the *next* dump to process.
/// 5. We get the *next* tasks to process for a specific index. /// 5. We get the *next* tasks to process for a specific index.
#[tracing::instrument(level = "trace", skip(self, rtxn), target = "indexing::scheduler")] #[tracing::instrument(level = "trace", skip(self, rtxn), target = "indexing::scheduler")]
pub(crate) fn create_next_batch(&self, rtxn: &RoTxn) -> Result<Option<Batch>> { pub(crate) fn create_next_batch(&self, rtxn: &RoTxn) -> Result<Option<(Batch, BatchId)>> {
#[cfg(test)] #[cfg(test)]
self.maybe_fail(crate::tests::FailureLocation::InsideCreateBatch)?; self.maybe_fail(crate::tests::FailureLocation::InsideCreateBatch)?;
let batch_id = self.next_batch_id(rtxn)?;
let enqueued = &self.get_status(rtxn, Status::Enqueued)?; let enqueued = &self.get_status(rtxn, Status::Enqueued)?;
let to_cancel = self.get_kind(rtxn, Kind::TaskCancelation)? & enqueued; let to_cancel = self.get_kind(rtxn, Kind::TaskCancelation)? & enqueued;
@ -526,39 +545,65 @@ impl IndexScheduler {
if let Some(task_id) = to_cancel.max() { if let Some(task_id) = to_cancel.max() {
// We retrieve the tasks that were processing before this tasks cancelation started. // We retrieve the tasks that were processing before this tasks cancelation started.
// We must *not* reset the processing tasks before calling this method. // We must *not* reset the processing tasks before calling this method.
let ProcessingTasks { started_at, processing } = // Displaying the `batch_id` would make a strange error message since this task cancelation is going to
// replace the canceled batch. It's better to avoid mentioning it in the error message.
let ProcessingTasks { started_at, batch_id: _, processing } =
&*self.processing_tasks.read().unwrap(); &*self.processing_tasks.read().unwrap();
return Ok(Some(Batch::TaskCancelation { return Ok(Some((
task: self.get_task(rtxn, task_id)?.ok_or(Error::CorruptedTaskQueue)?, Batch::TaskCancelation {
task: self
.get_task(rtxn, task_id)?
.ok_or(Error::CorruptedTaskQueue)?
.with_batch_id(batch_id),
previous_started_at: *started_at, previous_started_at: *started_at,
previous_processing_tasks: processing.clone(), previous_processing_tasks: processing.clone(),
})); },
batch_id,
)));
} }
// 2. we get the next task to delete // 2. we get the next task to delete
let to_delete = self.get_kind(rtxn, Kind::TaskDeletion)? & enqueued; let to_delete = self.get_kind(rtxn, Kind::TaskDeletion)? & enqueued;
if !to_delete.is_empty() { if !to_delete.is_empty() {
let tasks = self.get_existing_tasks(rtxn, to_delete)?; let tasks = self
return Ok(Some(Batch::TaskDeletions(tasks))); .get_existing_tasks(rtxn, to_delete)?
.into_iter()
.map(|task| task.with_batch_id(batch_id))
.collect();
return Ok(Some((Batch::TaskDeletions(tasks), batch_id)));
} }
// 3. we batch the snapshot. // 3. we batch the snapshot.
let to_snapshot = self.get_kind(rtxn, Kind::SnapshotCreation)? & enqueued; let to_snapshot = self.get_kind(rtxn, Kind::SnapshotCreation)? & enqueued;
if !to_snapshot.is_empty() { if !to_snapshot.is_empty() {
return Ok(Some(Batch::SnapshotCreation(self.get_existing_tasks(rtxn, to_snapshot)?))); return Ok(Some((
Batch::SnapshotCreation(
self.get_existing_tasks(rtxn, to_snapshot)?
.into_iter()
.map(|task| task.with_batch_id(batch_id))
.collect(),
),
batch_id,
)));
} }
// 4. we batch the dumps. // 4. we batch the dumps.
let to_dump = self.get_kind(rtxn, Kind::DumpCreation)? & enqueued; let to_dump = self.get_kind(rtxn, Kind::DumpCreation)? & enqueued;
if let Some(to_dump) = to_dump.min() { if let Some(to_dump) = to_dump.min() {
return Ok(Some(Batch::Dump( return Ok(Some((
self.get_task(rtxn, to_dump)?.ok_or(Error::CorruptedTaskQueue)?, Batch::Dump(
self.get_task(rtxn, to_dump)?
.ok_or(Error::CorruptedTaskQueue)?
.with_batch_id(batch_id),
),
batch_id,
))); )));
} }
// 5. We make a batch from the unprioritised tasks. Start by taking the next enqueued task. // 5. We make a batch from the unprioritised tasks. Start by taking the next enqueued task.
let task_id = if let Some(task_id) = enqueued.min() { task_id } else { return Ok(None) }; let task_id = if let Some(task_id) = enqueued.min() { task_id } else { return Ok(None) };
let task = self.get_task(rtxn, task_id)?.ok_or(Error::CorruptedTaskQueue)?; let task =
self.get_task(rtxn, task_id)?.ok_or(Error::CorruptedTaskQueue)?.with_batch_id(batch_id);
// If the task is not associated with any index, verify that it is an index swap and // If the task is not associated with any index, verify that it is an index swap and
// create the batch directly. Otherwise, get the index name associated with the task // create the batch directly. Otherwise, get the index name associated with the task
@ -568,7 +613,7 @@ impl IndexScheduler {
index_name index_name
} else { } else {
assert!(matches!(&task.kind, KindWithContent::IndexSwap { swaps } if swaps.is_empty())); assert!(matches!(&task.kind, KindWithContent::IndexSwap { swaps } if swaps.is_empty()));
return Ok(Some(Batch::IndexSwap { task })); return Ok(Some((Batch::IndexSwap { task }, batch_id)));
}; };
let index_already_exists = self.index_mapper.exists(rtxn, index_name)?; let index_already_exists = self.index_mapper.exists(rtxn, index_name)?;
@ -599,12 +644,15 @@ impl IndexScheduler {
if let Some((batchkind, create_index)) = if let Some((batchkind, create_index)) =
autobatcher::autobatch(enqueued, index_already_exists, primary_key.as_deref()) autobatcher::autobatch(enqueued, index_already_exists, primary_key.as_deref())
{ {
return self.create_next_batch_index( return Ok(self
.create_next_batch_index(
rtxn, rtxn,
index_name.to_string(), index_name.to_string(),
batchkind, batchkind,
batch_id,
create_index, create_index,
); )?
.map(|batch| (batch, batch_id)));
} }
// If we found no tasks then we were notified for something that got autobatched // If we found no tasks then we were notified for something that got autobatched

View File

@ -24,6 +24,7 @@ pub fn snapshot_index_scheduler(scheduler: &IndexScheduler) -> String {
file_store, file_store,
env, env,
all_tasks, all_tasks,
all_batches,
status, status,
kind, kind,
index_tasks, index_tasks,
@ -145,6 +146,7 @@ pub fn snapshot_task(task: &Task) -> String {
let mut snap = String::new(); let mut snap = String::new();
let Task { let Task {
uid, uid,
batch_uid,
enqueued_at: _, enqueued_at: _,
started_at: _, started_at: _,
finished_at: _, finished_at: _,
@ -156,6 +158,9 @@ pub fn snapshot_task(task: &Task) -> String {
} = task; } = task;
snap.push('{'); snap.push('{');
snap.push_str(&format!("uid: {uid}, ")); snap.push_str(&format!("uid: {uid}, "));
if let Some(batch_uid) = batch_uid {
snap.push_str(&format!("batch_uid: {batch_uid}, "));
}
snap.push_str(&format!("status: {status}, ")); snap.push_str(&format!("status: {status}, "));
if let Some(canceled_by) = canceled_by { if let Some(canceled_by) = canceled_by {
snap.push_str(&format!("canceled_by: {canceled_by}, ")); snap.push_str(&format!("canceled_by: {canceled_by}, "));

View File

@ -48,6 +48,7 @@ pub use features::RoFeatures;
use file_store::FileStore; use file_store::FileStore;
use flate2::bufread::GzEncoder; use flate2::bufread::GzEncoder;
use flate2::Compression; use flate2::Compression;
use meilisearch_types::batches::{Batch, BatchId};
use meilisearch_types::error::ResponseError; use meilisearch_types::error::ResponseError;
use meilisearch_types::features::{InstanceTogglableFeatures, RuntimeTogglableFeatures}; use meilisearch_types::features::{InstanceTogglableFeatures, RuntimeTogglableFeatures};
use meilisearch_types::heed::byteorder::BE; use meilisearch_types::heed::byteorder::BE;
@ -159,6 +160,8 @@ impl Query {
struct ProcessingTasks { struct ProcessingTasks {
/// The date and time at which the indexation started. /// The date and time at which the indexation started.
started_at: OffsetDateTime, started_at: OffsetDateTime,
/// The id of the batch processing
batch_id: Option<BatchId>,
/// The list of tasks ids that are currently running. /// The list of tasks ids that are currently running.
processing: RoaringBitmap, processing: RoaringBitmap,
} }
@ -166,17 +169,28 @@ struct ProcessingTasks {
impl ProcessingTasks { impl ProcessingTasks {
/// Creates an empty `ProcessingAt` struct. /// Creates an empty `ProcessingAt` struct.
fn new() -> ProcessingTasks { fn new() -> ProcessingTasks {
ProcessingTasks { started_at: OffsetDateTime::now_utc(), processing: RoaringBitmap::new() } ProcessingTasks {
started_at: OffsetDateTime::now_utc(),
batch_id: None,
processing: RoaringBitmap::new(),
}
} }
/// Stores the currently processing tasks, and the date time at which it started. /// Stores the currently processing tasks, and the date time at which it started.
fn start_processing_at(&mut self, started_at: OffsetDateTime, processing: RoaringBitmap) { fn start_processing(
&mut self,
started_at: OffsetDateTime,
batch_id: BatchId,
processing: RoaringBitmap,
) {
self.started_at = started_at; self.started_at = started_at;
self.batch_id = Some(batch_id);
self.processing = processing; self.processing = processing;
} }
/// Set the processing tasks to an empty list /// Set the processing tasks to an empty list
fn stop_processing(&mut self) -> RoaringBitmap { fn stop_processing(&mut self) -> RoaringBitmap {
self.batch_id = None;
std::mem::take(&mut self.processing) std::mem::take(&mut self.processing)
} }
@ -206,6 +220,7 @@ impl MustStopProcessing {
/// Database const names for the `IndexScheduler`. /// Database const names for the `IndexScheduler`.
mod db_name { mod db_name {
pub const ALL_TASKS: &str = "all-tasks"; pub const ALL_TASKS: &str = "all-tasks";
pub const ALL_BATCHES: &str = "all-batches";
pub const STATUS: &str = "status"; pub const STATUS: &str = "status";
pub const KIND: &str = "kind"; pub const KIND: &str = "kind";
pub const INDEX_TASKS: &str = "index-tasks"; pub const INDEX_TASKS: &str = "index-tasks";
@ -297,6 +312,9 @@ pub struct IndexScheduler {
// The main database, it contains all the tasks accessible by their Id. // The main database, it contains all the tasks accessible by their Id.
pub(crate) all_tasks: Database<BEU32, SerdeJson<Task>>, pub(crate) all_tasks: Database<BEU32, SerdeJson<Task>>,
// Contains all the batches accessible by their Id.
pub(crate) all_batches: Database<BEU32, SerdeJson<Batch>>,
/// All the tasks ids grouped by their status. /// All the tasks ids grouped by their status.
// TODO we should not be able to serialize a `Status::Processing` in this database. // TODO we should not be able to serialize a `Status::Processing` in this database.
pub(crate) status: Database<SerdeBincode<Status>, RoaringBitmapCodec>, pub(crate) status: Database<SerdeBincode<Status>, RoaringBitmapCodec>,
@ -385,6 +403,7 @@ impl IndexScheduler {
processing_tasks: self.processing_tasks.clone(), processing_tasks: self.processing_tasks.clone(),
file_store: self.file_store.clone(), file_store: self.file_store.clone(),
all_tasks: self.all_tasks, all_tasks: self.all_tasks,
all_batches: self.all_batches,
status: self.status, status: self.status,
kind: self.kind, kind: self.kind,
index_tasks: self.index_tasks, index_tasks: self.index_tasks,
@ -451,7 +470,7 @@ impl IndexScheduler {
let env = unsafe { let env = unsafe {
heed::EnvOpenOptions::new() heed::EnvOpenOptions::new()
.max_dbs(11) .max_dbs(12)
.map_size(budget.task_db_size) .map_size(budget.task_db_size)
.open(options.tasks_path) .open(options.tasks_path)
}?; }?;
@ -462,6 +481,7 @@ impl IndexScheduler {
let mut wtxn = env.write_txn()?; let mut wtxn = env.write_txn()?;
let all_tasks = env.create_database(&mut wtxn, Some(db_name::ALL_TASKS))?; let all_tasks = env.create_database(&mut wtxn, Some(db_name::ALL_TASKS))?;
let all_batches = env.create_database(&mut wtxn, Some(db_name::ALL_BATCHES))?;
let status = env.create_database(&mut wtxn, Some(db_name::STATUS))?; let status = env.create_database(&mut wtxn, Some(db_name::STATUS))?;
let kind = env.create_database(&mut wtxn, Some(db_name::KIND))?; let kind = env.create_database(&mut wtxn, Some(db_name::KIND))?;
let index_tasks = env.create_database(&mut wtxn, Some(db_name::INDEX_TASKS))?; let index_tasks = env.create_database(&mut wtxn, Some(db_name::INDEX_TASKS))?;
@ -477,6 +497,7 @@ impl IndexScheduler {
processing_tasks: Arc::new(RwLock::new(ProcessingTasks::new())), processing_tasks: Arc::new(RwLock::new(ProcessingTasks::new())),
file_store, file_store,
all_tasks, all_tasks,
all_batches,
status, status,
kind, kind,
index_tasks, index_tasks,
@ -956,7 +977,7 @@ impl IndexScheduler {
tasks.into_iter().rev().take(query.limit.unwrap_or(u32::MAX) as usize), tasks.into_iter().rev().take(query.limit.unwrap_or(u32::MAX) as usize),
)?; )?;
let ProcessingTasks { started_at, processing, .. } = let ProcessingTasks { started_at, batch_id, processing } =
self.processing_tasks.read().map_err(|_| Error::CorruptedTaskQueue)?.clone(); self.processing_tasks.read().map_err(|_| Error::CorruptedTaskQueue)?.clone();
let ret = tasks.into_iter(); let ret = tasks.into_iter();
@ -966,7 +987,12 @@ impl IndexScheduler {
Ok(( Ok((
ret.map(|task| { ret.map(|task| {
if processing.contains(task.uid) { if processing.contains(task.uid) {
Task { status: Status::Processing, started_at: Some(started_at), ..task } Task {
status: Status::Processing,
batch_uid: batch_id,
started_at: Some(started_at),
..task
}
} else { } else {
task task
} }
@ -1005,6 +1031,8 @@ impl IndexScheduler {
let mut task = Task { let mut task = Task {
uid: task_id.unwrap_or(next_task_id), uid: task_id.unwrap_or(next_task_id),
// The batch is defined once we starts processing the task
batch_uid: None,
enqueued_at: OffsetDateTime::now_utc(), enqueued_at: OffsetDateTime::now_utc(),
started_at: None, started_at: None,
finished_at: None, finished_at: None,
@ -1140,7 +1168,7 @@ impl IndexScheduler {
} }
let rtxn = self.env.read_txn().map_err(Error::HeedTransaction)?; let rtxn = self.env.read_txn().map_err(Error::HeedTransaction)?;
let batch = let (batch, batch_id) =
match self.create_next_batch(&rtxn).map_err(|e| Error::CreateBatch(Box::new(e)))? { match self.create_next_batch(&rtxn).map_err(|e| Error::CreateBatch(Box::new(e)))? {
Some(batch) => batch, Some(batch) => batch,
None => return Ok(TickOutcome::WaitForSignal), None => return Ok(TickOutcome::WaitForSignal),
@ -1155,7 +1183,7 @@ impl IndexScheduler {
// We reset the must_stop flag to be sure that we don't stop processing tasks // We reset the must_stop flag to be sure that we don't stop processing tasks
self.must_stop_processing.reset(); self.must_stop_processing.reset();
self.processing_tasks.write().unwrap().start_processing_at(started_at, ids.clone()); self.processing_tasks.write().unwrap().start_processing(started_at, batch_id, ids.clone());
#[cfg(test)] #[cfg(test)]
self.breakpoint(Breakpoint::BatchCreated); self.breakpoint(Breakpoint::BatchCreated);
@ -1253,7 +1281,8 @@ impl IndexScheduler {
let mut task = self let mut task = self
.get_task(&wtxn, id) .get_task(&wtxn, id)
.map_err(|e| Error::TaskDatabaseUpdate(Box::new(e)))? .map_err(|e| Error::TaskDatabaseUpdate(Box::new(e)))?
.ok_or(Error::CorruptedTaskQueue)?; .ok_or(Error::CorruptedTaskQueue)?
.with_batch_id(batch_id);
task.started_at = Some(started_at); task.started_at = Some(started_at);
task.finished_at = Some(finished_at); task.finished_at = Some(finished_at);
task.status = Status::Failed; task.status = Status::Failed;
@ -1271,6 +1300,12 @@ impl IndexScheduler {
} }
} }
self.all_batches.put(
&mut wtxn,
&batch_id,
&Batch { uid: batch_id, started_at, finished_at: Some(finished_at) },
)?;
let processed = self.processing_tasks.write().unwrap().stop_processing(); let processed = self.processing_tasks.write().unwrap().stop_processing();
#[cfg(test)] #[cfg(test)]
@ -1585,6 +1620,7 @@ impl<'a> Dump<'a> {
let task = Task { let task = Task {
uid: task.uid, uid: task.uid,
batch_uid: task.batch_uid,
enqueued_at: task.enqueued_at, enqueued_at: task.enqueued_at,
started_at: task.started_at, started_at: task.started_at,
finished_at: task.finished_at, finished_at: task.finished_at,

View File

@ -3,6 +3,7 @@
use std::collections::{BTreeSet, HashSet}; use std::collections::{BTreeSet, HashSet};
use std::ops::Bound; use std::ops::Bound;
use meilisearch_types::batches::BatchId;
use meilisearch_types::heed::types::DecodeIgnore; use meilisearch_types::heed::types::DecodeIgnore;
use meilisearch_types::heed::{Database, RoTxn, RwTxn}; use meilisearch_types::heed::{Database, RoTxn, RwTxn};
use meilisearch_types::milli::CboRoaringBitmapCodec; use meilisearch_types::milli::CboRoaringBitmapCodec;
@ -25,10 +26,37 @@ impl IndexScheduler {
Ok(self.last_task_id(rtxn)?.unwrap_or_default()) Ok(self.last_task_id(rtxn)?.unwrap_or_default())
} }
pub(crate) fn next_batch_id(&self, rtxn: &RoTxn) -> Result<BatchId> {
Ok(self
.all_batches
.remap_data_type::<DecodeIgnore>()
.last(rtxn)?
.map(|(k, _)| k + 1)
.unwrap_or_default())
}
pub(crate) fn get_task(&self, rtxn: &RoTxn, task_id: TaskId) -> Result<Option<Task>> { pub(crate) fn get_task(&self, rtxn: &RoTxn, task_id: TaskId) -> Result<Option<Task>> {
Ok(self.all_tasks.get(rtxn, &task_id)?) Ok(self.all_tasks.get(rtxn, &task_id)?)
} }
/// Convert an iterator to a `Vec` of tasks. The tasks MUST exist or a
/// `CorruptedTaskQueue` error will be throwed.
pub(crate) fn get_existing_tasks_with_batch_id(
&self,
rtxn: &RoTxn,
batch_id: BatchId,
tasks: impl IntoIterator<Item = TaskId>,
) -> Result<Vec<Task>> {
tasks
.into_iter()
.map(|task_id| {
self.get_task(rtxn, task_id)
.and_then(|task| task.ok_or(Error::CorruptedTaskQueue))
.map(|task| task.with_batch_id(batch_id))
})
.collect::<Result<_>>()
}
/// Convert an iterator to a `Vec` of tasks. The tasks MUST exist or a /// Convert an iterator to a `Vec` of tasks. The tasks MUST exist or a
/// `CorruptedTaskQueue` error will be throwed. /// `CorruptedTaskQueue` error will be throwed.
pub(crate) fn get_existing_tasks( pub(crate) fn get_existing_tasks(
@ -342,6 +370,8 @@ impl IndexScheduler {
let Task { let Task {
uid, uid,
/// We should iterate over the list of batch to ensure this task is effectively in the right batch
batch_uid,
enqueued_at, enqueued_at,
started_at, started_at,
finished_at, finished_at,

View File

@ -0,0 +1,18 @@
use serde::{Deserialize, Serialize};
use time::OffsetDateTime;
pub type BatchId = u32;
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Batch {
pub uid: BatchId,
#[serde(with = "time::serde::rfc3339")]
pub started_at: OffsetDateTime,
#[serde(with = "time::serde::rfc3339::option")]
pub finished_at: Option<OffsetDateTime>,
// pub details: Option<Details>,
// pub status: Status,
}

View File

@ -1,3 +1,4 @@
pub mod batches;
pub mod compression; pub mod compression;
pub mod deserr; pub mod deserr;
pub mod document_formats; pub mod document_formats;

View File

@ -2,6 +2,7 @@ use milli::Object;
use serde::Serialize; use serde::Serialize;
use time::{Duration, OffsetDateTime}; use time::{Duration, OffsetDateTime};
use crate::batches::BatchId;
use crate::error::ResponseError; use crate::error::ResponseError;
use crate::settings::{Settings, Unchecked}; use crate::settings::{Settings, Unchecked};
use crate::tasks::{serialize_duration, Details, IndexSwap, Kind, Status, Task, TaskId}; use crate::tasks::{serialize_duration, Details, IndexSwap, Kind, Status, Task, TaskId};
@ -10,6 +11,7 @@ use crate::tasks::{serialize_duration, Details, IndexSwap, Kind, Status, Task, T
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct TaskView { pub struct TaskView {
pub uid: TaskId, pub uid: TaskId,
pub batch_uid: Option<BatchId>,
#[serde(default)] #[serde(default)]
pub index_uid: Option<String>, pub index_uid: Option<String>,
pub status: Status, pub status: Status,
@ -33,6 +35,7 @@ impl TaskView {
pub fn from_task(task: &Task) -> TaskView { pub fn from_task(task: &Task) -> TaskView {
TaskView { TaskView {
uid: task.uid, uid: task.uid,
batch_uid: task.batch_uid,
index_uid: task.index_uid().map(ToOwned::to_owned), index_uid: task.index_uid().map(ToOwned::to_owned),
status: task.status, status: task.status,
kind: task.kind.as_kind(), kind: task.kind.as_kind(),

View File

@ -11,6 +11,7 @@ use serde::{Deserialize, Serialize, Serializer};
use time::{Duration, OffsetDateTime}; use time::{Duration, OffsetDateTime};
use uuid::Uuid; use uuid::Uuid;
use crate::batches::BatchId;
use crate::error::ResponseError; use crate::error::ResponseError;
use crate::keys::Key; use crate::keys::Key;
use crate::settings::{Settings, Unchecked}; use crate::settings::{Settings, Unchecked};
@ -22,6 +23,7 @@ pub type TaskId = u32;
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct Task { pub struct Task {
pub uid: TaskId, pub uid: TaskId,
pub batch_uid: Option<BatchId>,
#[serde(with = "time::serde::rfc3339")] #[serde(with = "time::serde::rfc3339")]
pub enqueued_at: OffsetDateTime, pub enqueued_at: OffsetDateTime,
@ -60,6 +62,11 @@ impl Task {
} }
} }
pub fn with_batch_id(mut self, batch_id: TaskId) -> Self {
self.batch_uid = Some(batch_id);
self
}
/// Return the list of indexes updated by this tasks. /// Return the list of indexes updated by this tasks.
pub fn indexes(&self) -> Vec<&str> { pub fn indexes(&self) -> Vec<&str> {
self.kind.indexes() self.kind.indexes()

View File

@ -99,6 +99,7 @@ impl Display for Value {
"{}", "{}",
json_string!(self, { json_string!(self, {
".uid" => "[uid]", ".uid" => "[uid]",
".batchUid" => "[batch_uid]",
".enqueuedAt" => "[date]", ".enqueuedAt" => "[date]",
".startedAt" => "[date]", ".startedAt" => "[date]",
".finishedAt" => "[date]", ".finishedAt" => "[date]",

View File

@ -293,6 +293,7 @@ async fn add_csv_document() {
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###" snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{ {
"uid": 0, "uid": 0,
"batchUid": 0,
"indexUid": "pets", "indexUid": "pets",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -357,6 +358,7 @@ async fn add_csv_document_with_types() {
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###" snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{ {
"uid": 0, "uid": 0,
"batchUid": 0,
"indexUid": "pets", "indexUid": "pets",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -432,6 +434,7 @@ async fn add_csv_document_with_custom_delimiter() {
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###" snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{ {
"uid": 0, "uid": 0,
"batchUid": 0,
"indexUid": "pets", "indexUid": "pets",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -985,6 +988,7 @@ async fn add_documents_no_index_creation() {
@r###" @r###"
{ {
"uid": 0, "uid": 0,
"batchUid": 0,
"indexUid": "test", "indexUid": "test",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1063,6 +1067,7 @@ async fn document_addition_with_primary_key() {
@r###" @r###"
{ {
"uid": 0, "uid": 0,
"batchUid": 0,
"indexUid": "test", "indexUid": "test",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1111,6 +1116,7 @@ async fn document_addition_with_huge_int_primary_key() {
@r###" @r###"
{ {
"uid": "[uid]", "uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "test", "indexUid": "test",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1183,6 +1189,7 @@ async fn replace_document() {
@r###" @r###"
{ {
"uid": 1, "uid": 1,
"batchUid": 1,
"indexUid": "test", "indexUid": "test",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1271,6 +1278,7 @@ async fn error_add_documents_bad_document_id() {
@r###" @r###"
{ {
"uid": 1, "uid": 1,
"batchUid": 1,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1312,6 +1320,7 @@ async fn error_add_documents_missing_document_id() {
@r###" @r###"
{ {
"uid": 1, "uid": 1,
"batchUid": 1,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1403,6 +1412,7 @@ async fn error_document_field_limit_reached_over_multiple_documents() {
@r###" @r###"
{ {
"uid": "[uid]", "uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "test", "indexUid": "test",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1437,6 +1447,7 @@ async fn error_document_field_limit_reached_over_multiple_documents() {
@r###" @r###"
{ {
"uid": "[uid]", "uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1486,6 +1497,7 @@ async fn error_document_field_limit_reached_in_one_nested_document() {
@r###" @r###"
{ {
"uid": "[uid]", "uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "test", "indexUid": "test",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1529,6 +1541,7 @@ async fn error_document_field_limit_reached_over_multiple_documents_with_nested_
@r###" @r###"
{ {
"uid": "[uid]", "uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "test", "indexUid": "test",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1564,6 +1577,7 @@ async fn error_document_field_limit_reached_over_multiple_documents_with_nested_
@r###" @r###"
{ {
"uid": "[uid]", "uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "test", "indexUid": "test",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1611,6 +1625,7 @@ async fn add_documents_with_geo_field() {
@r###" @r###"
{ {
"uid": 1, "uid": 1,
"batchUid": 1,
"indexUid": "doggo", "indexUid": "doggo",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1651,6 +1666,7 @@ async fn add_documents_invalid_geo_field() {
@r###" @r###"
{ {
"uid": 2, "uid": 2,
"batchUid": 2,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1688,6 +1704,7 @@ async fn add_documents_invalid_geo_field() {
@r###" @r###"
{ {
"uid": 3, "uid": 3,
"batchUid": 3,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1725,6 +1742,7 @@ async fn add_documents_invalid_geo_field() {
@r###" @r###"
{ {
"uid": 4, "uid": 4,
"batchUid": 4,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1762,6 +1780,7 @@ async fn add_documents_invalid_geo_field() {
@r###" @r###"
{ {
"uid": 5, "uid": 5,
"batchUid": 5,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1799,6 +1818,7 @@ async fn add_documents_invalid_geo_field() {
@r###" @r###"
{ {
"uid": 6, "uid": 6,
"batchUid": 6,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1836,6 +1856,7 @@ async fn add_documents_invalid_geo_field() {
@r###" @r###"
{ {
"uid": 7, "uid": 7,
"batchUid": 7,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1873,6 +1894,7 @@ async fn add_documents_invalid_geo_field() {
@r###" @r###"
{ {
"uid": 8, "uid": 8,
"batchUid": 8,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1910,6 +1932,7 @@ async fn add_documents_invalid_geo_field() {
@r###" @r###"
{ {
"uid": 9, "uid": 9,
"batchUid": 9,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1947,6 +1970,7 @@ async fn add_documents_invalid_geo_field() {
@r###" @r###"
{ {
"uid": 10, "uid": 10,
"batchUid": 10,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -1984,6 +2008,7 @@ async fn add_documents_invalid_geo_field() {
@r###" @r###"
{ {
"uid": 11, "uid": 11,
"batchUid": 11,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -2021,6 +2046,7 @@ async fn add_documents_invalid_geo_field() {
@r###" @r###"
{ {
"uid": 12, "uid": 12,
"batchUid": 12,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -2058,6 +2084,7 @@ async fn add_documents_invalid_geo_field() {
@r###" @r###"
{ {
"uid": 13, "uid": 13,
"batchUid": 13,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -2096,6 +2123,7 @@ async fn add_documents_invalid_geo_field() {
@r###" @r###"
{ {
"uid": 14, "uid": 14,
"batchUid": 14,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -2132,6 +2160,7 @@ async fn add_documents_invalid_geo_field() {
@r###" @r###"
{ {
"uid": 15, "uid": 15,
"batchUid": 15,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -2168,6 +2197,7 @@ async fn add_documents_invalid_geo_field() {
@r###" @r###"
{ {
"uid": 16, "uid": 16,
"batchUid": 16,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -2210,6 +2240,7 @@ async fn add_invalid_geo_and_then_settings() {
snapshot!(ret, @r###" snapshot!(ret, @r###"
{ {
"uid": "[uid]", "uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "test", "indexUid": "test",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -2232,6 +2263,7 @@ async fn add_invalid_geo_and_then_settings() {
snapshot!(ret, @r###" snapshot!(ret, @r###"
{ {
"uid": "[uid]", "uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "settingsUpdate", "type": "settingsUpdate",
@ -2303,6 +2335,7 @@ async fn error_primary_key_inference() {
@r###" @r###"
{ {
"uid": 0, "uid": 0,
"batchUid": 0,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -2343,6 +2376,7 @@ async fn error_primary_key_inference() {
@r###" @r###"
{ {
"uid": 1, "uid": 1,
"batchUid": 1,
"indexUid": "test", "indexUid": "test",
"status": "failed", "status": "failed",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",
@ -2381,6 +2415,7 @@ async fn error_primary_key_inference() {
@r###" @r###"
{ {
"uid": 2, "uid": 2,
"batchUid": 2,
"indexUid": "test", "indexUid": "test",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -184,6 +184,7 @@ async fn delete_document_by_filter() {
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###" snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{ {
"uid": 2, "uid": 2,
"batchUid": 2,
"indexUid": "doggo", "indexUid": "doggo",
"status": "succeeded", "status": "succeeded",
"type": "documentDeletion", "type": "documentDeletion",
@ -249,6 +250,7 @@ async fn delete_document_by_filter() {
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###" snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{ {
"uid": 3, "uid": 3,
"batchUid": 3,
"indexUid": "doggo", "indexUid": "doggo",
"status": "succeeded", "status": "succeeded",
"type": "documentDeletion", "type": "documentDeletion",
@ -333,6 +335,7 @@ async fn delete_document_by_complex_filter() {
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###" snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{ {
"uid": 2, "uid": 2,
"batchUid": 2,
"indexUid": "doggo", "indexUid": "doggo",
"status": "succeeded", "status": "succeeded",
"type": "documentDeletion", "type": "documentDeletion",
@ -391,6 +394,7 @@ async fn delete_document_by_complex_filter() {
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###" snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{ {
"uid": 3, "uid": 3,
"batchUid": 3,
"indexUid": "doggo", "indexUid": "doggo",
"status": "succeeded", "status": "succeeded",
"type": "documentDeletion", "type": "documentDeletion",

View File

@ -563,6 +563,7 @@ async fn delete_document_by_filter() {
snapshot!(response, @r###" snapshot!(response, @r###"
{ {
"uid": "[uid]", "uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "DOES_NOT_EXISTS", "indexUid": "DOES_NOT_EXISTS",
"status": "failed", "status": "failed",
"type": "documentDeletion", "type": "documentDeletion",
@ -592,6 +593,7 @@ async fn delete_document_by_filter() {
snapshot!(response, @r###" snapshot!(response, @r###"
{ {
"uid": "[uid]", "uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "EMPTY_INDEX", "indexUid": "EMPTY_INDEX",
"status": "failed", "status": "failed",
"type": "documentDeletion", "type": "documentDeletion",
@ -623,6 +625,7 @@ async fn delete_document_by_filter() {
snapshot!(response, @r###" snapshot!(response, @r###"
{ {
"uid": "[uid]", "uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "SHARED_DOCUMENTS", "indexUid": "SHARED_DOCUMENTS",
"status": "failed", "status": "failed",
"type": "documentDeletion", "type": "documentDeletion",

View File

@ -88,7 +88,7 @@ async fn import_dump_v1_movie_raw() {
snapshot!(code, @"200 OK"); snapshot!(code, @"200 OK");
assert_eq!( assert_eq!(
tasks, tasks,
json!({ "results": [{"uid": 0, "indexUid": "indexUID", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": { "receivedDocuments": 0, "indexedDocuments": 31968 }, "error": null, "duration": "PT9.317060500S", "enqueuedAt": "2021-09-08T09:08:45.153219Z", "startedAt": "2021-09-08T09:08:45.3961665Z", "finishedAt": "2021-09-08T09:08:54.713227Z" }], "total": 1, "limit": 20, "from": 0, "next": null }) json!({ "results": [{"uid": 0, "batchUid": null, "indexUid": "indexUID", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": { "receivedDocuments": 0, "indexedDocuments": 31968 }, "error": null, "duration": "PT9.317060500S", "enqueuedAt": "2021-09-08T09:08:45.153219Z", "startedAt": "2021-09-08T09:08:45.3961665Z", "finishedAt": "2021-09-08T09:08:54.713227Z" }], "total": 1, "limit": 20, "from": 0, "next": null })
); );
// finally we're just going to check that we can still get a few documents by id // finally we're just going to check that we can still get a few documents by id
@ -251,7 +251,7 @@ async fn import_dump_v1_movie_with_settings() {
snapshot!(code, @"200 OK"); snapshot!(code, @"200 OK");
assert_eq!( assert_eq!(
tasks, tasks,
json!({ "results": [{ "uid": 1, "indexUid": "indexUID", "status": "succeeded", "type": "settingsUpdate", "canceledBy": null, "details": { "displayedAttributes": ["genres", "id", "overview", "poster", "release_date", "title"], "searchableAttributes": ["title", "overview"], "filterableAttributes": ["genres"], "sortableAttributes": ["genres"], "stopWords": ["of", "the"] }, "error": null, "duration": "PT7.288826907S", "enqueuedAt": "2021-09-08T09:34:40.882977Z", "startedAt": "2021-09-08T09:34:40.883073093Z", "finishedAt": "2021-09-08T09:34:48.1719Z"}, { "uid": 0, "indexUid": "indexUID", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": { "receivedDocuments": 0, "indexedDocuments": 31968 }, "error": null, "duration": "PT9.090735774S", "enqueuedAt": "2021-09-08T09:34:16.036101Z", "startedAt": "2021-09-08T09:34:16.261191226Z", "finishedAt": "2021-09-08T09:34:25.351927Z" }], "total": 2, "limit": 20, "from": 1, "next": null }) json!({ "results": [{ "uid": 1, "batchUid": null, "indexUid": "indexUID", "status": "succeeded", "type": "settingsUpdate", "canceledBy": null, "details": { "displayedAttributes": ["genres", "id", "overview", "poster", "release_date", "title"], "searchableAttributes": ["title", "overview"], "filterableAttributes": ["genres"], "sortableAttributes": ["genres"], "stopWords": ["of", "the"] }, "error": null, "duration": "PT7.288826907S", "enqueuedAt": "2021-09-08T09:34:40.882977Z", "startedAt": "2021-09-08T09:34:40.883073093Z", "finishedAt": "2021-09-08T09:34:48.1719Z"}, { "uid": 0, "batchUid": null, "indexUid": "indexUID", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": { "receivedDocuments": 0, "indexedDocuments": 31968 }, "error": null, "duration": "PT9.090735774S", "enqueuedAt": "2021-09-08T09:34:16.036101Z", "startedAt": "2021-09-08T09:34:16.261191226Z", "finishedAt": "2021-09-08T09:34:25.351927Z" }], "total": 2, "limit": 20, "from": 1, "next": null })
); );
// finally we're just going to check that we can still get a few documents by id // finally we're just going to check that we can still get a few documents by id
@ -400,7 +400,7 @@ async fn import_dump_v1_rubygems_with_settings() {
snapshot!(code, @"200 OK"); snapshot!(code, @"200 OK");
assert_eq!( assert_eq!(
tasks["results"][0], tasks["results"][0],
json!({"uid": 92, "indexUid": "rubygems", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": {"receivedDocuments": 0, "indexedDocuments": 1042}, "error": null, "duration": "PT1.487793839S", "enqueuedAt": "2021-09-08T09:27:01.465296Z", "startedAt": "2021-09-08T09:28:44.882177161Z", "finishedAt": "2021-09-08T09:28:46.369971Z"}) json!({"uid": 92, "batchUid": null, "indexUid": "rubygems", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": {"receivedDocuments": 0, "indexedDocuments": 1042}, "error": null, "duration": "PT1.487793839S", "enqueuedAt": "2021-09-08T09:27:01.465296Z", "startedAt": "2021-09-08T09:28:44.882177161Z", "finishedAt": "2021-09-08T09:28:46.369971Z"})
); );
// finally we're just going to check that we can still get a few documents by id // finally we're just going to check that we can still get a few documents by id
@ -535,7 +535,7 @@ async fn import_dump_v2_movie_raw() {
snapshot!(code, @"200 OK"); snapshot!(code, @"200 OK");
assert_eq!( assert_eq!(
tasks, tasks,
json!({ "results": [{"uid": 0, "indexUid": "indexUID", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": { "receivedDocuments": 0, "indexedDocuments": 31944 }, "error": null, "duration": "PT41.751156S", "enqueuedAt": "2021-09-08T08:30:30.550282Z", "startedAt": "2021-09-08T08:30:30.553012Z", "finishedAt": "2021-09-08T08:31:12.304168Z" }], "total": 1, "limit": 20, "from": 0, "next": null }) json!({ "results": [{"uid": 0, "batchUid": null, "indexUid": "indexUID", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": { "receivedDocuments": 0, "indexedDocuments": 31944 }, "error": null, "duration": "PT41.751156S", "enqueuedAt": "2021-09-08T08:30:30.550282Z", "startedAt": "2021-09-08T08:30:30.553012Z", "finishedAt": "2021-09-08T08:31:12.304168Z" }], "total": 1, "limit": 20, "from": 0, "next": null })
); );
// finally we're just going to check that we can still get a few documents by id // finally we're just going to check that we can still get a few documents by id
@ -682,7 +682,7 @@ async fn import_dump_v2_movie_with_settings() {
snapshot!(code, @"200 OK"); snapshot!(code, @"200 OK");
assert_eq!( assert_eq!(
tasks, tasks,
json!({ "results": [{ "uid": 1, "indexUid": "indexUID", "status": "succeeded", "type": "settingsUpdate", "canceledBy": null, "details": { "displayedAttributes": ["title", "genres", "overview", "poster", "release_date"], "searchableAttributes": ["title", "overview"], "filterableAttributes": ["genres"], "stopWords": ["of", "the"] }, "error": null, "duration": "PT37.488777S", "enqueuedAt": "2021-09-08T08:24:02.323444Z", "startedAt": "2021-09-08T08:24:02.324145Z", "finishedAt": "2021-09-08T08:24:39.812922Z" }, { "uid": 0, "indexUid": "indexUID", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": { "receivedDocuments": 0, "indexedDocuments": 31944 }, "error": null, "duration": "PT39.941318S", "enqueuedAt": "2021-09-08T08:21:14.742672Z", "startedAt": "2021-09-08T08:21:14.750166Z", "finishedAt": "2021-09-08T08:21:54.691484Z" }], "total": 2, "limit": 20, "from": 1, "next": null }) json!({ "results": [{ "uid": 1, "batchUid": null, "indexUid": "indexUID", "status": "succeeded", "type": "settingsUpdate", "canceledBy": null, "details": { "displayedAttributes": ["title", "genres", "overview", "poster", "release_date"], "searchableAttributes": ["title", "overview"], "filterableAttributes": ["genres"], "stopWords": ["of", "the"] }, "error": null, "duration": "PT37.488777S", "enqueuedAt": "2021-09-08T08:24:02.323444Z", "startedAt": "2021-09-08T08:24:02.324145Z", "finishedAt": "2021-09-08T08:24:39.812922Z" }, { "uid": 0, "batchUid": null, "indexUid": "indexUID", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": { "receivedDocuments": 0, "indexedDocuments": 31944 }, "error": null, "duration": "PT39.941318S", "enqueuedAt": "2021-09-08T08:21:14.742672Z", "startedAt": "2021-09-08T08:21:14.750166Z", "finishedAt": "2021-09-08T08:21:54.691484Z" }], "total": 2, "limit": 20, "from": 1, "next": null })
); );
// finally we're just going to check that we can still get a few documents by id // finally we're just going to check that we can still get a few documents by id
@ -828,7 +828,7 @@ async fn import_dump_v2_rubygems_with_settings() {
snapshot!(code, @"200 OK"); snapshot!(code, @"200 OK");
assert_eq!( assert_eq!(
tasks["results"][0], tasks["results"][0],
json!({"uid": 92, "indexUid": "rubygems", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": {"receivedDocuments": 0, "indexedDocuments": 1042}, "error": null, "duration": "PT14.034672S", "enqueuedAt": "2021-09-08T08:40:31.390775Z", "startedAt": "2021-09-08T08:51:39.060642Z", "finishedAt": "2021-09-08T08:51:53.095314Z"}) json!({"uid": 92, "batchUid": null, "indexUid": "rubygems", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": {"receivedDocuments": 0, "indexedDocuments": 1042}, "error": null, "duration": "PT14.034672S", "enqueuedAt": "2021-09-08T08:40:31.390775Z", "startedAt": "2021-09-08T08:51:39.060642Z", "finishedAt": "2021-09-08T08:51:53.095314Z"})
); );
// finally we're just going to check that we can still get a few documents by id // finally we're just going to check that we can still get a few documents by id
@ -963,7 +963,7 @@ async fn import_dump_v3_movie_raw() {
snapshot!(code, @"200 OK"); snapshot!(code, @"200 OK");
assert_eq!( assert_eq!(
tasks, tasks,
json!({ "results": [{"uid": 0, "indexUid": "indexUID", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": { "receivedDocuments": 0, "indexedDocuments": 31944 }, "error": null, "duration": "PT41.751156S", "enqueuedAt": "2021-09-08T08:30:30.550282Z", "startedAt": "2021-09-08T08:30:30.553012Z", "finishedAt": "2021-09-08T08:31:12.304168Z" }], "total": 1, "limit": 20, "from": 0, "next": null }) json!({ "results": [{"uid": 0, "batchUid": null, "indexUid": "indexUID", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": { "receivedDocuments": 0, "indexedDocuments": 31944 }, "error": null, "duration": "PT41.751156S", "enqueuedAt": "2021-09-08T08:30:30.550282Z", "startedAt": "2021-09-08T08:30:30.553012Z", "finishedAt": "2021-09-08T08:31:12.304168Z" }], "total": 1, "limit": 20, "from": 0, "next": null })
); );
// finally we're just going to check that we can still get a few documents by id // finally we're just going to check that we can still get a few documents by id
@ -1110,7 +1110,7 @@ async fn import_dump_v3_movie_with_settings() {
snapshot!(code, @"200 OK"); snapshot!(code, @"200 OK");
assert_eq!( assert_eq!(
tasks, tasks,
json!({ "results": [{ "uid": 1, "indexUid": "indexUID", "status": "succeeded", "type": "settingsUpdate", "canceledBy": null, "details": { "displayedAttributes": ["title", "genres", "overview", "poster", "release_date"], "searchableAttributes": ["title", "overview"], "filterableAttributes": ["genres"], "stopWords": ["of", "the"] }, "error": null, "duration": "PT37.488777S", "enqueuedAt": "2021-09-08T08:24:02.323444Z", "startedAt": "2021-09-08T08:24:02.324145Z", "finishedAt": "2021-09-08T08:24:39.812922Z" }, { "uid": 0, "indexUid": "indexUID", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": { "receivedDocuments": 0, "indexedDocuments": 31944 }, "error": null, "duration": "PT39.941318S", "enqueuedAt": "2021-09-08T08:21:14.742672Z", "startedAt": "2021-09-08T08:21:14.750166Z", "finishedAt": "2021-09-08T08:21:54.691484Z" }], "total": 2, "limit": 20, "from": 1, "next": null }) json!({ "results": [{ "uid": 1, "batchUid": null, "indexUid": "indexUID", "status": "succeeded", "type": "settingsUpdate", "canceledBy": null, "details": { "displayedAttributes": ["title", "genres", "overview", "poster", "release_date"], "searchableAttributes": ["title", "overview"], "filterableAttributes": ["genres"], "stopWords": ["of", "the"] }, "error": null, "duration": "PT37.488777S", "enqueuedAt": "2021-09-08T08:24:02.323444Z", "startedAt": "2021-09-08T08:24:02.324145Z", "finishedAt": "2021-09-08T08:24:39.812922Z" }, { "uid": 0, "batchUid": null, "indexUid": "indexUID", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": { "receivedDocuments": 0, "indexedDocuments": 31944 }, "error": null, "duration": "PT39.941318S", "enqueuedAt": "2021-09-08T08:21:14.742672Z", "startedAt": "2021-09-08T08:21:14.750166Z", "finishedAt": "2021-09-08T08:21:54.691484Z" }], "total": 2, "limit": 20, "from": 1, "next": null })
); );
// finally we're just going to check that we can["results"] still get a few documents by id // finally we're just going to check that we can["results"] still get a few documents by id
@ -1256,7 +1256,7 @@ async fn import_dump_v3_rubygems_with_settings() {
snapshot!(code, @"200 OK"); snapshot!(code, @"200 OK");
assert_eq!( assert_eq!(
tasks["results"][0], tasks["results"][0],
json!({"uid": 92, "indexUid": "rubygems", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": {"receivedDocuments": 0, "indexedDocuments": 1042}, "error": null, "duration": "PT14.034672S", "enqueuedAt": "2021-09-08T08:40:31.390775Z", "startedAt": "2021-09-08T08:51:39.060642Z", "finishedAt": "2021-09-08T08:51:53.095314Z"}) json!({"uid": 92, "batchUid": null, "indexUid": "rubygems", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": {"receivedDocuments": 0, "indexedDocuments": 1042}, "error": null, "duration": "PT14.034672S", "enqueuedAt": "2021-09-08T08:40:31.390775Z", "startedAt": "2021-09-08T08:51:39.060642Z", "finishedAt": "2021-09-08T08:51:53.095314Z"})
); );
// finally we're just going to check that we can still get a few documents by id // finally we're just going to check that we can still get a few documents by id
@ -1391,7 +1391,7 @@ async fn import_dump_v4_movie_raw() {
snapshot!(code, @"200 OK"); snapshot!(code, @"200 OK");
assert_eq!( assert_eq!(
tasks, tasks,
json!({ "results": [{"uid": 0, "indexUid": "indexUID", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": { "receivedDocuments": 0, "indexedDocuments": 31944 }, "error": null, "duration": "PT41.751156S", "enqueuedAt": "2021-09-08T08:30:30.550282Z", "startedAt": "2021-09-08T08:30:30.553012Z", "finishedAt": "2021-09-08T08:31:12.304168Z" }], "total": 1, "limit" : 20, "from": 0, "next": null }) json!({ "results": [{"uid": 0, "batchUid": null, "indexUid": "indexUID", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": { "receivedDocuments": 0, "indexedDocuments": 31944 }, "error": null, "duration": "PT41.751156S", "enqueuedAt": "2021-09-08T08:30:30.550282Z", "startedAt": "2021-09-08T08:30:30.553012Z", "finishedAt": "2021-09-08T08:31:12.304168Z" }], "total": 1, "limit" : 20, "from": 0, "next": null })
); );
// finally we're just going to check that we can still get a few documents by id // finally we're just going to check that we can still get a few documents by id
@ -1538,7 +1538,7 @@ async fn import_dump_v4_movie_with_settings() {
snapshot!(code, @"200 OK"); snapshot!(code, @"200 OK");
assert_eq!( assert_eq!(
tasks, tasks,
json!({ "results": [{ "uid": 1, "indexUid": "indexUID", "status": "succeeded", "type": "settingsUpdate", "canceledBy": null, "details": { "displayedAttributes": ["title", "genres", "overview", "poster", "release_date"], "searchableAttributes": ["title", "overview"], "filterableAttributes": ["genres"], "stopWords": ["of", "the"] }, "error": null, "duration": "PT37.488777S", "enqueuedAt": "2021-09-08T08:24:02.323444Z", "startedAt": "2021-09-08T08:24:02.324145Z", "finishedAt": "2021-09-08T08:24:39.812922Z" }, { "uid": 0, "indexUid": "indexUID", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": { "receivedDocuments": 0, "indexedDocuments": 31944 }, "error": null, "duration": "PT39.941318S", "enqueuedAt": "2021-09-08T08:21:14.742672Z", "startedAt": "2021-09-08T08:21:14.750166Z", "finishedAt": "2021-09-08T08:21:54.691484Z" }], "total": 2, "limit": 20, "from": 1, "next": null }) json!({ "results": [{ "uid": 1, "batchUid": null, "indexUid": "indexUID", "status": "succeeded", "type": "settingsUpdate", "canceledBy": null, "details": { "displayedAttributes": ["title", "genres", "overview", "poster", "release_date"], "searchableAttributes": ["title", "overview"], "filterableAttributes": ["genres"], "stopWords": ["of", "the"] }, "error": null, "duration": "PT37.488777S", "enqueuedAt": "2021-09-08T08:24:02.323444Z", "startedAt": "2021-09-08T08:24:02.324145Z", "finishedAt": "2021-09-08T08:24:39.812922Z" }, { "uid": 0, "batchUid": null, "indexUid": "indexUID", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": { "receivedDocuments": 0, "indexedDocuments": 31944 }, "error": null, "duration": "PT39.941318S", "enqueuedAt": "2021-09-08T08:21:14.742672Z", "startedAt": "2021-09-08T08:21:14.750166Z", "finishedAt": "2021-09-08T08:21:54.691484Z" }], "total": 2, "limit": 20, "from": 1, "next": null })
); );
// finally we're just going to check that we can still get a few documents by id // finally we're just going to check that we can still get a few documents by id
@ -1684,7 +1684,7 @@ async fn import_dump_v4_rubygems_with_settings() {
snapshot!(code, @"200 OK"); snapshot!(code, @"200 OK");
assert_eq!( assert_eq!(
tasks["results"][0], tasks["results"][0],
json!({ "uid": 92, "indexUid": "rubygems", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": {"receivedDocuments": 0, "indexedDocuments": 1042}, "error": null, "duration": "PT14.034672S", "enqueuedAt": "2021-09-08T08:40:31.390775Z", "startedAt": "2021-09-08T08:51:39.060642Z", "finishedAt": "2021-09-08T08:51:53.095314Z"}) json!({ "uid": 92, "batchUid": null, "indexUid": "rubygems", "status": "succeeded", "type": "documentAdditionOrUpdate", "canceledBy": null, "details": {"receivedDocuments": 0, "indexedDocuments": 1042}, "error": null, "duration": "PT14.034672S", "enqueuedAt": "2021-09-08T08:40:31.390775Z", "startedAt": "2021-09-08T08:51:39.060642Z", "finishedAt": "2021-09-08T08:51:53.095314Z"})
); );
// finally we're just going to check that we can still get a few documents by id // finally we're just going to check that we can still get a few documents by id

View File

@ -1,8 +1,9 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"uid": "[uid]", "uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "pets", "indexUid": "pets",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,8 +1,9 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"uid": "[uid]", "uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "pets", "indexUid": "pets",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 1, "uid": 1,
"batchUid": null,
"indexUid": "indexUID", "indexUid": "indexUID",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 0, "uid": 0,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "settingsUpdate", "type": "settingsUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

View File

@ -1,10 +1,11 @@
--- ---
source: meilisearch/tests/dumps/mod.rs source: crates/meilisearch/tests/dumps/mod.rs
--- ---
{ {
"results": [ "results": [
{ {
"uid": 92, "uid": 92,
"batchUid": null,
"indexUid": "rubygems", "indexUid": "rubygems",
"status": "succeeded", "status": "succeeded",
"type": "documentAdditionOrUpdate", "type": "documentAdditionOrUpdate",

Some files were not shown because too many files have changed in this diff Show More