mirror of
				https://github.com/meilisearch/meilisearch.git
				synced 2025-10-31 07:56:28 +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 | ||||
|     /// only once per index scheduler. | ||||
|     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(); | ||||
|         std::thread::Builder::new() | ||||
|             .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) | ||||
|         }); | ||||
|  | ||||
|         // 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(); | ||||
|         let auth_env = open_auth_store_env(&options.auth_path).unwrap(); | ||||
|         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 | ||||
|         // and ensure it's in the expected starting state. | ||||
|         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, | ||||
|             Err(_) if skip_init => (Init, false), | ||||
|             Err(RecvTimeoutError::Timeout) => { | ||||
|                 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