Commit 561931c
authored
Add state duration to DDM FSM (#689)
* ddm: cleanup peer tracking and add state durations
Db.peers was only used as a cache for reporting peers to ddm-api clients
calling GET /peers, and the contents of the cache were a bit misleading.
For example, there is no such thing as a peer state in DDM. DDM FSMs
have states, but they are instantiated per interface not per peer. Not
only does the state reported by GET /peers not actually map to a peer,
but it doesn't even directly map to the FSM of the peer's interface.
Instead, that state was populated by manual db updates scattered
throughout the FSM implementation. This removes Db.peers and introduces
a new shared InterfaceState struct that consolidates peer/FSM info for a
given interface. GET /peers now reads from each InterfaceState and
passes along any peers it finds along with interface state.
Also fixes a pre-existing bug in oxstats where interface names
were always empty due to reading from a stale SmContext clone.
* ddmadm: sort output of get-peers
* ddm: remove dupe peer_address, add fsm helpers
After adding PeerIdentity, the peer_address field of SessionStats is now
redundant (and also isn't a stat) so this removes it. The peer address
is tracked in PeerIdentity, so we can just rely on that field behind a
single mutex instead of locking/juggling both stats and identity.
Also adds a couple helper methods for transitioning FSM state and
updating the peer state.
* ddmadm: show fsm state duration in separate column
* cargo fmt
Signed-off-by: Trey Aspelund <trey@oxidecomputer.com>
* ddmadm: reuse mg_common::format_duration_human
Drop the local seconds-precision format_duration helper in favor of the
shared helper already used by mgadm for BGP FSM durations, so ddmadm and
mgadm display durations consistently.
Signed-off-by: Trey Aspelund <trey@oxidecomputer.com>
* ddm: add InterfaceState::set_if_info helper
Encapsulate the paired writes to if_index and if_name behind a single
method on InterfaceState so the two fields stay in sync at the one site
that updates them.
Signed-off-by: Trey Aspelund <trey@oxidecomputer.com>
* ddm: hoist if_name lock out of per-sample oximeter macros
The produce() loop locked peer.iface.if_name twelve times per peer per
scrape. Take the lock once at the top of the loop body and reuse the
cloned String for each sample.
Signed-off-by: Trey Aspelund <trey@oxidecomputer.com>
* ddm: compute peer_status before locking other iface fields
peer_status() internally locks fsm_state and last_fsm_state_change. Call
it before acquiring if_index and peer_identity in get_peers so it remains
deadlock-safe if it ever takes additional InterfaceState mutexes.
Signed-off-by: Trey Aspelund <trey@oxidecomputer.com>
---------
Signed-off-by: Trey Aspelund <trey@oxidecomputer.com>1 parent 2220683 commit 561931c
17 files changed
Lines changed: 333 additions & 74 deletions
File tree
- ddm-admin-client/src
- ddm-api-types/versions/src
- peer_durations
- ddm-api/src
- ddmadm/src
- ddmd/src
- ddm/src
- discovery
- sm
- openapi/ddm-admin
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
26 | 29 | | |
27 | 30 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | | - | |
15 | | - | |
16 | 14 | | |
17 | 15 | | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
| 35 | + | |
| 36 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| 6 | + | |
6 | 7 | | |
7 | 8 | | |
8 | 9 | | |
| |||
25 | 26 | | |
26 | 27 | | |
27 | 28 | | |
| 29 | + | |
28 | 30 | | |
29 | 31 | | |
30 | 32 | | |
| |||
44 | 46 | | |
45 | 47 | | |
46 | 48 | | |
47 | | - | |
| 49 | + | |
48 | 50 | | |
49 | 51 | | |
50 | 52 | | |
51 | 53 | | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
52 | 64 | | |
53 | 65 | | |
54 | 66 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
122 | 122 | | |
123 | 123 | | |
124 | 124 | | |
125 | | - | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
126 | 145 | | |
127 | 146 | | |
128 | 147 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| |||
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
48 | | - | |
49 | 48 | | |
50 | 49 | | |
51 | 50 | | |
| |||
65 | 64 | | |
66 | 65 | | |
67 | 66 | | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | 67 | | |
73 | 68 | | |
74 | 69 | | |
| |||
221 | 216 | | |
222 | 217 | | |
223 | 218 | | |
224 | | - | |
225 | | - | |
226 | | - | |
227 | | - | |
228 | | - | |
229 | | - | |
230 | | - | |
231 | | - | |
232 | | - | |
233 | 219 | | |
234 | 220 | | |
235 | 221 | | |
| |||
259 | 245 | | |
260 | 246 | | |
261 | 247 | | |
262 | | - | |
263 | | - | |
264 | | - | |
265 | | - | |
266 | 248 | | |
267 | 249 | | |
268 | 250 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
12 | | - | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
13 | 14 | | |
14 | | - | |
| 15 | + | |
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
| |||
80 | 81 | | |
81 | 82 | | |
82 | 83 | | |
83 | | - | |
| 84 | + | |
84 | 85 | | |
85 | 86 | | |
86 | 87 | | |
| |||
94 | 95 | | |
95 | 96 | | |
96 | 97 | | |
97 | | - | |
| 98 | + | |
98 | 99 | | |
99 | 100 | | |
100 | 101 | | |
| |||
134 | 135 | | |
135 | 136 | | |
136 | 137 | | |
137 | | - | |
| 138 | + | |
138 | 139 | | |
139 | 140 | | |
140 | 141 | | |
| |||
426 | 427 | | |
427 | 428 | | |
428 | 429 | | |
429 | | - | |
430 | | - | |
431 | | - | |
432 | | - | |
433 | | - | |
434 | | - | |
435 | | - | |
436 | | - | |
437 | | - | |
438 | | - | |
439 | | - | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
440 | 439 | | |
441 | 440 | | |
442 | 441 | | |
| |||
0 commit comments