Try to remove files before marking for deletion
You know, it might just work...
This commit is contained in:
parent
1a6c6b8f9d
commit
8c7e71127f
1 changed files with 19 additions and 7 deletions
|
@ -465,14 +465,26 @@ module Make
|
||||||
Ok ()
|
Ok ()
|
||||||
| Error e -> Error (`Write_error e)
|
| Error e -> Error (`Write_error e)
|
||||||
else
|
else
|
||||||
let dest = to_delete_key (hash, csum) in
|
(* if the checksums mismatch we want to delete the file. We are only
|
||||||
(* if the checksums mismatch we need to mark the file for deletion *)
|
able to do so if it was the latest created file, so we expect and
|
||||||
KV.rename t.dev ~source ~dest >|= function
|
error. Ideally, we want to match for `Append_only or other errors *)
|
||||||
| Ok () -> Error (`Bad_checksum (hash, csum))
|
KV.remove t.dev source >>= function
|
||||||
|
| Ok () ->
|
||||||
|
Logs.info (fun m -> m "Removed %a" Mirage_kv.Key.pp source);
|
||||||
|
Lwt_result.fail (`Bad_checksum (hash, csum))
|
||||||
| Error e ->
|
| Error e ->
|
||||||
Logs.warn (fun m -> m "Error renaming file %a -> %a: %a"
|
Logs.debug (fun m -> m "Failed to remove %a: %a"
|
||||||
Mirage_kv.Key.pp source Mirage_kv.Key.pp dest KV.pp_write_error e);
|
Mirage_kv.Key.pp source KV.pp_write_error e);
|
||||||
Error (`Bad_checksum (hash, csum))
|
(* we failed to delete the file so we mark it for deletion *)
|
||||||
|
let dest = to_delete_key (hash, csum) in
|
||||||
|
Logs.warn (fun m -> m "Failed to remove %a: %a. Moving it to %a"
|
||||||
|
Mirage_kv.Key.pp source KV.pp_write_error e Mirage_kv.Key.pp dest);
|
||||||
|
KV.rename t.dev ~source ~dest >|= function
|
||||||
|
| Ok () -> Error (`Bad_checksum (hash, csum))
|
||||||
|
| Error e ->
|
||||||
|
Logs.warn (fun m -> m "Error renaming file %a -> %a: %a"
|
||||||
|
Mirage_kv.Key.pp source Mirage_kv.Key.pp dest KV.pp_write_error e);
|
||||||
|
Error (`Bad_checksum (hash, csum))
|
||||||
|
|
||||||
|
|
||||||
(* on disk, we use a flat file system where the filename is the sha256 of the data *)
|
(* on disk, we use a flat file system where the filename is the sha256 of the data *)
|
||||||
|
|
Loading…
Reference in a new issue