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
$ 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
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.