From d3eb8d2d5cfac51d86f82d37ce13b0c9d7ef692a Mon Sep 17 00:00:00 2001 From: amab8901 Date: Wed, 14 Dec 2022 10:44:25 +0100 Subject: [PATCH 1/8] Enable create_raw_index(...) to specify time --- index-scheduler/src/batch.rs | 4 ++-- index-scheduler/src/index_mapper.rs | 31 ++++++++++++++++++++++++----- index-scheduler/src/lib.rs | 4 +++- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/index-scheduler/src/batch.rs b/index-scheduler/src/batch.rs index 02cfdb178..903a58bf1 100644 --- a/index-scheduler/src/batch.rs +++ b/index-scheduler/src/batch.rs @@ -788,7 +788,7 @@ impl IndexScheduler { let index = if must_create_index { // create the index if it doesn't already exist let wtxn = self.env.write_txn()?; - self.index_mapper.create_index(wtxn, index_uid)? + self.index_mapper.create_index(wtxn, index_uid, None, None)? } else { let rtxn = self.env.read_txn()?; self.index_mapper.index(&rtxn, index_uid)? @@ -805,7 +805,7 @@ impl IndexScheduler { if self.index_mapper.exists(&wtxn, &index_uid)? { return Err(Error::IndexAlreadyExists(index_uid)); } - self.index_mapper.create_index(wtxn, &index_uid)?; + self.index_mapper.create_index(wtxn, &index_uid, None, None)?; self.process_batch(Batch::IndexUpdate { index_uid, primary_key, task }) } diff --git a/index-scheduler/src/index_mapper.rs b/index-scheduler/src/index_mapper.rs index c65d76837..82bf0ceb4 100644 --- a/index-scheduler/src/index_mapper.rs +++ b/index-scheduler/src/index_mapper.rs @@ -66,15 +66,30 @@ impl IndexMapper { /// Create or open an index in the specified path. /// The path *must* exists or an error will be thrown. - fn create_or_open_index(&self, path: &Path) -> Result { + fn create_or_open_index(&self, path: &Path, created: Option, updated: Option) -> Result { let mut options = EnvOpenOptions::new(); options.map_size(clamp_to_page_size(self.index_size)); options.max_readers(1024); - Ok(Index::new(options, path)?) + + let created_at; + if created == None { + created_at = time::OffsetDateTime::now_utc(); + } else { + created_at = created.unwrap(); + } + + let updated_at; + if updated == None { + updated_at = time::OffsetDateTime::now_utc(); + } else { + updated_at = updated.unwrap(); + } + + Ok(Index::new_with_creation_dates(options, path, created_at, updated_at)?) } /// Get or create the index. - pub fn create_index(&self, mut wtxn: RwTxn, name: &str) -> Result { + pub fn create_index(&self, mut wtxn: RwTxn, name: &str, created_at: Option, updated_at: Option) -> Result { match self.index(&wtxn, name) { Ok(index) => { wtxn.commit()?; @@ -86,7 +101,10 @@ impl IndexMapper { let index_path = self.base_path.join(uuid.to_string()); fs::create_dir_all(&index_path)?; - let index = self.create_or_open_index(&index_path)?; + + //let created_at = Some(time::OffsetDateTime::now_utc()); + //let updated_at = Some(time::OffsetDateTime::now_utc()); + let index = self.create_or_open_index(&index_path, created_at, updated_at)?; wtxn.commit()?; // TODO: it would be better to lazily create the index. But we need an Index::open function for milli. @@ -179,7 +197,10 @@ impl IndexMapper { match index_map.entry(uuid) { Entry::Vacant(entry) => { let index_path = self.base_path.join(uuid.to_string()); - let index = self.create_or_open_index(&index_path)?; + + let created_at = Some(time::OffsetDateTime::now_utc()); + let updated_at = Some(time::OffsetDateTime::now_utc()); + let index = self.create_or_open_index(&index_path, created_at, updated_at)?; entry.insert(Available(index.clone())); index } diff --git a/index-scheduler/src/lib.rs b/index-scheduler/src/lib.rs index 1e551f9f8..8b207165b 100644 --- a/index-scheduler/src/lib.rs +++ b/index-scheduler/src/lib.rs @@ -867,7 +867,9 @@ impl IndexScheduler { /// Create a new index without any associated task. pub fn create_raw_index(&self, name: &str) -> Result { let wtxn = self.env.write_txn()?; - let index = self.index_mapper.create_index(wtxn, name)?; + let created_at = Some(time::OffsetDateTime::now_utc()); + let updated_at = Some(time::OffsetDateTime::now_utc()); + let index = self.index_mapper.create_index(wtxn, name, created_at, updated_at)?; Ok(index) } From 5a0a0468df7bc733f03b605f64eb1172bffcdb01 Mon Sep 17 00:00:00 2001 From: amab8901 Date: Fri, 16 Dec 2022 08:11:12 +0100 Subject: [PATCH 2/8] Combine created and added into date --- index-scheduler/src/batch.rs | 4 ++-- index-scheduler/src/index_mapper.rs | 31 ++++++++--------------------- index-scheduler/src/lib.rs | 5 ++--- 3 files changed, 12 insertions(+), 28 deletions(-) diff --git a/index-scheduler/src/batch.rs b/index-scheduler/src/batch.rs index 903a58bf1..6eac926c4 100644 --- a/index-scheduler/src/batch.rs +++ b/index-scheduler/src/batch.rs @@ -788,7 +788,7 @@ impl IndexScheduler { let index = if must_create_index { // create the index if it doesn't already exist let wtxn = self.env.write_txn()?; - self.index_mapper.create_index(wtxn, index_uid, None, None)? + self.index_mapper.create_index(wtxn, index_uid, None)? } else { let rtxn = self.env.read_txn()?; self.index_mapper.index(&rtxn, index_uid)? @@ -805,7 +805,7 @@ impl IndexScheduler { if self.index_mapper.exists(&wtxn, &index_uid)? { return Err(Error::IndexAlreadyExists(index_uid)); } - self.index_mapper.create_index(wtxn, &index_uid, None, None)?; + self.index_mapper.create_index(wtxn, &index_uid, None)?; self.process_batch(Batch::IndexUpdate { index_uid, primary_key, task }) } diff --git a/index-scheduler/src/index_mapper.rs b/index-scheduler/src/index_mapper.rs index 82bf0ceb4..8979dd6ce 100644 --- a/index-scheduler/src/index_mapper.rs +++ b/index-scheduler/src/index_mapper.rs @@ -66,30 +66,18 @@ impl IndexMapper { /// Create or open an index in the specified path. /// The path *must* exists or an error will be thrown. - fn create_or_open_index(&self, path: &Path, created: Option, updated: Option) -> Result { + fn create_or_open_index(&self, path: &Path, date: Option<(time::OffsetDateTime, time::OffsetDateTime)>) -> Result { let mut options = EnvOpenOptions::new(); options.map_size(clamp_to_page_size(self.index_size)); options.max_readers(1024); + + let (created, updated) = date.unwrap(); - let created_at; - if created == None { - created_at = time::OffsetDateTime::now_utc(); - } else { - created_at = created.unwrap(); - } - - let updated_at; - if updated == None { - updated_at = time::OffsetDateTime::now_utc(); - } else { - updated_at = updated.unwrap(); - } - - Ok(Index::new_with_creation_dates(options, path, created_at, updated_at)?) + Ok(Index::new_with_creation_dates(options, path, created, updated)?) } /// Get or create the index. - pub fn create_index(&self, mut wtxn: RwTxn, name: &str, created_at: Option, updated_at: Option) -> Result { + pub fn create_index(&self, mut wtxn: RwTxn, name: &str, date: Option<(time::OffsetDateTime, time::OffsetDateTime)>) -> Result { match self.index(&wtxn, name) { Ok(index) => { wtxn.commit()?; @@ -102,9 +90,7 @@ impl IndexMapper { let index_path = self.base_path.join(uuid.to_string()); fs::create_dir_all(&index_path)?; - //let created_at = Some(time::OffsetDateTime::now_utc()); - //let updated_at = Some(time::OffsetDateTime::now_utc()); - let index = self.create_or_open_index(&index_path, created_at, updated_at)?; + let index = self.create_or_open_index(&index_path, date)?; wtxn.commit()?; // TODO: it would be better to lazily create the index. But we need an Index::open function for milli. @@ -198,9 +184,8 @@ impl IndexMapper { Entry::Vacant(entry) => { let index_path = self.base_path.join(uuid.to_string()); - let created_at = Some(time::OffsetDateTime::now_utc()); - let updated_at = Some(time::OffsetDateTime::now_utc()); - let index = self.create_or_open_index(&index_path, created_at, updated_at)?; + let date = Some(( time::OffsetDateTime::now_utc(), time::OffsetDateTime::now_utc() )); + let index = self.create_or_open_index(&index_path, date)?; entry.insert(Available(index.clone())); index } diff --git a/index-scheduler/src/lib.rs b/index-scheduler/src/lib.rs index 8b207165b..9e39b4cf3 100644 --- a/index-scheduler/src/lib.rs +++ b/index-scheduler/src/lib.rs @@ -867,9 +867,8 @@ impl IndexScheduler { /// Create a new index without any associated task. pub fn create_raw_index(&self, name: &str) -> Result { let wtxn = self.env.write_txn()?; - let created_at = Some(time::OffsetDateTime::now_utc()); - let updated_at = Some(time::OffsetDateTime::now_utc()); - let index = self.index_mapper.create_index(wtxn, name, created_at, updated_at)?; + let date = Some(( time::OffsetDateTime::now_utc(), time::OffsetDateTime::now_utc() )); + let index = self.index_mapper.create_index(wtxn, name, date)?; Ok(index) } From 4e175ae88250720a5977bc97151df0eeb3a590b5 Mon Sep 17 00:00:00 2001 From: amab8901 Date: Fri, 16 Dec 2022 08:20:13 +0100 Subject: [PATCH 3/8] Replace Index::new_with_creation_dates(...) with Index::new(...) --- index-scheduler/src/index_mapper.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/index-scheduler/src/index_mapper.rs b/index-scheduler/src/index_mapper.rs index 8979dd6ce..95fc3b754 100644 --- a/index-scheduler/src/index_mapper.rs +++ b/index-scheduler/src/index_mapper.rs @@ -71,9 +71,12 @@ impl IndexMapper { options.map_size(clamp_to_page_size(self.index_size)); options.max_readers(1024); - let (created, updated) = date.unwrap(); - - Ok(Index::new_with_creation_dates(options, path, created, updated)?) + if date == None { + Ok(Index::new(options, path)?) + } else { + let (created, updated) = date.unwrap(); + Ok(Index::new_with_creation_dates(options, path, created, updated)?) + } } /// Get or create the index. From b4a73f2d74875b9ed8d1ee00492c4c9d99baa2f2 Mon Sep 17 00:00:00 2001 From: amab8901 Date: Fri, 16 Dec 2022 08:32:44 +0100 Subject: [PATCH 4/8] Remove redundant date-setting --- index-scheduler/src/index_mapper.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/index-scheduler/src/index_mapper.rs b/index-scheduler/src/index_mapper.rs index 95fc3b754..b49614331 100644 --- a/index-scheduler/src/index_mapper.rs +++ b/index-scheduler/src/index_mapper.rs @@ -187,8 +187,7 @@ impl IndexMapper { Entry::Vacant(entry) => { let index_path = self.base_path.join(uuid.to_string()); - let date = Some(( time::OffsetDateTime::now_utc(), time::OffsetDateTime::now_utc() )); - let index = self.create_or_open_index(&index_path, date)?; + let index = self.create_or_open_index(&index_path, None)?; entry.insert(Available(index.clone())); index } From aa03e02fdc8e7c3cd96548011bfff0af9bc0fa7b Mon Sep 17 00:00:00 2001 From: amab8901 Date: Mon, 19 Dec 2022 19:24:56 +0100 Subject: [PATCH 5/8] Apply Rustfmt --- index-scheduler/src/index_mapper.rs | 15 ++++++++++++--- index-scheduler/src/lib.rs | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/index-scheduler/src/index_mapper.rs b/index-scheduler/src/index_mapper.rs index b49614331..cad74a4b6 100644 --- a/index-scheduler/src/index_mapper.rs +++ b/index-scheduler/src/index_mapper.rs @@ -66,11 +66,15 @@ impl IndexMapper { /// Create or open an index in the specified path. /// The path *must* exists or an error will be thrown. - fn create_or_open_index(&self, path: &Path, date: Option<(time::OffsetDateTime, time::OffsetDateTime)>) -> Result { + fn create_or_open_index( + &self, + path: &Path, + date: Option<(time::OffsetDateTime, time::OffsetDateTime)>, + ) -> Result { let mut options = EnvOpenOptions::new(); options.map_size(clamp_to_page_size(self.index_size)); options.max_readers(1024); - + if date == None { Ok(Index::new(options, path)?) } else { @@ -80,7 +84,12 @@ impl IndexMapper { } /// Get or create the index. - pub fn create_index(&self, mut wtxn: RwTxn, name: &str, date: Option<(time::OffsetDateTime, time::OffsetDateTime)>) -> Result { + pub fn create_index( + &self, + mut wtxn: RwTxn, + name: &str, + date: Option<(time::OffsetDateTime, time::OffsetDateTime)>, + ) -> Result { match self.index(&wtxn, name) { Ok(index) => { wtxn.commit()?; diff --git a/index-scheduler/src/lib.rs b/index-scheduler/src/lib.rs index 9e39b4cf3..a9068adb4 100644 --- a/index-scheduler/src/lib.rs +++ b/index-scheduler/src/lib.rs @@ -867,7 +867,7 @@ impl IndexScheduler { /// Create a new index without any associated task. pub fn create_raw_index(&self, name: &str) -> Result { let wtxn = self.env.write_txn()?; - let date = Some(( time::OffsetDateTime::now_utc(), time::OffsetDateTime::now_utc() )); + let date = Some((time::OffsetDateTime::now_utc(), time::OffsetDateTime::now_utc())); let index = self.index_mapper.create_index(wtxn, name, date)?; Ok(index) From d5978d11e1bdfb3722d95024b5f3c40ed1184cf9 Mon Sep 17 00:00:00 2001 From: amab8901 Date: Wed, 21 Dec 2022 14:28:00 +0100 Subject: [PATCH 6/8] Refactor --- index-scheduler/src/index_mapper.rs | 7 +++---- index-scheduler/src/lib.rs | 7 +++++-- meilisearch/src/lib.rs | 4 +++- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/index-scheduler/src/index_mapper.rs b/index-scheduler/src/index_mapper.rs index cad74a4b6..de9e47df3 100644 --- a/index-scheduler/src/index_mapper.rs +++ b/index-scheduler/src/index_mapper.rs @@ -75,11 +75,10 @@ impl IndexMapper { options.map_size(clamp_to_page_size(self.index_size)); options.max_readers(1024); - if date == None { - Ok(Index::new(options, path)?) - } else { - let (created, updated) = date.unwrap(); + if let Some((created, updated)) = date { Ok(Index::new_with_creation_dates(options, path, created, updated)?) + } else { + Ok(Index::new(options, path)?) } } diff --git a/index-scheduler/src/lib.rs b/index-scheduler/src/lib.rs index a9068adb4..111f2960c 100644 --- a/index-scheduler/src/lib.rs +++ b/index-scheduler/src/lib.rs @@ -865,9 +865,12 @@ impl IndexScheduler { } /// Create a new index without any associated task. - pub fn create_raw_index(&self, name: &str) -> Result { + pub fn create_raw_index( + &self, + name: &str, + date: Option<(time::OffsetDateTime, time::OffsetDateTime)>, + ) -> Result { let wtxn = self.env.write_txn()?; - let date = Some((time::OffsetDateTime::now_utc(), time::OffsetDateTime::now_utc())); let index = self.index_mapper.create_index(wtxn, name, date)?; Ok(index) diff --git a/meilisearch/src/lib.rs b/meilisearch/src/lib.rs index b11f063d2..6d966aab1 100644 --- a/meilisearch/src/lib.rs +++ b/meilisearch/src/lib.rs @@ -277,7 +277,9 @@ fn import_dump( let mut index_reader = index_reader?; let metadata = index_reader.metadata(); log::info!("Importing index `{}`.", metadata.uid); - let index = index_scheduler.create_raw_index(&metadata.uid)?; + //let date = Some((time::OffsetDateTime::now_utc(), time::OffsetDateTime::now_utc())); + let date = dump_reader.date(); + let index = index_scheduler.create_raw_index(&metadata.uid, date)?; let mut wtxn = index.write_txn()?; From df176aaf01b61cbe703e0bc77f35f4df69d5e957 Mon Sep 17 00:00:00 2001 From: amab8901 Date: Wed, 21 Dec 2022 15:16:31 +0100 Subject: [PATCH 7/8] Insert dump_reader.date() into create_raw_index(_) argument --- meilisearch/src/lib.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/meilisearch/src/lib.rs b/meilisearch/src/lib.rs index 1dc40ac76..83631e5b2 100644 --- a/meilisearch/src/lib.rs +++ b/meilisearch/src/lib.rs @@ -289,8 +289,13 @@ fn import_dump( let mut index_reader = index_reader?; let metadata = index_reader.metadata(); log::info!("Importing index `{}`.", metadata.uid); - //let date = Some((time::OffsetDateTime::now_utc(), time::OffsetDateTime::now_utc())); - let date = dump_reader.date(); + let date; + if let Some(dump_reader_date) = dump_reader.date() { + date = Some((dump_reader_date, dump_reader_date)); + } else { + date = Some((time::OffsetDateTime::now_utc(), time::OffsetDateTime::now_utc())); + } + let index = index_scheduler.create_raw_index(&metadata.uid, date)?; let mut wtxn = index.write_txn()?; From 9a39c4e40d549b2aae16339203f50097a2466e96 Mon Sep 17 00:00:00 2001 From: amab8901 Date: Thu, 22 Dec 2022 11:46:17 +0100 Subject: [PATCH 8/8] Get date from IndexMetaData --- index-scheduler/src/index_mapper.rs | 5 +++-- index-scheduler/src/lib.rs | 5 ++--- meilisearch/src/lib.rs | 7 +------ 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/index-scheduler/src/index_mapper.rs b/index-scheduler/src/index_mapper.rs index de9e47df3..02b53749f 100644 --- a/index-scheduler/src/index_mapper.rs +++ b/index-scheduler/src/index_mapper.rs @@ -9,6 +9,7 @@ use meilisearch_types::heed::types::Str; use meilisearch_types::heed::{Database, Env, EnvOpenOptions, RoTxn, RwTxn}; use meilisearch_types::milli::update::IndexerConfig; use meilisearch_types::milli::Index; +use time::OffsetDateTime; use uuid::Uuid; use self::IndexStatus::{Available, BeingDeleted}; @@ -69,7 +70,7 @@ impl IndexMapper { fn create_or_open_index( &self, path: &Path, - date: Option<(time::OffsetDateTime, time::OffsetDateTime)>, + date: Option<(OffsetDateTime, OffsetDateTime)>, ) -> Result { let mut options = EnvOpenOptions::new(); options.map_size(clamp_to_page_size(self.index_size)); @@ -87,7 +88,7 @@ impl IndexMapper { &self, mut wtxn: RwTxn, name: &str, - date: Option<(time::OffsetDateTime, time::OffsetDateTime)>, + date: Option<(OffsetDateTime, OffsetDateTime)>, ) -> Result { match self.index(&wtxn, name) { Ok(index) => { diff --git a/index-scheduler/src/lib.rs b/index-scheduler/src/lib.rs index 205fc4a50..c9d5f2ec9 100644 --- a/index-scheduler/src/lib.rs +++ b/index-scheduler/src/lib.rs @@ -693,7 +693,7 @@ impl IndexScheduler { let mut task = Task { uid: self.next_task_id(&wtxn)?, - enqueued_at: time::OffsetDateTime::now_utc(), + enqueued_at: OffsetDateTime::now_utc(), started_at: None, finished_at: None, error: None, @@ -868,11 +868,10 @@ impl IndexScheduler { pub fn create_raw_index( &self, name: &str, - date: Option<(time::OffsetDateTime, time::OffsetDateTime)>, + date: Option<(OffsetDateTime, OffsetDateTime)>, ) -> Result { let wtxn = self.env.write_txn()?; let index = self.index_mapper.create_index(wtxn, name, date)?; - Ok(index) } diff --git a/meilisearch/src/lib.rs b/meilisearch/src/lib.rs index 83631e5b2..3797a3a44 100644 --- a/meilisearch/src/lib.rs +++ b/meilisearch/src/lib.rs @@ -289,13 +289,8 @@ fn import_dump( let mut index_reader = index_reader?; let metadata = index_reader.metadata(); log::info!("Importing index `{}`.", metadata.uid); - let date; - if let Some(dump_reader_date) = dump_reader.date() { - date = Some((dump_reader_date, dump_reader_date)); - } else { - date = Some((time::OffsetDateTime::now_utc(), time::OffsetDateTime::now_utc())); - } + let date = Some((metadata.created_at, metadata.updated_at)); let index = index_scheduler.create_raw_index(&metadata.uid, date)?; let mut wtxn = index.write_txn()?;