mirror of
				https://github.com/meilisearch/meilisearch.git
				synced 2025-10-30 23:46:28 +00:00 
			
		
		
		
	Merge #5109
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				Test suite / Tests on ${{ matrix.os }} (macos-13) (push) Waiting to run
				
					
					
				
			
		
			
				
	
				Test suite / Tests almost all features (push) Has been skipped
				
					
					
				
			
		
			
				
	
				Test suite / Test disabled tokenization (push) Has been skipped
				
					
					
				
			
		
			
				
	
				Test suite / Tests on ubuntu-20.04 (push) Failing after 11s
				
					
					
				
			
		
			
				
	
				Test suite / Run tests in debug (push) Failing after 11s
				
					
					
				
			
		
			
				
	
				Test suite / Tests on ${{ matrix.os }} (windows-2022) (push) Failing after 24s
				
					
					
				
			
		
			
				
	
				Test suite / Run Rustfmt (push) Successful in 1m22s
				
					
					
				
			
		
			
				
	
				Test suite / Run Clippy (push) Successful in 6m29s
				
					
					
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	Test suite / Tests on ${{ matrix.os }} (macos-13) (push) Waiting to run
				Test suite / Tests almost all features (push) Has been skipped
				Test suite / Test disabled tokenization (push) Has been skipped
				Test suite / Tests on ubuntu-20.04 (push) Failing after 11s
				Test suite / Run tests in debug (push) Failing after 11s
				Test suite / Tests on ${{ matrix.os }} (windows-2022) (push) Failing after 24s
				Test suite / Run Rustfmt (push) Successful in 1m22s
				Test suite / Run Clippy (push) Successful in 6m29s
				5109: Fix autobatch r=dureuill a=dureuill Fixes most SDK tests and flaky failures Changes: - Make sure that the settings are not autobatched with document operations, as the new indexer no longer supports this operating mode Co-authored-by: Louis Dureuil <louis@meilisearch.com>
