==> src/internal.h <==1/* The job node's private helpers, shared by its source files. */
2#ifndef MESH_JOBS_NODE_INTERNAL_H
3#define MESH_JOBS_NODE_INTERNAL_H
4
5#include "mesh/jobs/node.h"
6
7/* (job, item, lease) and (job, hash) map keys. */
8static inline void mj_key3(uint64_t k[3], mj_job_id job, uint64_t item, uint64_t lease) {
9 k[0] = job;
10 k[1] = item;
11 k[2] = lease;
12}
13static inline void mj_key5(uint64_t k[5], mj_job_id job, const mj_hash *h) {
14 k[0] = job;
15 mj_hash_words(h, k + 1);
16}
17
18void mj_node_send(mj_node *n, uint32_t k, mj_frame f, mj_outs *out);
19void mj_node_log(mj_node *n, mj_log l, mj_outs *out);
20void mj_node_pump(mj_node *n, uint64_t now, uint64_t unix_ms, mj_outs *out);
21void mj_node_on_frame(mj_node *n, uint32_t from, mj_frame f, uint64_t now, uint64_t unix_ms, mj_outs *out);
22mj_outs mj_node_step_down(mj_node *n);
23void mj_node_start_lead(mj_node *n, uint64_t term, uint64_t now, uint64_t unix_ms, mj_outs *out);
24void mj_node_flush(mj_node *n, mj_outs *out);
25void mj_node_snapshots(mj_node *n, mj_outs *out);
26void mj_node_commit_check(mj_node *n, mj_outs *out);
27void mj_node_dispatch(mj_node *n, uint64_t now, uint64_t unix_ms, mj_outs *out);
28void mj_lead_cancel(mj_lead *l, mj_job_id id, const char *why, uint32_t state, uint64_t unix_ms, mj_outs *out);
29
30/* Ops split into the parts they travel in (each part's ops, decoded back as the Rust does). */
31typedef struct {
32 mj_ops *v;
33 size_t n;
34} mj_op_parts;
35mj_op_parts mj_op_parts_of(const mj_ops *ops);
36void mj_op_parts_free(mj_op_parts *p);
37
38char *mj_word(mj_job_id id); /* "t.n", a new string */
39
40#endif