1/* @ajax/mesh-fleet-groups: a lockstep group's epochs (fleet.rs leader policies). A new epoch (a
2 * resume after a pause, a reform, a reset, the first load) resets the program on every member
3 * (rounds restart at 1); a cycle within an epoch (upgrade, rollback, task) keeps the step. */
4#ifndef MESH_FLEET_GROUPS_H
5#define MESH_FLEET_GROUPS_H
67#include "mesh/fleet_doc.h"
89#include <stdbool.h>
10#include <stdint.h>
1112/* The group's next epoch over members (reset, running). Takes members. */
13void mfg_new_epoch(mfd_group *g, ml_list members);
14/* A membership decision for the up set (members heard within dead_ms): true with *out the new group
15 * when the document should change.
16 * - running, a member missing: paused (both policies);
17 * - paused, every member back: a new epoch over the same members (reset);
18 * - paused for auto_ms with on_loss = reform: a new epoch over the survivors.
19 * paused_ms < 0: not known. */
20bool mfg_policy(const mfd_group *g, uint32_t up, int64_t paused_ms, mfd_group *out);
21/* `group <name> reform`: a new epoch over every up member that can run it, in system order. */
22bool mfg_reform(const mfd_group *g, const ml_list *eligible_up, mfd_group *out, char **err);
2324#endif