This commit is contained in:
		| @@ -115,13 +115,6 @@ pub enum BatchKind { | ||||
|         allow_index_creation: bool, | ||||
|         settings_ids: Vec<TaskId>, | ||||
|     }, | ||||
|     SettingsAndDocumentOperation { | ||||
|         settings_ids: Vec<TaskId>, | ||||
|         method: IndexDocumentsMethod, | ||||
|         allow_index_creation: bool, | ||||
|         primary_key: Option<String>, | ||||
|         operation_ids: Vec<TaskId>, | ||||
|     }, | ||||
|     Settings { | ||||
|         allow_index_creation: bool, | ||||
|         settings_ids: Vec<TaskId>, | ||||
| @@ -146,7 +139,6 @@ impl BatchKind { | ||||
|         match self { | ||||
|             BatchKind::DocumentOperation { allow_index_creation, .. } | ||||
|             | BatchKind::ClearAndSettings { allow_index_creation, .. } | ||||
|             | BatchKind::SettingsAndDocumentOperation { allow_index_creation, .. } | ||||
|             | BatchKind::Settings { allow_index_creation, .. } => Some(*allow_index_creation), | ||||
|             _ => None, | ||||
|         } | ||||
| @@ -154,10 +146,7 @@ impl BatchKind { | ||||
|  | ||||
|     fn primary_key(&self) -> Option<Option<&str>> { | ||||
|         match self { | ||||
|             BatchKind::DocumentOperation { primary_key, .. } | ||||
|             | BatchKind::SettingsAndDocumentOperation { primary_key, .. } => { | ||||
|                 Some(primary_key.as_deref()) | ||||
|             } | ||||
|             BatchKind::DocumentOperation { primary_key, .. } => Some(primary_key.as_deref()), | ||||
|             _ => None, | ||||
|         } | ||||
|     } | ||||
| @@ -275,8 +264,7 @@ impl BatchKind { | ||||
|                 Break(BatchKind::IndexDeletion { ids }) | ||||
|             } | ||||
|             ( | ||||
|                 BatchKind::ClearAndSettings { settings_ids: mut ids, allow_index_creation: _, mut other } | ||||
|                 | BatchKind::SettingsAndDocumentOperation { operation_ids: mut ids, method: _, allow_index_creation: _, primary_key: _, settings_ids: mut other }, | ||||
|                 BatchKind::ClearAndSettings { settings_ids: mut ids, allow_index_creation: _, mut other }, | ||||
|                 K::IndexDeletion, | ||||
|             ) => { | ||||
|                 ids.push(id); | ||||
| @@ -356,15 +344,9 @@ impl BatchKind { | ||||
|             ) => Break(this), | ||||
|  | ||||
|             ( | ||||
|                 BatchKind::DocumentOperation { method, allow_index_creation, primary_key, operation_ids }, | ||||
|                 this @ BatchKind::DocumentOperation { .. }, | ||||
|                 K::Settings { .. }, | ||||
|             ) => Continue(BatchKind::SettingsAndDocumentOperation { | ||||
|                 settings_ids: vec![id], | ||||
|                 method, | ||||
|                 allow_index_creation, | ||||
|                 primary_key, | ||||
|                 operation_ids, | ||||
|             }), | ||||
|             ) => Break(this), | ||||
|  | ||||
|             (BatchKind::DocumentDeletion { mut deletion_ids, includes_by_filter: _ }, K::DocumentClear) => { | ||||
|                 deletion_ids.push(id); | ||||
| @@ -477,63 +459,7 @@ impl BatchKind { | ||||
|                     allow_index_creation, | ||||
|                 }) | ||||
|             } | ||||
|             ( | ||||
|                 BatchKind::SettingsAndDocumentOperation { settings_ids, method: _, mut operation_ids, allow_index_creation, primary_key: _ }, | ||||
|                 K::DocumentClear, | ||||
|             ) => { | ||||
|                 operation_ids.push(id); | ||||
|                 Continue(BatchKind::ClearAndSettings { | ||||
|                     settings_ids, | ||||
|                     other: operation_ids, | ||||
|                     allow_index_creation, | ||||
|                 }) | ||||
|             } | ||||
|  | ||||
|             ( | ||||
|                 BatchKind::SettingsAndDocumentOperation { settings_ids, method: ReplaceDocuments, mut operation_ids, allow_index_creation, primary_key: _}, | ||||
|                 K::DocumentImport { method: ReplaceDocuments, primary_key: pk2, .. }, | ||||
|             ) => { | ||||
|                 operation_ids.push(id); | ||||
|                 Continue(BatchKind::SettingsAndDocumentOperation { | ||||
|                     settings_ids, | ||||
|                     method: ReplaceDocuments, | ||||
|                     allow_index_creation, | ||||
|                         primary_key: pk2, | ||||
|                     operation_ids, | ||||
|                 }) | ||||
|             } | ||||
|             ( | ||||
|                 BatchKind::SettingsAndDocumentOperation { settings_ids, method: UpdateDocuments, allow_index_creation, primary_key: _, mut operation_ids }, | ||||
|                 K::DocumentImport { method: UpdateDocuments, primary_key: pk2, .. }, | ||||
|             ) => { | ||||
|                 operation_ids.push(id); | ||||
|                 Continue(BatchKind::SettingsAndDocumentOperation { | ||||
|                     settings_ids, | ||||
|                     method: UpdateDocuments, | ||||
|                     allow_index_creation, | ||||
|                     primary_key: pk2, | ||||
|                     operation_ids, | ||||
|                 }) | ||||
|             } | ||||
|             // But we can't batch a settings and a doc op with another doc op | ||||
|             // this MUST be AFTER the two previous branch | ||||
|             ( | ||||
|                 this @ BatchKind::SettingsAndDocumentOperation { .. }, | ||||
|                 K::DocumentDeletion { .. } | K::DocumentImport { .. }, | ||||
|             ) => Break(this), | ||||
|             ( | ||||
|                 BatchKind::SettingsAndDocumentOperation { mut settings_ids, method, allow_index_creation,primary_key, operation_ids }, | ||||
|                 K::Settings { .. }, | ||||
|             ) => { | ||||
|                 settings_ids.push(id); | ||||
|                 Continue(BatchKind::SettingsAndDocumentOperation { | ||||
|                     settings_ids, | ||||
|                     method, | ||||
|                     allow_index_creation, | ||||
|                     primary_key, | ||||
|                     operation_ids, | ||||
|                 }) | ||||
|             } | ||||
|             ( | ||||
|                 BatchKind::IndexCreation { .. } | ||||
|                 | BatchKind::IndexDeletion { .. } | ||||
| @@ -808,30 +734,30 @@ mod tests { | ||||
|     } | ||||
|  | ||||
|     #[test] | ||||
|     fn document_addition_batch_with_settings() { | ||||
|     fn document_addition_doesnt_batch_with_settings() { | ||||
|         // simple case | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true)]), @"Some((SettingsAndDocumentOperation { settings_ids: [1], method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(true)]), @"Some((SettingsAndDocumentOperation { settings_ids: [1], method: UpdateDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true)]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(true)]), @"Some((DocumentOperation { method: UpdateDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|  | ||||
|         // multiple settings and doc addition | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), doc_imp(ReplaceDocuments, true, None), settings(true), settings(true)]), @"Some((SettingsAndDocumentOperation { settings_ids: [2, 3], method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0, 1] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), doc_imp(ReplaceDocuments, true, None), settings(true), settings(true)]), @"Some((SettingsAndDocumentOperation { settings_ids: [2, 3], method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0, 1] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), doc_imp(ReplaceDocuments, true, None), settings(true), settings(true)]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0, 1] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), doc_imp(ReplaceDocuments, true, None), settings(true), settings(true)]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0, 1] }, true))"); | ||||
|  | ||||
|         // addition and setting unordered | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true), doc_imp(ReplaceDocuments, true, None), settings(true)]), @"Some((SettingsAndDocumentOperation { settings_ids: [1, 3], method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0, 2] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(true), doc_imp(UpdateDocuments, true, None), settings(true)]), @"Some((SettingsAndDocumentOperation { settings_ids: [1, 3], method: UpdateDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0, 2] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true), doc_imp(ReplaceDocuments, true, None), settings(true)]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(true), doc_imp(UpdateDocuments, true, None), settings(true)]), @"Some((DocumentOperation { method: UpdateDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|  | ||||
|         // We ensure this kind of batch doesn't batch with forbidden operations | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true), doc_imp(UpdateDocuments, true, None)]), @"Some((SettingsAndDocumentOperation { settings_ids: [1], method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(true), doc_imp(ReplaceDocuments, true, None)]), @"Some((SettingsAndDocumentOperation { settings_ids: [1], method: UpdateDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true), doc_del()]), @"Some((SettingsAndDocumentOperation { settings_ids: [1], method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(true), doc_del()]), @"Some((SettingsAndDocumentOperation { settings_ids: [1], method: UpdateDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true), idx_create()]), @"Some((SettingsAndDocumentOperation { settings_ids: [1], method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(true), idx_create()]), @"Some((SettingsAndDocumentOperation { settings_ids: [1], method: UpdateDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true), idx_update()]), @"Some((SettingsAndDocumentOperation { settings_ids: [1], method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(true), idx_update()]), @"Some((SettingsAndDocumentOperation { settings_ids: [1], method: UpdateDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true), idx_swap()]), @"Some((SettingsAndDocumentOperation { settings_ids: [1], method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(true), idx_swap()]), @"Some((SettingsAndDocumentOperation { settings_ids: [1], method: UpdateDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         // Doesn't batch with other forbidden operations | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true), doc_imp(UpdateDocuments, true, None)]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(true), doc_imp(ReplaceDocuments, true, None)]), @"Some((DocumentOperation { method: UpdateDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true), doc_del()]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(true), doc_del()]), @"Some((DocumentOperation { method: UpdateDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true), idx_create()]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(true), idx_create()]), @"Some((DocumentOperation { method: UpdateDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true), idx_update()]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(true), idx_update()]), @"Some((DocumentOperation { method: UpdateDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true), idx_swap()]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(true), idx_swap()]), @"Some((DocumentOperation { method: UpdateDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|     } | ||||
|  | ||||
|     #[test] | ||||
| @@ -859,8 +785,8 @@ mod tests { | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_clr(), settings(true)]), @"Some((DocumentClear { ids: [0] }, false))"); | ||||
|  | ||||
|         debug_snapshot!(autobatch_from(true, None, [settings(true), doc_clr(), settings(true)]), @"Some((ClearAndSettings { other: [1], allow_index_creation: true, settings_ids: [0, 2] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true), doc_clr()]), @"Some((ClearAndSettings { other: [0, 2], allow_index_creation: true, settings_ids: [1] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(true), doc_clr()]), @"Some((ClearAndSettings { other: [0, 2], allow_index_creation: true, settings_ids: [1] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true), doc_clr()]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(true), doc_clr()]), @"Some((DocumentOperation { method: UpdateDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|     } | ||||
|  | ||||
|     #[test] | ||||
| @@ -907,50 +833,6 @@ mod tests { | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_clr(), idx_del()]), @"Some((IndexDeletion { ids: [0, 1] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [settings(true), idx_del()]), @"Some((IndexDeletion { ids: [0, 1] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [settings(false), idx_del()]), @"Some((IndexDeletion { ids: [0, 1] }, false))"); | ||||
|  | ||||
|         // Then the mixed cases. | ||||
|         // The index already exists, whatever is the right of the tasks it shouldn't change the result. | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true), idx_del()]), @"Some((IndexDeletion { ids: [0, 2, 1] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(true), idx_del()]), @"Some((IndexDeletion { ids: [0, 2, 1] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true), doc_clr(), idx_del()]), @"Some((IndexDeletion { ids: [1, 3, 0, 2] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(true), doc_clr(), idx_del()]), @"Some((IndexDeletion { ids: [1, 3, 0, 2] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments,false, None), settings(false), idx_del()]), @"Some((IndexDeletion { ids: [0, 2, 1] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, false, None), settings(false), idx_del()]), @"Some((IndexDeletion { ids: [0, 2, 1] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments,false, None), settings(false), doc_clr(), idx_del()]), @"Some((IndexDeletion { ids: [1, 3, 0, 2] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, false, None), settings(false), doc_clr(), idx_del()]), @"Some((IndexDeletion { ids: [1, 3, 0, 2] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments,false, None), settings(true), idx_del()]), @"Some((IndexDeletion { ids: [0, 2, 1] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, false, None), settings(true), idx_del()]), @"Some((IndexDeletion { ids: [0, 2, 1] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments,false, None), settings(true), doc_clr(), idx_del()]), @"Some((IndexDeletion { ids: [1, 3, 0, 2] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, false, None), settings(true), doc_clr(), idx_del()]), @"Some((IndexDeletion { ids: [1, 3, 0, 2] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments,true, None), settings(false), idx_del()]), @"Some((IndexDeletion { ids: [0, 2, 1] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(false), idx_del()]), @"Some((IndexDeletion { ids: [0, 2, 1] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments,true, None), settings(false), doc_clr(), idx_del()]), @"Some((IndexDeletion { ids: [1, 3, 0, 2] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(UpdateDocuments, true, None), settings(false), doc_clr(), idx_del()]), @"Some((IndexDeletion { ids: [1, 3, 0, 2] }, true))"); | ||||
|  | ||||
|         // When the index doesn't exists yet it's more complicated. | ||||
|         // Either the first task we encounter create it, in which case we can create a big batch with everything. | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(ReplaceDocuments, true, None), settings(true), idx_del()]), @"Some((IndexDeletion { ids: [0, 2, 1] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(UpdateDocuments, true, None), settings(true), idx_del()]), @"Some((IndexDeletion { ids: [0, 2, 1] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(ReplaceDocuments, true, None), settings(true), doc_clr(), idx_del()]), @"Some((IndexDeletion { ids: [1, 3, 0, 2] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(UpdateDocuments, true, None), settings(true), doc_clr(), idx_del()]), @"Some((IndexDeletion { ids: [1, 3, 0, 2] }, true))"); | ||||
|         // The right of the tasks following isn't really important. | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(ReplaceDocuments,true, None), settings(false), idx_del()]), @"Some((IndexDeletion { ids: [0, 2, 1] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(UpdateDocuments, true, None), settings(false), idx_del()]), @"Some((IndexDeletion { ids: [0, 2, 1] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(ReplaceDocuments,true, None), settings(false), doc_clr(), idx_del()]), @"Some((IndexDeletion { ids: [1, 3, 0, 2] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(UpdateDocuments, true, None), settings(false), doc_clr(), idx_del()]), @"Some((IndexDeletion { ids: [1, 3, 0, 2] }, true))"); | ||||
|         // Or, the second case; the first task doesn't create the index and thus we wants to batch it with only tasks that can't create an index. | ||||
|         // that can be a second task that don't have the right to create an index. Or anything that can't create an index like an index deletion, document deletion, document clear, etc. | ||||
|         // All theses tasks are going to throw an error `Index doesn't exist` once the batch is processed. | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(ReplaceDocuments,false, None), settings(false), idx_del()]), @"Some((IndexDeletion { ids: [0, 2, 1] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(UpdateDocuments, false, None), settings(false), idx_del()]), @"Some((IndexDeletion { ids: [0, 2, 1] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(ReplaceDocuments,false, None), settings(false), doc_clr(), idx_del()]), @"Some((IndexDeletion { ids: [1, 3, 0, 2] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(UpdateDocuments, false, None), settings(false), doc_clr(), idx_del()]), @"Some((IndexDeletion { ids: [1, 3, 0, 2] }, false))"); | ||||
|         // The third and final case is when the first task doesn't create an index but is directly followed by a task creating an index. In this case we can't batch whit what | ||||
|         // follows because we first need to process the erronous batch. | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(ReplaceDocuments,false, None), settings(true), idx_del()]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: false, primary_key: None, operation_ids: [0] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(UpdateDocuments, false, None), settings(true), idx_del()]), @"Some((DocumentOperation { method: UpdateDocuments, allow_index_creation: false, primary_key: None, operation_ids: [0] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(ReplaceDocuments,false, None), settings(true), doc_clr(), idx_del()]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: false, primary_key: None, operation_ids: [0] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(UpdateDocuments, false, None), settings(true), doc_clr(), idx_del()]), @"Some((DocumentOperation { method: UpdateDocuments, allow_index_creation: false, primary_key: None, operation_ids: [0] }, false))"); | ||||
|     } | ||||
|  | ||||
|     #[test] | ||||
| @@ -959,13 +841,13 @@ mod tests { | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, false, None), doc_imp(ReplaceDocuments, true, None)]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: false, primary_key: None, operation_ids: [0, 1] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), doc_imp(ReplaceDocuments, true, None)]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0, 1] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, false, None), doc_imp(ReplaceDocuments, false, None)]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: false, primary_key: None, operation_ids: [0, 1] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true)]), @"Some((SettingsAndDocumentOperation { settings_ids: [1], method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, false, None), settings(true)]), @"Some((SettingsAndDocumentOperation { settings_ids: [1], method: ReplaceDocuments, allow_index_creation: false, primary_key: None, operation_ids: [0] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, true, None), settings(true)]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(true, None, [doc_imp(ReplaceDocuments, false, None), settings(true)]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: false, primary_key: None, operation_ids: [0] }, false))"); | ||||
|  | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(ReplaceDocuments, false, None), doc_imp(ReplaceDocuments, true, None)]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: false, primary_key: None, operation_ids: [0] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(ReplaceDocuments, true, None), doc_imp(ReplaceDocuments, true, None)]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0, 1] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(ReplaceDocuments, false, None), doc_imp(ReplaceDocuments, false, None)]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: false, primary_key: None, operation_ids: [0, 1] }, false))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(ReplaceDocuments, true, None), settings(true)]), @"Some((SettingsAndDocumentOperation { settings_ids: [1], method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(ReplaceDocuments, true, None), settings(true)]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: true, primary_key: None, operation_ids: [0] }, true))"); | ||||
|         debug_snapshot!(autobatch_from(false,None,  [doc_imp(ReplaceDocuments, false, None), settings(true)]), @"Some((DocumentOperation { method: ReplaceDocuments, allow_index_creation: false, primary_key: None, operation_ids: [0] }, false))"); | ||||
|  | ||||
|         // batch deletion and addition | ||||
|   | ||||
| @@ -104,7 +104,6 @@ pub(crate) enum IndexOperation { | ||||
|         index_uid: String, | ||||
|         primary_key: Option<String>, | ||||
|         method: IndexDocumentsMethod, | ||||
|         documents_counts: Vec<u64>, | ||||
|         operations: Vec<DocumentOperation>, | ||||
|         tasks: Vec<Task>, | ||||
|     }, | ||||
| @@ -130,19 +129,6 @@ pub(crate) enum IndexOperation { | ||||
|         index_uid: String, | ||||
|         cleared_tasks: Vec<Task>, | ||||
|  | ||||
|         // The boolean indicates if it's a settings deletion or creation. | ||||
|         settings: Vec<(bool, Settings<Unchecked>)>, | ||||
|         settings_tasks: Vec<Task>, | ||||
|     }, | ||||
|     SettingsAndDocumentOperation { | ||||
|         index_uid: String, | ||||
|  | ||||
|         primary_key: Option<String>, | ||||
|         method: IndexDocumentsMethod, | ||||
|         documents_counts: Vec<u64>, | ||||
|         operations: Vec<DocumentOperation>, | ||||
|         document_import_tasks: Vec<Task>, | ||||
|  | ||||
|         // The boolean indicates if it's a settings deletion or creation. | ||||
|         settings: Vec<(bool, Settings<Unchecked>)>, | ||||
|         settings_tasks: Vec<Task>, | ||||
| @@ -174,12 +160,7 @@ impl Batch { | ||||
|                 IndexOperation::DocumentEdition { task, .. } => { | ||||
|                     RoaringBitmap::from_sorted_iter(std::iter::once(task.uid)).unwrap() | ||||
|                 } | ||||
|                 IndexOperation::SettingsAndDocumentOperation { | ||||
|                     document_import_tasks: tasks, | ||||
|                     settings_tasks: other, | ||||
|                     .. | ||||
|                 } | ||||
|                 | IndexOperation::DocumentClearAndSetting { | ||||
|                 IndexOperation::DocumentClearAndSetting { | ||||
|                     cleared_tasks: tasks, | ||||
|                     settings_tasks: other, | ||||
|                     .. | ||||
| @@ -239,8 +220,7 @@ impl IndexOperation { | ||||
|             | IndexOperation::DocumentDeletion { index_uid, .. } | ||||
|             | IndexOperation::DocumentClear { index_uid, .. } | ||||
|             | IndexOperation::Settings { index_uid, .. } | ||||
|             | IndexOperation::DocumentClearAndSetting { index_uid, .. } | ||||
|             | IndexOperation::SettingsAndDocumentOperation { index_uid, .. } => index_uid, | ||||
|             | IndexOperation::DocumentClearAndSetting { index_uid, .. } => index_uid, | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -262,9 +242,6 @@ impl fmt::Display for IndexOperation { | ||||
|             IndexOperation::DocumentClearAndSetting { .. } => { | ||||
|                 f.write_str("IndexOperation::DocumentClearAndSetting") | ||||
|             } | ||||
|             IndexOperation::SettingsAndDocumentOperation { .. } => { | ||||
|                 f.write_str("IndexOperation::SettingsAndDocumentOperation") | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -330,21 +307,14 @@ impl IndexScheduler { | ||||
|                     }) | ||||
|                     .flatten(); | ||||
|  | ||||
|                 let mut documents_counts = Vec::new(); | ||||
|                 let mut operations = Vec::new(); | ||||
|  | ||||
|                 for task in tasks.iter() { | ||||
|                     match task.kind { | ||||
|                         KindWithContent::DocumentAdditionOrUpdate { | ||||
|                             content_file, | ||||
|                             documents_count, | ||||
|                             .. | ||||
|                         } => { | ||||
|                             documents_counts.push(documents_count); | ||||
|                         KindWithContent::DocumentAdditionOrUpdate { content_file, .. } => { | ||||
|                             operations.push(DocumentOperation::Add(content_file)); | ||||
|                         } | ||||
|                         KindWithContent::DocumentDeletion { ref documents_ids, .. } => { | ||||
|                             documents_counts.push(documents_ids.len() as u64); | ||||
|                             operations.push(DocumentOperation::Delete(documents_ids.clone())); | ||||
|                         } | ||||
|                         _ => unreachable!(), | ||||
| @@ -356,7 +326,6 @@ impl IndexScheduler { | ||||
|                         index_uid, | ||||
|                         primary_key, | ||||
|                         method, | ||||
|                         documents_counts, | ||||
|                         operations, | ||||
|                         tasks, | ||||
|                     }, | ||||
| @@ -441,67 +410,6 @@ impl IndexScheduler { | ||||
|                     must_create_index, | ||||
|                 })) | ||||
|             } | ||||
|             BatchKind::SettingsAndDocumentOperation { | ||||
|                 settings_ids, | ||||
|                 method, | ||||
|                 allow_index_creation, | ||||
|                 primary_key, | ||||
|                 operation_ids, | ||||
|             } => { | ||||
|                 let settings = self.create_next_batch_index( | ||||
|                     rtxn, | ||||
|                     index_uid.clone(), | ||||
|                     BatchKind::Settings { settings_ids, allow_index_creation }, | ||||
|                     current_batch, | ||||
|                     must_create_index, | ||||
|                 )?; | ||||
|  | ||||
|                 let document_import = self.create_next_batch_index( | ||||
|                     rtxn, | ||||
|                     index_uid.clone(), | ||||
|                     BatchKind::DocumentOperation { | ||||
|                         method, | ||||
|                         allow_index_creation, | ||||
|                         primary_key, | ||||
|                         operation_ids, | ||||
|                     }, | ||||
|                     current_batch, | ||||
|                     must_create_index, | ||||
|                 )?; | ||||
|  | ||||
|                 match (document_import, settings) { | ||||
|                     ( | ||||
|                         Some(Batch::IndexOperation { | ||||
|                             op: | ||||
|                                 IndexOperation::DocumentOperation { | ||||
|                                     primary_key, | ||||
|                                     documents_counts, | ||||
|                                     operations, | ||||
|                                     tasks: document_import_tasks, | ||||
|                                     .. | ||||
|                                 }, | ||||
|                             .. | ||||
|                         }), | ||||
|                         Some(Batch::IndexOperation { | ||||
|                             op: IndexOperation::Settings { settings, tasks: settings_tasks, .. }, | ||||
|                             .. | ||||
|                         }), | ||||
|                     ) => Ok(Some(Batch::IndexOperation { | ||||
|                         op: IndexOperation::SettingsAndDocumentOperation { | ||||
|                             index_uid, | ||||
|                             primary_key, | ||||
|                             method, | ||||
|                             documents_counts, | ||||
|                             operations, | ||||
|                             document_import_tasks, | ||||
|                             settings, | ||||
|                             settings_tasks, | ||||
|                         }, | ||||
|                         must_create_index, | ||||
|                     })), | ||||
|                     _ => unreachable!(), | ||||
|                 } | ||||
|             } | ||||
|             BatchKind::IndexCreation { id } => { | ||||
|                 let mut task = self.get_task(rtxn, id)?.ok_or(Error::CorruptedTaskQueue)?; | ||||
|                 current_batch.processing(Some(&mut task)); | ||||
| @@ -1304,7 +1212,6 @@ impl IndexScheduler { | ||||
|                 index_uid: _, | ||||
|                 primary_key, | ||||
|                 method, | ||||
|                 documents_counts: _, | ||||
|                 operations, | ||||
|                 mut tasks, | ||||
|             } => { | ||||
| @@ -1694,43 +1601,6 @@ impl IndexScheduler { | ||||
|  | ||||
|                 Ok(tasks) | ||||
|             } | ||||
|             IndexOperation::SettingsAndDocumentOperation { | ||||
|                 index_uid, | ||||
|                 primary_key, | ||||
|                 method, | ||||
|                 documents_counts, | ||||
|                 operations, | ||||
|                 document_import_tasks, | ||||
|                 settings, | ||||
|                 settings_tasks, | ||||
|             } => { | ||||
|                 let settings_tasks = self.apply_index_operation( | ||||
|                     index_wtxn, | ||||
|                     index, | ||||
|                     IndexOperation::Settings { | ||||
|                         index_uid: index_uid.clone(), | ||||
|                         settings, | ||||
|                         tasks: settings_tasks, | ||||
|                     }, | ||||
|                 )?; | ||||
|  | ||||
|                 let mut import_tasks = self.apply_index_operation( | ||||
|                     index_wtxn, | ||||
|                     index, | ||||
|                     IndexOperation::DocumentOperation { | ||||
|                         index_uid, | ||||
|                         primary_key, | ||||
|                         method, | ||||
|                         documents_counts, | ||||
|                         operations, | ||||
|                         tasks: document_import_tasks, | ||||
|                     }, | ||||
|                 )?; | ||||
|  | ||||
|                 let mut tasks = settings_tasks; | ||||
|                 tasks.append(&mut import_tasks); | ||||
|                 Ok(tasks) | ||||
|             } | ||||
|             IndexOperation::DocumentClearAndSetting { | ||||
|                 index_uid, | ||||
|                 cleared_tasks, | ||||
|   | ||||
| @@ -106,7 +106,7 @@ impl ProcessingBatch { | ||||
|         self.stats.total_nb_tasks = 0; | ||||
|     } | ||||
|  | ||||
|     /// Update the timestamp of the tasks and the inner structure of this sturcture. | ||||
|     /// Update the timestamp of the tasks and the inner structure of this structure. | ||||
|     pub fn update(&mut self, task: &mut Task) { | ||||
|         // We must re-set this value in case we're dealing with a task that has been added between | ||||
|         // the `processing` and `finished` state | ||||
|   | ||||
		Reference in New Issue
	
	Block a user