Organisationsmirageirmin

irmin

https://github.com/mirage/irmin
Refs Branches (9)
Move to eio
Bump ocamlformat to 0.29.0 and reformat
15f3f2
#2363
Energy consumption benchmarks
Fix deprecated QCheck functions in test_lru.ml Replace deprecated QCheck.Gen functions: - frequency -> oneof_weighted - small_int -> nat_small Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
f30e3e
#2379
Inline small contents in nodes
Formatting
57ba56
#2390
Fix qcheck-alcotest dependency in irmin-test.opam
Update irmin-test.opam Co-authored-by: zach <zachshipko@gmail.com>
78ea25
#2393
Multicore safety protect shared mutable state with mutexes and atomics
ocamlformat
320b31
#2397
Inline small contents in nodes (cleaned up)
Fix irmin-client and irmin-server for Node type changes - Add inline_contents_max_bytes to client Repo (returns 0) - Simplify Node.merge type in client (key instead of key * key list) - Simplify node_with_inlined type alias in server (key instead of key * key list) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6a552e
#2400
Add TSan nightly CI workflow
Fix formatting for TSan CI scaffolding dune @fmt / ocaml-ci's lint-fmt rejected two short match/if bindings that fit on a single line. No semantic change. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8b9bfc
#2402
Add TSan stress suite (PR B for TSan CI)
Add TSan stress suite for per-hotspot race detection Five new scenarios under test/irmin-pack/test_tsan_stress/ target mutable state hotspots that the existing multicore + QCheck-STM tests do not exercise across domains: - stress_mem_cache: races the global Hashtbl.t cache captured by Irmin_mem.Read_only.v (irmin_mem.ml:44) and the KMap mutable in the Read_only instance. - stress_watch: races the listen_dir_hook ref in watch.ml:28-29. - stress_ao_buf: races the unguarded Buffer.t in the rw_perm of Append_only_file (append_only_file.ml). - stress_dict: races the two unguarded Hashtbl.t caches plus last_refill_offset in dict.ml. - stress_fs_pool: races the shared Eio_pool instances in irmin_fs_unix.ml (mkdir_pool, openfile_pool). mem and watch produce clean TSan data-race warnings pointing at the exact hotspot; ao, dict and fs cause memory corruption fast enough that TSan fires via SEGV before it can write a detailed report — the SEGV itself is the race signal. The @tsan-stress dune alias runs each scenario in its own process via `|| true` so that a race-induced crash in one does not suppress the others. The tsan.yml workflow counts both "WARNING: ThreadSanitizer" and "ERROR: ThreadSanitizer" as findings, and includes the @tsan-stress build-dir reports in the uploaded artifact. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
914276
#2403
irmin-lwt: Lwt compatibility layer for Irmin 4
irmin-lwt: expose Make's output as a named module type S Extract the Lwt-flavoured signature produced by [Make] into a top-level [module type S] and have [Make] return a module conforming to it with explicit type and module equalities. This is the architectural piece needed by Tezos' [Tezos_context_helpers.Context.DB]: module type DB = Irmin.Generic_key.S with module Schema = Schema stops type-checking against [Irmin_lwt.Make(S)]'s result because the latter's [Repo.v] returns [t Lwt.t] instead of [t]. With this change, downstream consumers can now write module type DB = Irmin_lwt.S with module Schema = Schema and type contents = value and ... and pass an [Irmin_lwt.Make(_)] module as [DB]. The [module type S] body is mirrored between [.ml] and [.mli] (both are required — OCaml demands the module type declaration in both); the rest of the implementation is unchanged. Tree's lazy [Contents] submodule is re-exposed, and the store-level [Contents] is wrapped with Lwt-returning [of_key]/[of_hash] to match the signature. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
260e64
#2405