@@ -186,33 +186,39 @@ impl<'t, 'u, 'i> DeleteDocuments<'t, 'u, 'i> {
186186
187187 soft_deleted_docids |= & self . to_delete_docids ;
188188
189- // if we have less documents to delete than the threshold we simply save them in
190- // the `soft_deleted_documents_ids` bitmap and early exit.
191- let size_used = self . index . used_size ( ) ?;
192- let map_size = self . index . env . map_size ( ) ? as u64 ;
193- let nb_documents = self . index . number_of_documents ( self . wtxn ) ?;
194- let nb_soft_deleted = soft_deleted_docids. len ( ) ;
195-
196- let percentage_available = 100 - ( size_used * 100 / map_size) ;
197- let estimated_document_size = size_used / ( nb_documents + nb_soft_deleted) ;
198- let estimated_size_used_by_soft_deleted = estimated_document_size * nb_soft_deleted;
199- let percentage_used_by_soft_deleted_documents =
200- estimated_size_used_by_soft_deleted * 100 / map_size;
201-
202- // if we have more than 10% of disk space available and the soft deleted
203- // documents uses less than 10% of the total space available,
204- // we skip the deletion. Eg.
205- // - With 100Go of disk and 20Go used including 5Go of soft-deleted documents
206- // We don’t delete anything.
207- // - With 100Go of disk and 95Go used including 1mo of soft-deleted documents
208- // We run the deletion.
209- // - With 100Go of disk and 50Go used including 15Go of soft-deleted documents
210- // We run the deletion.
211-
212- if !self . disable_soft_deletion
213- && percentage_available > 10
214- && percentage_used_by_soft_deleted_documents < 10
215- {
189+ // decide for a hard or soft deletion depending on the strategy
190+ let soft_deletion = match self . strategy {
191+ DeletionStrategy :: Dynamic => {
192+ // if we have less documents to delete than the threshold we simply save them in
193+ // the `soft_deleted_documents_ids` bitmap and early exit.
194+ let size_used = self . index . used_size ( ) ?;
195+ let map_size = self . index . env . map_size ( ) ? as u64 ;
196+ let nb_documents = self . index . number_of_documents ( self . wtxn ) ?;
197+ let nb_soft_deleted = soft_deleted_docids. len ( ) ;
198+
199+ let percentage_available = 100 - ( size_used * 100 / map_size) ;
200+ let estimated_document_size = size_used / ( nb_documents + nb_soft_deleted) ;
201+ let estimated_size_used_by_soft_deleted = estimated_document_size * nb_soft_deleted;
202+ let percentage_used_by_soft_deleted_documents =
203+ estimated_size_used_by_soft_deleted * 100 / map_size;
204+
205+ // if we have more than 10% of disk space available and the soft deleted
206+ // documents uses less than 10% of the total space available,
207+ // we skip the deletion. Eg.
208+ // - With 100Go of disk and 20Go used including 5Go of soft-deleted documents
209+ // We don’t delete anything.
210+ // - With 100Go of disk and 95Go used including 1mo of soft-deleted documents
211+ // We run the deletion.
212+ // - With 100Go of disk and 50Go used including 15Go of soft-deleted documents
213+ // We run the deletion.
214+ percentage_available > 10 && percentage_used_by_soft_deleted_documents < 10
215+ }
216+ DeletionStrategy :: AlwaysSoft => true ,
217+ DeletionStrategy :: AlwaysHard => false ,
218+ } ;
219+
220+ if soft_deletion {
221+ // Keep the soft-deleted in the DB
216222 self . index . put_soft_deleted_documents_ids ( self . wtxn , & soft_deleted_docids) ?;
217223 return Ok ( DetailedDocumentDeletionResult {
218224 deleted_documents : self . to_delete_docids . len ( ) ,
0 commit comments