• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

MinaProtocol / mina / 767

04 Nov 2025 01:59PM UTC coverage: 32.374% (-4.5%) from 36.902%
767

push

buildkite

web-flow
Merge pull request #18063 from MinaProtocol/lyh/compat-into-dev-nov4-2025

Merge compatible into develop Nov. 4th 2025

87 of 228 new or added lines in 10 files covered. (38.16%)

3416 existing lines in 136 files now uncovered.

23591 of 72871 relevant lines covered (32.37%)

26590.67 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

20.69
/src/lib/rocksdb/database.ml
1
(* rocksdb.ml -- expose RocksDB operations for Mina *)
134✔
2
open Core_kernel
3

4
type t = { uuid : Uuid.Stable.V1.t; db : (Rocks.t[@sexp.opaque]) }
×
5
[@@deriving sexp]
6

7
let create directory =
8
  let opts = Rocks.Options.create () in
29✔
9
  Rocks.Options.set_create_if_missing opts true ;
29✔
10
  Rocks.Options.set_prefix_extractor opts
29✔
11
    (Rocks.Options.SliceTransform.Noop.create_no_gc ()) ;
29✔
12
  { uuid = Uuid_unix.create (); db = Rocks.open_db ~opts directory }
29✔
13

14
let create_checkpoint t dir =
UNCOV
15
  Rocks.checkpoint_create t.db ~dir ?log_size_for_flush:None () ;
×
UNCOV
16
  create dir
×
17

18
let make_checkpoint t dir =
19
  Rocks.checkpoint_create t.db ~dir ?log_size_for_flush:None ()
×
20

21
let get_uuid t = t.uuid
×
22

UNCOV
23
let close t = Rocks.close t.db
×
24

25
let get t ~(key : Bigstring.t) : Bigstring.t option =
26
  Rocks.get ?pos:None ?len:None ?opts:None t.db key
290,501✔
27

28
let get_batch t ~(keys : Bigstring.t list) : Bigstring.t option list =
29
  Rocks.multi_get t.db keys
5,853✔
30

31
let set t ~(key : Bigstring.t) ~(data : Bigstring.t) : unit =
UNCOV
32
  Rocks.put ?key_pos:None ?key_len:None ?value_pos:None ?value_len:None
×
33
    ?opts:None t.db key data
34

35
let[@warning "-16"] set_batch t ?(remove_keys : Bigstring.t list = [])
×
36
    ~(key_data_pairs : (Bigstring.t * Bigstring.t) list) : unit =
37
  let batch = Rocks.WriteBatch.create () in
2,342✔
38
  (* write to batch *)
39
  List.iter key_data_pairs ~f:(fun (key, data) ->
2,342✔
40
      Rocks.WriteBatch.put batch key data ) ;
356,112✔
41
  (* Delete any key pairs *)
42
  List.iter remove_keys ~f:(fun key -> Rocks.WriteBatch.delete batch key) ;
×
43
  (* commit batch *)
44
  Rocks.write t.db batch
2,342✔
45

46
module Batch = struct
47
  type t = Rocks.WriteBatch.t
48

49
  let remove t ~key = Rocks.WriteBatch.delete t key
×
50

UNCOV
51
  let set t ~key ~data = Rocks.WriteBatch.put t key data
×
52

53
  let with_batch t ~f =
UNCOV
54
    let batch = Rocks.WriteBatch.create () in
×
UNCOV
55
    let result = f batch in
×
UNCOV
56
    Rocks.write t.db batch ; result
×
57
end
58

59
let remove t ~(key : Bigstring.t) : unit =
60
  Rocks.delete ?pos:None ?len:None ?opts:None t.db key
×
61

62
let copy_bigstring t : Bigstring.t =
63
  let tlen = Bigstring.length t in
×
64
  let new_t = Bigstring.create tlen in
×
65
  Bigstring.blit ~src:t ~dst:new_t ~src_pos:0 ~dst_pos:0 ~len:tlen ;
×
66
  new_t
67

68
let to_alist t : (Bigstring.t * Bigstring.t) list =
UNCOV
69
  let iterator = Rocks.Iterator.create t.db in
×
UNCOV
70
  Rocks.Iterator.seek_to_last iterator ;
×
71
  (* iterate backwards and cons, to build list sorted by key *)
UNCOV
72
  let rec loop accum =
×
73
    if Rocks.Iterator.is_valid iterator then (
×
74
      let key = copy_bigstring (Rocks.Iterator.get_key iterator) in
×
75
      let value = copy_bigstring (Rocks.Iterator.get_value iterator) in
×
76
      Rocks.Iterator.prev iterator ;
×
77
      loop ((key, value) :: accum) )
×
UNCOV
78
    else accum
×
79
  in
80
  loop []
81

82
let foldi :
83
       t
84
    -> init:'a
85
    -> f:(int -> 'a -> key:Bigstring.t -> data:Bigstring.t -> 'a)
86
    -> 'a =
87
 fun t ~init ~f ->
88
  let iterator = Rocks.Iterator.create t.db in
×
89
  Rocks.Iterator.seek_to_first iterator ;
×
90
  let rec loop i accum =
×
91
    if Rocks.Iterator.is_valid iterator then (
×
92
      let key = copy_bigstring (Rocks.Iterator.get_key iterator) in
×
93
      let data = copy_bigstring (Rocks.Iterator.get_value iterator) in
×
94
      Rocks.Iterator.next iterator ;
×
95
      loop (i + 1) (f i accum ~key ~data) )
×
96
    else accum
×
97
  in
98
  loop 0 init
99

100
let fold_until :
101
       t
102
    -> init:'a
103
    -> f:
104
         (   'a
105
          -> key:Bigstring.t
106
          -> data:Bigstring.t
107
          -> ('a, 'b) Continue_or_stop.t )
108
    -> finish:('a -> 'b)
109
    -> 'b =
110
 fun t ~init ~f ~finish ->
111
  let iterator = Rocks.Iterator.create t.db in
×
112
  Rocks.Iterator.seek_to_first iterator ;
×
113
  let rec loop accum =
×
114
    if Rocks.Iterator.is_valid iterator then (
×
115
      let key = copy_bigstring (Rocks.Iterator.get_key iterator) in
×
116
      let data = copy_bigstring (Rocks.Iterator.get_value iterator) in
×
117
      Rocks.Iterator.next iterator ;
×
118
      match f accum ~key ~data with Stop _ -> accum | Continue v -> loop v )
×
119
    else accum
×
120
  in
121
  finish @@ loop init
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc