diff --git a/Cargo.lock b/Cargo.lock index 056805636..757a2a9e8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1707,10 +1707,9 @@ dependencies = [ [[package]] name = "milli" -version = "0.3.1" -source = "git+https://github.com/meilisearch/milli.git?tag=v0.3.1#bc020317935da4ea08061b3d4518cbbd40184856" +version = "0.4.0" +source = "git+https://github.com/meilisearch/milli.git?tag=v0.4.0#3bd4cf94cc60733393b94021fca77eb100bfe17a" dependencies = [ - "anyhow", "bstr", "byteorder", "chrono", diff --git a/meilisearch-http/Cargo.toml b/meilisearch-http/Cargo.toml index 05e69367a..70ab30d34 100644 --- a/meilisearch-http/Cargo.toml +++ b/meilisearch-http/Cargo.toml @@ -51,7 +51,7 @@ main_error = "0.1.0" meilisearch-error = { path = "../meilisearch-error" } meilisearch-tokenizer = { git = "https://github.com/meilisearch/Tokenizer.git", tag = "v0.2.2" } memmap = "0.7.0" -milli = { git = "https://github.com/meilisearch/milli.git", tag = "v0.3.1" } +milli = { git = "https://github.com/meilisearch/milli.git", tag = "v0.4.0" } mime = "0.3.16" once_cell = "1.5.2" oxidized-json-checker = "0.3.2" diff --git a/meilisearch-http/src/index/search.rs b/meilisearch-http/src/index/search.rs index 50d163898..783c3d3e0 100644 --- a/meilisearch-http/src/index/search.rs +++ b/meilisearch-http/src/index/search.rs @@ -369,7 +369,7 @@ fn parse_facets_array( } } - FilterCondition::from_array(txn, &index.0, ands) + Ok(FilterCondition::from_array(txn, &index.0, ands)?) } #[cfg(test)] diff --git a/meilisearch-http/src/index/updates.rs b/meilisearch-http/src/index/updates.rs index fc475aa4d..ce327520e 100644 --- a/meilisearch-http/src/index/updates.rs +++ b/meilisearch-http/src/index/updates.rs @@ -200,8 +200,11 @@ impl Index { info!("performing document addition"); // Set the primary key if not set already, ignore if already set. - if let (None, Some(ref primary_key)) = (self.primary_key(txn)?, primary_key) { - self.put_primary_key(txn, primary_key)?; + if let (None, Some(primary_key)) = (self.primary_key(txn)?, primary_key) { + let mut builder = UpdateBuilder::new(0) + .settings(txn, &self); + builder.set_primary_key(primary_key.to_string()); + builder.execute(|_, _| ())?; } let mut builder = update_builder.index_documents(txn, self); @@ -235,7 +238,7 @@ impl Index { .commit() .and(Ok(UpdateResult::Other)) .map_err(Into::into), - Err(e) => Err(e), + Err(e) => Err(e.into()), } } @@ -331,7 +334,7 @@ impl Index { .commit() .and(Ok(UpdateResult::DocumentDeletion { deleted })) .map_err(Into::into), - Err(e) => Err(e), + Err(e) => Err(e.into()), } } } diff --git a/meilisearch-http/src/index_controller/index_actor/actor.rs b/meilisearch-http/src/index_controller/index_actor/actor.rs index 4d8324e11..c35e685a8 100644 --- a/meilisearch-http/src/index_controller/index_actor/actor.rs +++ b/meilisearch-http/src/index_controller/index_actor/actor.rs @@ -6,6 +6,7 @@ use async_stream::stream; use futures::stream::StreamExt; use heed::CompactionOption; use log::debug; +use milli::update::UpdateBuilder; use tokio::task::spawn_blocking; use tokio::{fs, sync::mpsc}; use uuid::Uuid; @@ -258,12 +259,15 @@ impl IndexActor { .ok_or(IndexError::UnexistingIndex)?; let result = spawn_blocking(move || match index_settings.primary_key { - Some(ref primary_key) => { + Some(primary_key) => { let mut txn = index.write_txn()?; if index.primary_key(&txn)?.is_some() { return Err(IndexError::ExistingPrimaryKey); } - index.put_primary_key(&mut txn, primary_key)?; + let mut builder = UpdateBuilder::new(0).settings(&mut txn, &index); + builder.set_primary_key(primary_key); + builder.execute(|_, _| ()) + .map_err(|e| IndexError::Internal(e.to_string()))?; let meta = IndexMeta::new_txn(&index, &txn)?; txn.commit()?; Ok(meta) @@ -333,7 +337,8 @@ impl IndexActor { Ok(IndexStats { size: index.size(), - number_of_documents: index.number_of_documents(&rtxn)?, + number_of_documents: index.number_of_documents(&rtxn) + .map_err(|e| IndexError::Internal(e.to_string()))?, is_indexing: None, fields_distribution: index.fields_distribution(&rtxn)?, }) diff --git a/meilisearch-http/src/index_controller/index_actor/mod.rs b/meilisearch-http/src/index_controller/index_actor/mod.rs index 1ddc0199e..b54a676b0 100644 --- a/meilisearch-http/src/index_controller/index_actor/mod.rs +++ b/meilisearch-http/src/index_controller/index_actor/mod.rs @@ -41,8 +41,12 @@ impl IndexMeta { } fn new_txn(index: &Index, txn: &heed::RoTxn) -> IndexResult { - let created_at = index.created_at(&txn)?; - let updated_at = index.updated_at(&txn)?; + let created_at = index + .created_at(&txn) + .map_err(|e| IndexError::Internal(e.to_string()))?; + let updated_at = index + .updated_at(&txn) + .map_err(|e| IndexError::Internal(e.to_string()))?; let primary_key = index.primary_key(&txn)?.map(String::from); Ok(Self { created_at, diff --git a/meilisearch-http/src/index_controller/index_actor/store.rs b/meilisearch-http/src/index_controller/index_actor/store.rs index 1646821d8..39a6e64a6 100644 --- a/meilisearch-http/src/index_controller/index_actor/store.rs +++ b/meilisearch-http/src/index_controller/index_actor/store.rs @@ -2,6 +2,7 @@ use std::collections::HashMap; use std::path::{Path, PathBuf}; use std::sync::Arc; +use milli::update::UpdateBuilder; use tokio::fs; use tokio::sync::RwLock; use tokio::task::spawn_blocking; @@ -57,7 +58,12 @@ impl IndexStore for MapIndexStore { let index = Index::open(path, index_size)?; if let Some(primary_key) = primary_key { let mut txn = index.write_txn()?; - index.put_primary_key(&mut txn, &primary_key)?; + + let mut builder = UpdateBuilder::new(0).settings(&mut txn, &index); + builder.set_primary_key(primary_key); + builder.execute(|_, _| ()) + .map_err(|e| IndexError::Internal(e.to_string()))?; + txn.commit()?; } Ok(index)