diff --git a/meilidb-core/src/update/documents_addition.rs b/meilidb-core/src/update/documents_addition.rs index c45750a59..9bc2c8920 100644 --- a/meilidb-core/src/update/documents_addition.rs +++ b/meilidb-core/src/update/documents_addition.rs @@ -8,7 +8,7 @@ use serde::Serialize; use crate::raw_indexer::RawIndexer; use crate::serde::{extract_document_id, Serializer, RamDocumentStore}; use crate::store; -use crate::update::{push_documents_addition, apply_documents_deletion}; +use crate::update::{Update, next_update_id, apply_documents_deletion}; use crate::{MResult, Error, RankedMap}; pub struct DocumentsAddition { @@ -59,6 +59,28 @@ impl Extend for DocumentsAddition { } } +pub fn push_documents_addition( + writer: &mut rkv::Writer, + updates_store: store::Updates, + updates_results_store: store::UpdatesResults, + addition: Vec, +) -> MResult +{ + let mut values = Vec::with_capacity(addition.len()); + for add in addition { + let vec = rmp_serde::to_vec_named(&add)?; + let add = rmp_serde::from_read(&vec[..])?; + values.push(add); + } + + let last_update_id = next_update_id(writer, updates_store, updates_results_store)?; + + let update = Update::DocumentsAddition(values); + let update_id = updates_store.put_update(writer, last_update_id, &update)?; + + Ok(last_update_id) +} + pub fn apply_documents_addition( writer: &mut rkv::Writer, main_store: store::Main, diff --git a/meilidb-core/src/update/documents_deletion.rs b/meilidb-core/src/update/documents_deletion.rs index 10f9550fe..d4e703aa8 100644 --- a/meilidb-core/src/update/documents_deletion.rs +++ b/meilidb-core/src/update/documents_deletion.rs @@ -6,7 +6,7 @@ use sdset::{SetBuf, SetOperation, duo::DifferenceByKey}; use crate::{DocumentId, RankedMap, MResult, Error}; use crate::serde::extract_document_id; -use crate::update::push_documents_deletion; +use crate::update::{Update, next_update_id}; use crate::store; pub struct DocumentsDeletion { @@ -69,6 +69,21 @@ impl Extend for DocumentsDeletion { } } +pub fn push_documents_deletion( + writer: &mut rkv::Writer, + updates_store: store::Updates, + updates_results_store: store::UpdatesResults, + deletion: Vec, +) -> MResult +{ + let last_update_id = next_update_id(writer, updates_store, updates_results_store)?; + + let update = Update::DocumentsDeletion(deletion); + let update_id = updates_store.put_update(writer, last_update_id, &update)?; + + Ok(last_update_id) +} + pub fn apply_documents_deletion( writer: &mut rkv::Writer, main_store: store::Main, diff --git a/meilidb-core/src/update/mod.rs b/meilidb-core/src/update/mod.rs index 0e9b6b512..0d2504115 100644 --- a/meilidb-core/src/update/mod.rs +++ b/meilidb-core/src/update/mod.rs @@ -6,12 +6,13 @@ mod synonyms_deletion; pub use self::documents_addition::{DocumentsAddition, apply_documents_addition}; pub use self::documents_deletion::{DocumentsDeletion, apply_documents_deletion}; -pub use self::schema_update::apply_schema_update; +pub use self::schema_update::{apply_schema_update, push_schema_update}; pub use self::synonyms_addition::{SynonymsAddition, apply_synonyms_addition}; pub use self::synonyms_deletion::{SynonymsDeletion, apply_synonyms_deletion}; use std::time::{Duration, Instant}; use std::collections::BTreeMap; +use std::cmp; use log::debug; use serde::{Serialize, Deserialize}; @@ -77,11 +78,11 @@ pub fn update_status( } } -fn biggest_update_id( +pub fn next_update_id( writer: &mut rkv::Writer, updates_store: store::Updates, updates_results_store: store::UpdatesResults, -) -> MResult> +) -> MResult { let last_update_id = updates_store.last_update_id(writer)?; let last_update_id = last_update_id.map(|(n, _)| n); @@ -89,106 +90,10 @@ fn biggest_update_id( let last_update_results_id = updates_results_store.last_update_id(writer)?; let last_update_results_id = last_update_results_id.map(|(n, _)| n); - let max = last_update_id.max(last_update_results_id); + let max_update_id = cmp::max(last_update_id, last_update_results_id); + let new_update_id = max_update_id.map_or(0, |n| n + 1); - Ok(max) -} - -pub fn next_update_id( - writer: &mut rkv::Writer, - updates_store: store::Updates, - updates_results_store: store::UpdatesResults, -) -> MResult -{ - let last_update_id = biggest_update_id( - writer, - updates_store, - updates_results_store - )?; - - Ok(last_update_id.map_or(0, |n| n + 1)) -} - -pub fn push_schema_update( - writer: &mut rkv::Writer, - updates_store: store::Updates, - updates_results_store: store::UpdatesResults, - schema: Schema, -) -> MResult -{ - let last_update_id = next_update_id(writer, updates_store, updates_results_store)?; - - let update = Update::SchemaUpdate(schema); - let update_id = updates_store.put_update(writer, last_update_id, &update)?; - - Ok(last_update_id) -} - -pub fn push_documents_addition( - writer: &mut rkv::Writer, - updates_store: store::Updates, - updates_results_store: store::UpdatesResults, - addition: Vec, -) -> MResult -{ - let mut values = Vec::with_capacity(addition.len()); - for add in addition { - let vec = rmp_serde::to_vec_named(&add)?; - let add = rmp_serde::from_read(&vec[..])?; - values.push(add); - } - - let last_update_id = next_update_id(writer, updates_store, updates_results_store)?; - - let update = Update::DocumentsAddition(values); - let update_id = updates_store.put_update(writer, last_update_id, &update)?; - - Ok(last_update_id) -} - -pub fn push_documents_deletion( - writer: &mut rkv::Writer, - updates_store: store::Updates, - updates_results_store: store::UpdatesResults, - deletion: Vec, -) -> MResult -{ - let last_update_id = next_update_id(writer, updates_store, updates_results_store)?; - - let update = Update::DocumentsDeletion(deletion); - let update_id = updates_store.put_update(writer, last_update_id, &update)?; - - Ok(last_update_id) -} - -pub fn push_synonyms_addition( - writer: &mut rkv::Writer, - updates_store: store::Updates, - updates_results_store: store::UpdatesResults, - addition: BTreeMap>, -) -> MResult -{ - let last_update_id = next_update_id(writer, updates_store, updates_results_store)?; - - let update = Update::SynonymsAddition(addition); - let update_id = updates_store.put_update(writer, last_update_id, &update)?; - - Ok(last_update_id) -} - -pub fn push_synonyms_deletion( - writer: &mut rkv::Writer, - updates_store: store::Updates, - updates_results_store: store::UpdatesResults, - deletion: BTreeMap>>, -) -> MResult -{ - let last_update_id = next_update_id(writer, updates_store, updates_results_store)?; - - let update = Update::SynonymsDeletion(deletion); - let update_id = updates_store.put_update(writer, last_update_id, &update)?; - - Ok(last_update_id) + Ok(new_update_id) } pub fn update_task( diff --git a/meilidb-core/src/update/schema_update.rs b/meilidb-core/src/update/schema_update.rs index 2ebec3b39..d25bfa526 100644 --- a/meilidb-core/src/update/schema_update.rs +++ b/meilidb-core/src/update/schema_update.rs @@ -1,5 +1,6 @@ use meilidb_schema::Schema; use crate::{store, error::UnsupportedOperation, MResult}; +use crate::update::{Update, next_update_id}; pub fn apply_schema_update( writer: &mut rkv::Writer, @@ -13,3 +14,18 @@ pub fn apply_schema_update( main_store.put_schema(writer, new_schema) } + +pub fn push_schema_update( + writer: &mut rkv::Writer, + updates_store: store::Updates, + updates_results_store: store::UpdatesResults, + schema: Schema, +) -> MResult +{ + let last_update_id = next_update_id(writer, updates_store, updates_results_store)?; + + let update = Update::SchemaUpdate(schema); + let update_id = updates_store.put_update(writer, last_update_id, &update)?; + + Ok(last_update_id) +} diff --git a/meilidb-core/src/update/synonyms_addition.rs b/meilidb-core/src/update/synonyms_addition.rs index 7d83ae59e..69591b86e 100644 --- a/meilidb-core/src/update/synonyms_addition.rs +++ b/meilidb-core/src/update/synonyms_addition.rs @@ -8,7 +8,7 @@ use crate::automaton::normalize_str; use crate::raw_indexer::RawIndexer; use crate::serde::{extract_document_id, Serializer, RamDocumentStore}; use crate::store; -use crate::update::push_synonyms_addition; +use crate::update::{Update, next_update_id}; use crate::{MResult, Error, RankedMap}; pub struct SynonymsAddition { @@ -57,6 +57,21 @@ impl SynonymsAddition { } } +pub fn push_synonyms_addition( + writer: &mut rkv::Writer, + updates_store: store::Updates, + updates_results_store: store::UpdatesResults, + addition: BTreeMap>, +) -> MResult +{ + let last_update_id = next_update_id(writer, updates_store, updates_results_store)?; + + let update = Update::SynonymsAddition(addition); + let update_id = updates_store.put_update(writer, last_update_id, &update)?; + + Ok(last_update_id) +} + pub fn apply_synonyms_addition( writer: &mut rkv::Writer, main_store: store::Main, diff --git a/meilidb-core/src/update/synonyms_deletion.rs b/meilidb-core/src/update/synonyms_deletion.rs index 0672f4ca6..66ad1dd44 100644 --- a/meilidb-core/src/update/synonyms_deletion.rs +++ b/meilidb-core/src/update/synonyms_deletion.rs @@ -9,7 +9,7 @@ use crate::automaton::normalize_str; use crate::raw_indexer::RawIndexer; use crate::serde::{extract_document_id, Serializer, RamDocumentStore}; use crate::store; -use crate::update::push_synonyms_deletion; +use crate::update::{Update, next_update_id}; use crate::{MResult, Error, RankedMap}; pub struct SynonymsDeletion { @@ -67,6 +67,21 @@ impl SynonymsDeletion { } } +pub fn push_synonyms_deletion( + writer: &mut rkv::Writer, + updates_store: store::Updates, + updates_results_store: store::UpdatesResults, + deletion: BTreeMap>>, +) -> MResult +{ + let last_update_id = next_update_id(writer, updates_store, updates_results_store)?; + + let update = Update::SynonymsDeletion(deletion); + let update_id = updates_store.put_update(writer, last_update_id, &update)?; + + Ok(last_update_id) +} + pub fn apply_synonyms_deletion( writer: &mut rkv::Writer, main_store: store::Main,