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

MinaProtocol / mina / 2903

15 Nov 2024 01:59PM UTC coverage: 36.723% (-25.0%) from 61.682%
2903

Pull #16342

buildkite

dkijania
Merge branch 'dkijania/remove_publish_job_from_pr_comp' into dkijania/remove_publish_job_from_pr_dev
Pull Request #16342: [DEV] Publish debians only on nightly and stable

15 of 40 new or added lines in 14 files covered. (37.5%)

15175 existing lines in 340 files now uncovered.

24554 of 66863 relevant lines covered (36.72%)

20704.91 hits per line

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

1.72
/src/lib/mina_net2/validation_callback.ml
1
open Core
16✔
2
open Async
3
module Timeout = Timeout_lib.Core_time_ns
4

5
type validation_result = [ `Accept | `Reject | `Ignore ] [@@deriving equal]
×
6

7
type t =
8
  { expiration : Time_ns.t option
9
  ; created_at : Time_ns.t
10
  ; signal : validation_result Ivar.t
11
  ; mutable message_type : [ `Unknown | `Block | `Snark_work | `Transaction ]
12
  }
13

14
let create expiration =
UNCOV
15
  { expiration = Some expiration
×
UNCOV
16
  ; created_at = Time_ns.now ()
×
UNCOV
17
  ; signal = Ivar.create ()
×
18
  ; message_type = `Unknown
19
  }
20

21
let create_without_expiration () =
UNCOV
22
  { expiration = None
×
UNCOV
23
  ; created_at = Time_ns.now ()
×
UNCOV
24
  ; signal = Ivar.create ()
×
25
  ; message_type = `Unknown
26
  }
27

28
let is_expired cb =
UNCOV
29
  match cb.expiration with
×
UNCOV
30
  | None ->
×
31
      false
UNCOV
32
  | Some expires_at ->
×
UNCOV
33
      Time_ns.(now () >= expires_at)
×
34

35
module type Metric_intf = sig
36
  val validations_timed_out : Mina_metrics.Counter.t
37

38
  val rejected : Mina_metrics.Counter.t
39

40
  val ignored : Mina_metrics.Counter.t
41

42
  module Validation_time : sig
43
    val update : Time.Span.t -> unit
44
  end
45

46
  module Processing_time : sig
47
    val update : Time.Span.t -> unit
48
  end
49

50
  module Rejection_time : sig
51
    val update : Time.Span.t -> unit
52
  end
53
end
54

55
let metrics_of_message_type m : (module Metric_intf) option =
UNCOV
56
  match m with
×
UNCOV
57
  | `Unknown ->
×
58
      None
59
  | `Block ->
×
60
      Some (module Mina_metrics.Network.Block)
61
  | `Snark_work ->
×
62
      Some (module Mina_metrics.Network.Snark_work)
63
  | `Transaction ->
×
64
      Some (module Mina_metrics.Network.Transaction)
65

66
let record_timeout_metrics cb =
67
  Mina_metrics.(Counter.inc_one Network.validations_timed_out) ;
×
68
  match metrics_of_message_type cb.message_type with
69
  | None ->
×
70
      ()
71
  | Some (module M) ->
×
72
      Mina_metrics.Counter.inc_one M.validations_timed_out
73

74
let record_validation_metrics message_type (result : validation_result)
75
    validation_time processing_time =
UNCOV
76
  match metrics_of_message_type message_type with
×
UNCOV
77
  | None ->
×
78
      ()
79
  | Some (module M) -> (
×
80
      match result with
81
      | `Ignore ->
×
82
          Mina_metrics.Counter.inc_one M.ignored
83
      | `Accept ->
×
84
          M.Validation_time.update validation_time ;
85
          M.Processing_time.update processing_time
×
86
      | `Reject ->
×
87
          Mina_metrics.Counter.inc_one M.rejected ;
88
          M.Rejection_time.update processing_time )
×
89

90
let await_timeout cb =
91
  if is_expired cb then Deferred.return ()
×
92
  else
93
    match cb.expiration with
×
94
    | None ->
×
95
        Deferred.never ()
96
    | Some expires_at ->
×
97
        after
98
          ( Time_ns.Span.to_span_float_round_nearest
×
99
          @@ Time_ns.diff expires_at (Time_ns.now ()) )
×
100

101
let await cb =
102
  if is_expired cb then (record_timeout_metrics cb ; Deferred.return None)
×
103
  else
UNCOV
104
    match cb.expiration with
×
UNCOV
105
    | None ->
×
UNCOV
106
        Ivar.read cb.signal >>| Option.some
×
UNCOV
107
    | Some expires_at -> (
×
108
        match%map
UNCOV
109
          Timeout.await ()
×
UNCOV
110
            ~timeout_duration:(Time_ns.diff expires_at (Time_ns.now ()))
×
UNCOV
111
            (Ivar.read cb.signal)
×
112
        with
UNCOV
113
        | `Ok result ->
×
114
            let validation_time =
UNCOV
115
              Time_ns.abs_diff expires_at (Time_ns.now ())
×
UNCOV
116
              |> Time_ns.Span.to_ms |> Time.Span.of_ms
×
117
            in
UNCOV
118
            let processing_time =
×
UNCOV
119
              Time_ns.abs_diff (Time_ns.now ()) cb.created_at
×
UNCOV
120
              |> Time_ns.Span.to_ms |> Time.Span.of_ms
×
121
            in
UNCOV
122
            record_validation_metrics cb.message_type result validation_time
×
123
              processing_time ;
UNCOV
124
            Some result
×
125
        | `Timeout ->
×
126
            record_timeout_metrics cb ; None )
×
127

128
let await_exn cb =
129
  match%map await cb with None -> failwith "timeout" | Some result -> result
×
130

131
let fire_if_not_already_fired cb result =
UNCOV
132
  if not (is_expired cb) then
×
UNCOV
133
    if Ivar.is_full cb.signal then
×
134
      [%log' error (Logger.create ())] "Ivar.fill bug is here!"
×
UNCOV
135
    else Ivar.fill cb.signal result
×
136

UNCOV
137
let set_message_type t x = t.message_type <- x
×
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