From 6a691db7f8870dbecb10198e2ddd57c2ff18fd6a Mon Sep 17 00:00:00 2001 From: Kerollmops Date: Thu, 30 Sep 2021 11:08:41 +0200 Subject: [PATCH 1/2] Do not commit transaction on failed updates --- meilisearch-lib/src/index/updates.rs | 4 +++- meilisearch-lib/src/index_controller/mod.rs | 2 -- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/meilisearch-lib/src/index/updates.rs b/meilisearch-lib/src/index/updates.rs index 0ae0aefdb..92d1bdcfe 100644 --- a/meilisearch-lib/src/index/updates.rs +++ b/meilisearch-lib/src/index/updates.rs @@ -202,7 +202,9 @@ impl Index { Ok(UpdateResult::DocumentDeletion { deleted }) } }; - txn.commit()?; + if result.is_ok() { + txn.commit()?; + } result })(); diff --git a/meilisearch-lib/src/index_controller/mod.rs b/meilisearch-lib/src/index_controller/mod.rs index 3ca1d3f3f..050767c0f 100644 --- a/meilisearch-lib/src/index_controller/mod.rs +++ b/meilisearch-lib/src/index_controller/mod.rs @@ -276,8 +276,6 @@ impl IndexController { let index = self.index_resolver.create_index(name, None).await?; let update_result = UpdateMsg::update(&self.update_sender, index.uuid, update).await?; - // ignore if index creation fails now, since it may already have been created - Ok(update_result) } else { Err(IndexResolverError::UnexistingIndex(name).into()) From c388dca5ec64ee49c78c93be6d3ff6a29ded501c Mon Sep 17 00:00:00 2001 From: Kerollmops Date: Thu, 30 Sep 2021 11:20:16 +0200 Subject: [PATCH 2/2] Check that invalid updates do not create an index with a primary key --- meilisearch-http/tests/index/create_index.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/meilisearch-http/tests/index/create_index.rs b/meilisearch-http/tests/index/create_index.rs index 3c081f0ed..4813847ff 100644 --- a/meilisearch-http/tests/index/create_index.rs +++ b/meilisearch-http/tests/index/create_index.rs @@ -1,5 +1,5 @@ use crate::common::Server; -use serde_json::Value; +use serde_json::{json, Value}; #[actix_rt::test] async fn create_index_no_primary_key() { @@ -33,6 +33,22 @@ async fn create_index_with_primary_key() { assert_eq!(response.as_object().unwrap().len(), 5); } +#[actix_rt::test] +async fn create_index_with_invalid_primary_key() { + let document = json!([ { "id": 2, "title": "Pride and Prejudice" } ]); + + let server = Server::new().await; + let index = server.index("movies"); + let (_response, code) = index.add_documents(document, Some("title")).await; + assert_eq!(code, 202); + + index.wait_update_id(0).await; + + let (response, code) = index.get().await; + assert_eq!(code, 200); + assert_eq!(response["primaryKey"], Value::Null); +} + // TODO: partial test since we are testing error, amd error is not yet fully implemented in // transplant #[actix_rt::test]