Skip to content

Commit 5f2ed5d

Browse files
committed
Address feedback
Signed-off-by: Andrey Mokhov <[email protected]>
1 parent fa498e6 commit 5f2ed5d

File tree

3 files changed

+31
-32
lines changed

3 files changed

+31
-32
lines changed

src/dune_cache/trimmer.ml

+21-28
Original file line numberDiff line numberDiff line change
@@ -22,34 +22,27 @@ let trim_broken_metadata_entries ~trimmed_so_far =
2222
Layout.Versioned.file_path (Version.Metadata.file_version version)
2323
in
2424
List.fold_left metadata_entries ~init:trimmed_so_far
25-
~f:(fun trimmed_so_far path ->
25+
~f:(fun trimmed_so_far (path, rule_or_action_digest) ->
2626
let should_be_removed =
27-
match Digest.from_hex (Path.basename path) with
28-
| None ->
29-
(* Keep unrecognized entries in the cache. *)
27+
match Metadata.Versioned.restore version ~rule_or_action_digest with
28+
| Not_found_in_cache ->
29+
(* A concurrent process must have removed this metadata file. No
30+
need to try removing such "phantom" metadata files again. *)
3031
false
31-
| Some rule_or_action_digest -> (
32-
match
33-
Metadata.Versioned.restore version ~rule_or_action_digest
34-
with
35-
| Not_found_in_cache ->
36-
(* A concurrent process must have removed this metadata file. No
37-
need to try removing such "phantom" metadata files again. *)
32+
| Error _exn ->
33+
(* If a metadata file can't be restored, let's trim it. *)
34+
true
35+
| Restored metadata -> (
36+
match metadata with
37+
| Metadata.Value _ ->
38+
(* We do not expect to see any value entries in the cache. Let's
39+
keep them untrimmed for now. *)
3840
false
39-
| Error _exn ->
40-
(* If a metadata file can't be restored, let's trim it. *)
41-
true
42-
| Restored metadata -> (
43-
match metadata with
44-
| Metadata.Value _ ->
45-
(* We do not expect to see any value entries in the cache.
46-
Let's keep them untrimmed for now. *)
47-
false
48-
| Metadata.Artifacts { entries; _ } ->
49-
List.exists entries
50-
~f:(fun { Artifacts.Metadata_entry.file_digest; _ } ->
51-
let reference = file_path ~file_digest in
52-
not (Path.exists reference))))
41+
| Metadata.Artifacts { entries; _ } ->
42+
List.exists entries
43+
~f:(fun { Artifacts.Metadata_entry.file_digest; _ } ->
44+
let reference = file_path ~file_digest in
45+
not (Path.exists reference)))
5346
in
5447
match should_be_removed with
5548
| true ->
@@ -73,14 +66,14 @@ let files_in_cache_for_all_supported_versions () =
7366
let file_exists_and_is_unused ~stats = stats.Unix.st_nlink = 1
7467

7568
let trim ~goal =
76-
let files = files_in_cache_for_all_supported_versions () in
69+
let files = files_in_cache_for_all_supported_versions () |> List.map ~f:fst in
7770
let f path =
7871
let stats = Path.stat path in
7972
if file_exists_and_is_unused ~stats then
8073
Some (path, stats.st_size, stats.st_ctime)
8174
else
8275
None
83-
and compare (_, _, t1) (_, _, t2) = Ordering.of_int (Stdlib.compare t1 t2) in
76+
and compare (_, _, t1) (_, _, t2) = Poly.compare t1 t2 in
8477
let files = List.sort ~compare (List.filter_map ~f files)
8578
and delete (trimmed_so_far : Trimming_result.t) (path, bytes, _) =
8679
if trimmed_so_far.trimmed_bytes >= goal then
@@ -98,7 +91,7 @@ let trim ~goal =
9891
trim_broken_metadata_entries ~trimmed_so_far
9992

10093
let overhead_size () =
101-
let files = files_in_cache_for_all_supported_versions () in
94+
let files = files_in_cache_for_all_supported_versions () |> List.map ~f:fst in
10295
let stats =
10396
let f p =
10497
try

src/dune_cache_storage/layout.ml

+7-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,13 @@ let list_entries ~storage =
3434
Ok []
3535
| true ->
3636
let dir = storage / dir in
37-
Path.readdir_unsorted dir >>| List.map ~f:(Path.relative dir)
37+
Path.readdir_unsorted dir
38+
>>| List.filter_map ~f:(fun entry_name ->
39+
match Digest.from_hex entry_name with
40+
| None ->
41+
(* Ignore entries whose names are not hex values. *)
42+
None
43+
| Some digest -> Some (dir / entry_name, digest))
3844
in
3945
match Path.readdir_unsorted storage >>= Result.List.concat_map ~f:entries with
4046
| Ok res -> res

src/dune_cache_storage/layout.mli

+3-3
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,11 @@ module Versioned : sig
7373
(** List all metadata entries currently stored in the cache. Note that there
7474
is no guarantee that the result is up-to-date, since files can be added or
7575
removed concurrently by other processes. *)
76-
val list_metadata_entries : Version.Metadata.t -> Path.t list
76+
val list_metadata_entries : Version.Metadata.t -> (Path.t * Digest.t) list
7777

7878
(** List [list_metadata_entries] but for file entries. *)
79-
val list_file_entries : Version.File.t -> Path.t list
79+
val list_file_entries : Version.File.t -> (Path.t * Digest.t) list
8080

8181
(** List [list_metadata_entries] but for value entries. *)
82-
val list_value_entries : Version.Value.t -> Path.t list
82+
val list_value_entries : Version.Value.t -> (Path.t * Digest.t) list
8383
end

0 commit comments

Comments
 (0)