Skip to content
This repository was archived by the owner on Apr 4, 2023. It is now read-only.

Commit e2ae3b2

Browse files
committed
Hard or soft delete according to the deletion strategy
1 parent fc7618d commit e2ae3b2

File tree

1 file changed

+33
-27
lines changed

1 file changed

+33
-27
lines changed

milli/src/update/delete_documents.rs

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)