first write to a temporary filename, and rename later

This commit is contained in:
Hannes Mehnert 2024-11-04 17:17:37 +01:00
parent 4bec3bfbd8
commit 2312092e42

View file

@ -312,8 +312,12 @@ module Make
and sha512 = Ohex.encode Digestif.SHA512.(to_raw_string (get digests.sha512)) in
let dest = Mirage_kv.Key.v sha256 in
Logs.info (fun m -> m "downloaded %s, now writing" url);
(Lwt.finalize (fun () -> set_from_handle t.dev dest swap)
let temp = Mirage_kv.Key.(v "pending" // dest) in
Lwt_result.bind
(Lwt.finalize (fun () -> set_from_handle t.dev temp swap)
(fun () -> Swap.free swap))
(fun () -> KV.rename t.dev ~source:temp ~dest
|> Lwt_result.map_error (fun e -> `Write_error e))
>|= function
| Ok () ->
remove_active url;