From 0ef0586b0d604c7111ad538318e461c9eb9f8e7e Mon Sep 17 00:00:00 2001 From: Mark Elvers Date: Wed, 26 Apr 2023 11:12:37 +0100 Subject: [PATCH] Prune one at a time up to the limit --- lib/db_store.ml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/db_store.ml b/lib/db_store.ml index 17978e33..b542e8f3 100644 --- a/lib/db_store.ml +++ b/lib/db_store.ml @@ -142,10 +142,9 @@ module Make (Raw : S.STORE) = struct in aux id - let prune_batch ?(log=ignore) t ~before limit = - let items = Dao.lru t.dao ~before limit in + let prune_lru ?(log=ignore) t ~before = + let items = Dao.lru t.dao ~before 1 in let n = List.length items in - Log.info (fun f -> f "Pruning %d items (of %d requested)" n limit); items |> Lwt_list.iter_s (fun id -> log id; Raw.delete t.raw id >|= fun () -> @@ -155,16 +154,18 @@ module Make (Raw : S.STORE) = struct Lwt.return n let prune ?log t ~before limit = + Log.info (fun f -> f "Pruning %d items" limit); let rec aux acc limit = if limit = 0 then Lwt.return acc (* Pruned everything we wanted to *) else ( - prune_batch ?log t ~before limit >>= function + prune_lru ?log t ~before >>= function | 0 -> Lwt.return acc (* Nothing left to prune *) | n -> aux (acc + n) (limit - n) ) in aux 0 limit >>= fun n -> Raw.complete_deletes t.raw >>= fun () -> + Log.info (fun f -> f "Pruned %d items" n); Lwt.return n let wrap raw =