Introduce customs updates

This commit is contained in:
Clément Renault 2019-10-11 15:33:35 +02:00
parent da6ab2753e
commit 02575a2ef6
No known key found for this signature in database
GPG key ID: 92ADA4E935E71FA4
4 changed files with 62 additions and 5 deletions

View file

@ -0,0 +1,26 @@
use crate::{store, error::UnsupportedOperation, MResult};
use crate::update::{Update, next_update_id};
pub fn apply_customs_update(
writer: &mut rkv::Writer,
main_store: store::Main,
customs: &[u8],
) -> MResult<()>
{
main_store.put_customs(writer, customs)
}
pub fn push_customs_update(
writer: &mut rkv::Writer,
updates_store: store::Updates,
updates_results_store: store::UpdatesResults,
customs: Vec<u8>,
) -> MResult<u64>
{
let last_update_id = next_update_id(writer, updates_store, updates_results_store)?;
let update = Update::Customs(customs);
updates_store.put_update(writer, last_update_id, &update)?;
Ok(last_update_id)
}

View file

@ -1,9 +1,11 @@
mod customs_update;
mod documents_addition;
mod documents_deletion;
mod schema_update;
mod synonyms_addition;
mod synonyms_deletion;
pub use self::customs_update::{apply_customs_update, push_customs_update};
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, push_schema_update};
@ -23,6 +25,7 @@ use meilidb_schema::Schema;
#[derive(Debug, Serialize, Deserialize)]
pub enum Update {
Schema(Schema),
Customs(Vec<u8>),
DocumentsAddition(Vec<rmpv::Value>),
DocumentsDeletion(Vec<DocumentId>),
SynonymsAddition(BTreeMap<String, Vec<String>>),
@ -32,6 +35,7 @@ pub enum Update {
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum UpdateType {
Schema { schema: Schema },
Customs,
DocumentsAddition { number: usize },
DocumentsDeletion { number: usize },
SynonymsAddition { number: usize },
@ -112,6 +116,14 @@ pub fn update_task(writer: &mut rkv::Writer, index: store::Index) -> MResult<Opt
(update_type, result, start.elapsed())
},
Update::Customs(customs) => {
let start = Instant::now();
let update_type = UpdateType::Customs;
let result = apply_customs_update(writer, index.main, &customs);
(update_type, result, start.elapsed())
}
Update::DocumentsAddition(documents) => {
let start = Instant::now();