skip to content
[readonly]

meshd's fleet member over the daemon's shared state: the fleet thread's host (status block, mailbox, catalog, driver, jobs), the reconciler's driver actions, the peer channel and link queue bridges, and the F_PERF report

sh
$ sexc add @ajax/mesh-fleetd
  • total 3
  • drwxr-xr-x-../
  • drwxr-xr-x-Oct 27 07:31v/# 1 version
  • drwxr-xr-x-Oct 27 07:31files/# the files of 0.1.0
latest
0.1.0, published Oct 27 07:31 by ajax
owners
ajax
license
MIT
dependencies
@ajax/mesh-abi ^0.1.0, @ajax/mesh-shared ^0.1.0, @ajax/mesh-chan ^0.1.0, @ajax/mesh-reply ^0.1.0, @ajax/mesh-host-block ^0.1.0, @ajax/mesh-net-counters ^0.1.0, @ajax/mesh-mailbox ^0.1.0, @ajax/mesh-views ^0.1.0, @ajax/mesh-prog-table ^0.1.0, @ajax/mesh-samplers ^0.1.0, @ajax/mesh-loader ^0.1.0, @ajax/mesh-manifest ^0.1.0, @ajax/mesh-manifest-needs ^0.1.0, @ajax/mesh-log ^0.1.0, @ajax/mesh-buf ^0.1.0, @ajax/mesh-rsfmt ^0.1.0, @ajax/mesh-mt ^0.1.0, @ajax/mesh-cluster-conf ^0.1.0, @ajax/mesh-peer-codec ^0.1.0, @ajax/mesh-peer-link ^0.1.0, @ajax/mesh-peer-relay ^0.1.1, @ajax/mesh-place-wire ^0.1.0, @ajax/mesh-reconcile ^0.1.0, @ajax/mesh-fleet-doc ^0.1.0, @ajax/mesh-fleet-edit ^0.1.0, @ajax/mesh-fleet-plan ^0.1.0, @ajax/mesh-fleet-store ^0.1.0, @ajax/mesh-fleet-persist ^0.1.0, @ajax/mesh-sched-member ^0.1.0, @ajax/mesh-sched-report ^0.1.0, @ajax/mesh-sched-place ^0.1.0, @ajax/mesh-sched-tracker ^0.1.0, @ajax/mesh-jobd ^0.1.0, @ajax/mesh-jobs-node ^0.1.0, @ajax/mesh-check ^0.1.0
dependents
@ajax/meshd
keywords
mesh alphaos fleet cluster reconcile daemon
homepage
https://github.com/thomasdavis/alpha-c-mesh/tree/main/packages/mesh-fleetd
repository
https://github.com/thomasdavis/alpha-c-mesh
==> README.md <==
1# @ajax/mesh-fleetd
2
3meshd's fleet member, wired over the daemon's shared state (`@ajax/mesh-shared`). The fleet area's
4`@ajax/mesh-peer-relay` runs the links, the election, the desired state, the leader's policies and the
5lockstep data plane, and reaches the daemon only through `mpr_host`. This package is that host, plus
6the reconciler's driver actions and the bridges between mesh_shared and the relay.
7
8- **The relay's host** (`mpr_host`):
9  - the status block, the mailbox, the lockstep feed and the round statistics are mesh_shared's
10    (`host`, `mb`, `lock_feed`, `round_of`, `rtt`, `wait`);
11  - the catalog (`catalog`, `image`) is `--programs`, read with `@ajax/mesh-loader`, as peer.rs's
12    `catalog` and `serve_image`;
13  - the driver: `inventory` (Cmd Inventory), `stop_and_view` (ProgRun off, then ViewGet), `driver_view`
14    (FleetView), and F_PLACE / F_FRAME / F_INPUT decoded into Cmd PeerPlace / PeerFrame / PeerInput;
15  - jobs and blobs go to `@ajax/mesh-jobd` (`mjd_jobs_frame`, `mjd_blobs_frame`, `mjd_set_view`,
16    `mjd_jobs_sched`); a `job ...` request becomes JobEvent::Ctl, answered straight to the control port's
17    waiter when the change came through the bridge;
18  - the texts and the fleet view's records go where the control port reads them (`fleet_text`,
19    `groups_text`, `sched_all`, `sched_dry`, `sched_explain`, `fleet_view`).
20- **The reconciler** (`@ajax/mesh-reconcile`'s thread), with reconcile.rs's timeouts (60 s an action,
21  35 s an image or a view from a member, 20 s a placement): Load, Upgrade, Unload, Rollback, ProgRun,
22  Reset, Task, Place and ViewPut through `mesh_shared_ask`. An image comes from the local catalog when
23  it is the committed one (name and hash), else from a member (`mpr_fetch_image`). Its status and
24  failures are kept for the beats (`recon`) and the F_PERF (`fails`).
25- **The bridges.**
26  - The `peer` channel: a change (the control port, the driver's run requests, the jobs thread's
27    forwarded `job` changes) becomes `mpr_change`, its answer the waiter's; a wake becomes `mpr_wake`.
28    Events wait until the relay runs, as they waited in the Rust's channel.
29  - The link queues: every linked member has a `link_out` and a `bulk_out` queue (made and dropped as
30    S_LINKED changes, so `mesh_shared_send_peer` refuses a member that is not linked), written to its
31    link with `mpr_send`, control frames before each bulk frame. A full link queue is waited on for up
32    to 2 s while the member stays linked.
33- **F_PERF** (`mesh_load_perf`, load.rs `perf_report`): this member's CPUs, RAM and disk, each loaded
34  program's measured performance from the pload records just sampled, the reconciler's failures, the
35  perf board's echoes and link RTTs; broadcast and put on the board (`mpr_board_own`).
36
37The fleet thread waits for the driver's startup loads (`sh->ready`) before it starts the relay (the
38first leader's document is what it runs). A listener that cannot be bound ends it, as the Rust's thread
39returned: the member runs alone and its changes are refused.
40
41## Using it
42
43```c
44bool skip_startup;
45mesh_fleetd *f = mesh_fleetd_open(sh, &topo, fleet_state, &skip_startup, &err); /* before the driver */
46...                                                       /* the driver with skip_startup */
47mpk_caps caps = mesh_fleetd_caps(sh, gpu_name, arch);
48mesh_fleetd_start(f, &caps);                              /* after the driver started */
49```
50
51## Ported from
52
53[alpha-rust-mesh](https://github.com/rsafier/alpha-rust-mesh) (Richard Safier, MIT),
54`crates/mesh-host/src/`:
55
56- `main.rs`: the fleet member's start (the store before anything runs, `skip_startup`, the caps).
57- `peer.rs`: `run`'s start, `writer`, the reader's direct frames to the driver and jobs, `catalog`,
58  `serve_image`, `send_view`; `peer_sched.rs`'s view-out thread.
59- `reconcile.rs`: `run`'s driver calls (`source`, `ask`, `inventory`, `fetch_view`, `quiesce`,
60  `set_group_words`, `ready`, `status`).
61- `load.rs`: `perf_report` and its frame.
62
63## Tests
64
65meshd's `tests/cluster.c` runs three whole meshds on loopback as one fleet (see apps/meshd).
66
67## Licence
68
69MIT. See the repository's LICENSE.