mirror of
				https://github.com/meilisearch/meilisearch.git
				synced 2025-10-31 16:06:31 +00:00 
			
		
		
		
	Merge pull request #5565 from meilisearch/fix-0-batched-task
Fix 0 batched task
This commit is contained in:
		| @@ -383,6 +383,11 @@ impl IndexScheduler { | |||||||
|     /// This function will execute in a different thread and must be called |     /// This function will execute in a different thread and must be called | ||||||
|     /// only once per index scheduler. |     /// only once per index scheduler. | ||||||
|     fn run(&self) { |     fn run(&self) { | ||||||
|  |         // If the number of batched tasks is 0, we don't need to run the scheduler at all. | ||||||
|  |         // It will never be able to process any tasks. | ||||||
|  |         if self.scheduler.max_number_of_batched_tasks == 0 { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|         let run = self.private_clone(); |         let run = self.private_clone(); | ||||||
|         std::thread::Builder::new() |         std::thread::Builder::new() | ||||||
|             .name(String::from("scheduler")) |             .name(String::from("scheduler")) | ||||||
|   | |||||||
| @@ -0,0 +1,63 @@ | |||||||
|  | --- | ||||||
|  | source: crates/index-scheduler/src/scheduler/test.rs | ||||||
|  | --- | ||||||
|  | ### Autobatching Enabled = true | ||||||
|  | ### Processing batch None: | ||||||
|  | [] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### All Tasks: | ||||||
|  | 0 {uid: 0, batch_uid: 0, status: succeeded, details: { primary_key: None }, kind: IndexCreation { index_uid: "doggos", primary_key: None }} | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Status: | ||||||
|  | enqueued [] | ||||||
|  | succeeded [0,] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Kind: | ||||||
|  | "indexCreation" [0,] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Index Tasks: | ||||||
|  | doggos [0,] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Index Mapper: | ||||||
|  | doggos: { number_of_documents: 0, field_distribution: {} } | ||||||
|  |  | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Canceled By: | ||||||
|  |  | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Enqueued At: | ||||||
|  | [timestamp] [0,] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Started At: | ||||||
|  | [timestamp] [0,] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Finished At: | ||||||
|  | [timestamp] [0,] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### All Batches: | ||||||
|  | 0 {uid: 0, details: {}, stats: {"totalNbTasks":1,"status":{"succeeded":1},"types":{"indexCreation":1},"indexUids":{"doggos":1}}, stop reason: "task with id 0 of type `indexCreation` cannot be batched", } | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Batch to tasks mapping: | ||||||
|  | 0 [0,] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Batches Status: | ||||||
|  | succeeded [0,] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Batches Kind: | ||||||
|  | "indexCreation" [0,] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Batches Index Tasks: | ||||||
|  | doggos [0,] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Batches Enqueued At: | ||||||
|  | [timestamp] [0,] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Batches Started At: | ||||||
|  | [timestamp] [0,] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Batches Finished At: | ||||||
|  | [timestamp] [0,] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### File Store: | ||||||
|  |  | ||||||
|  | ---------------------------------------------------------------------- | ||||||
| @@ -0,0 +1,51 @@ | |||||||
|  | --- | ||||||
|  | source: crates/index-scheduler/src/scheduler/test.rs | ||||||
|  | --- | ||||||
|  | ### Autobatching Enabled = true | ||||||
|  | ### Processing batch None: | ||||||
|  | [] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### All Tasks: | ||||||
|  | 0 {uid: 0, status: enqueued, details: { primary_key: None }, kind: IndexCreation { index_uid: "doggos", primary_key: None }} | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Status: | ||||||
|  | enqueued [0,] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Kind: | ||||||
|  | "indexCreation" [0,] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Index Tasks: | ||||||
|  | doggos [0,] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Index Mapper: | ||||||
|  |  | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Canceled By: | ||||||
|  |  | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Enqueued At: | ||||||
|  | [timestamp] [0,] | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Started At: | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Finished At: | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### All Batches: | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Batch to tasks mapping: | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Batches Status: | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Batches Kind: | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Batches Index Tasks: | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Batches Enqueued At: | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Batches Started At: | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### Batches Finished At: | ||||||
|  | ---------------------------------------------------------------------- | ||||||
|  | ### File Store: | ||||||
|  |  | ||||||
|  | ---------------------------------------------------------------------- | ||||||
| @@ -929,3 +929,30 @@ fn create_and_list_index() { | |||||||
|     ] |     ] | ||||||
|     "###); |     "###); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #[test] | ||||||
|  | fn test_scheduler_doesnt_run_with_zero_batched_tasks() { | ||||||
|  |     let (index_scheduler, mut handle) = IndexScheduler::test_with_custom_config(vec![], |config| { | ||||||
|  |         config.max_number_of_batched_tasks = 0; | ||||||
|  |         None | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |     handle.scheduler_is_down(); | ||||||
|  |  | ||||||
|  |     // Register a task | ||||||
|  |     index_scheduler | ||||||
|  |         .register( | ||||||
|  |             KindWithContent::IndexCreation { index_uid: S("doggos"), primary_key: None }, | ||||||
|  |             None, | ||||||
|  |             false, | ||||||
|  |         ) | ||||||
|  |         .unwrap(); | ||||||
|  |     snapshot!(snapshot_index_scheduler(&index_scheduler), name: "registered_task"); | ||||||
|  |  | ||||||
|  |     handle.scheduler_is_down(); | ||||||
|  |  | ||||||
|  |     // If we restart the scheduler, it should run properly. | ||||||
|  |     let (index_scheduler, mut handle) = handle.restart(index_scheduler, true, vec![], |_| None); | ||||||
|  |     handle.advance_n_successful_batches(1); | ||||||
|  |     snapshot!(snapshot_index_scheduler(&index_scheduler), name: "after_restart"); | ||||||
|  | } | ||||||
|   | |||||||
| @@ -119,6 +119,9 @@ impl IndexScheduler { | |||||||
|             (versioning::VERSION_MAJOR, versioning::VERSION_MINOR, versioning::VERSION_PATCH) |             (versioning::VERSION_MAJOR, versioning::VERSION_MINOR, versioning::VERSION_PATCH) | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|  |         // If the number of batched tasks is 0, the scheduler will not run and we can't do the init check. | ||||||
|  |         let skip_init = options.max_number_of_batched_tasks == 0; | ||||||
|  |  | ||||||
|         std::fs::create_dir_all(&options.auth_path).unwrap(); |         std::fs::create_dir_all(&options.auth_path).unwrap(); | ||||||
|         let auth_env = open_auth_store_env(&options.auth_path).unwrap(); |         let auth_env = open_auth_store_env(&options.auth_path).unwrap(); | ||||||
|         let index_scheduler = |         let index_scheduler = | ||||||
| @@ -127,7 +130,11 @@ impl IndexScheduler { | |||||||
|         // To be 100% consistent between all test we're going to start the scheduler right now |         // To be 100% consistent between all test we're going to start the scheduler right now | ||||||
|         // and ensure it's in the expected starting state. |         // and ensure it's in the expected starting state. | ||||||
|         let breakpoint = match receiver.recv_timeout(std::time::Duration::from_secs(10)) { |         let breakpoint = match receiver.recv_timeout(std::time::Duration::from_secs(10)) { | ||||||
|  |             Ok(b) if skip_init => { | ||||||
|  |                 panic!("The scheduler was not supposed to start, but it did: {b:?}.") | ||||||
|  |             } | ||||||
|             Ok(b) => b, |             Ok(b) => b, | ||||||
|  |             Err(_) if skip_init => (Init, false), | ||||||
|             Err(RecvTimeoutError::Timeout) => { |             Err(RecvTimeoutError::Timeout) => { | ||||||
|                 panic!("The scheduler seems to be waiting for a new task while your test is waiting for a breakpoint.") |                 panic!("The scheduler seems to be waiting for a new task while your test is waiting for a breakpoint.") | ||||||
|             } |             } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user