forked from lei.chen/myxce
Extends src/schema/controller.capnp with persistence structures needed for WAL replication and snapshots: - PersistConfig (8 fields, @0-@7): capnp-serialisable copy of the persistence configuration; mapped to capnp_persist_cfg_t to avoid collision with the plain-C persist_config_t in persist.h - SnapshotHeader (9 fields, @0-@8): snapshot manifest with LSN, term, timestamp, record counts and checksums; mapped to capnp_snap_hdr_t - ReplEnvelope (6 fields, @0-@5): replication wire envelope (NOT the on-disk format); named to avoid collision with wal_entry_hdr_t and the WALEntry_ internal symbol c-capnproto generates; mapped to capnp_repl_envelope_t Also extends existing structs: - Job.transientSince @11 (UInt64=0, mapname transient_since): set when job enters JOB_STAT_TRANSIENT; also adds uint64_t transient_since to xce_job_t in types.h - Worker.deadSince @6 (UInt64=0, mapname dead_since): mirrors existing time_t dead_since field in xce_worker_t OPCode enum extended with 7 replication opcodes @22-@28: replEntry, replAck, redirect, heartbeat, steppingDown, replSnapshot, replCatchUpDone New C typedefs (capnp_persist_cfg_t, capnp_snap_hdr_t, capnp_repl_envelope_t) added to typemap.h for the encode/decode shims. TDD: test_persist_schema.c added (6 tests, all GREEN). Controller test suite remains 1/1 PASS.
239 lines
5.9 KiB
C
239 lines
5.9 KiB
C
#if !defined(_TYPEMAP_H_)
|
|
|
|
#define _TYPEMAP_H_ 1
|
|
#include <stdint.h>
|
|
|
|
#include "clusterconfig.h"
|
|
#include "xce/types.h"
|
|
|
|
typedef struct {
|
|
char* resname;
|
|
char* hostname;
|
|
} xce_reskey_t;
|
|
|
|
typedef struct {
|
|
int type;
|
|
union {
|
|
uint64_t jobid;
|
|
char* wname;
|
|
xce_reskey_t* reskey;
|
|
} condition;
|
|
} xce_match_t;
|
|
|
|
typedef struct {
|
|
int table;
|
|
int nrows;
|
|
void* rows;
|
|
} dataset_t;
|
|
|
|
typedef struct {
|
|
int role;
|
|
int data_which;
|
|
union {
|
|
hostattrs_t* attrs;
|
|
} data;
|
|
} xce_joindata_t;
|
|
|
|
typedef struct {
|
|
char* clustername;
|
|
int n_confvars;
|
|
xce_config_t** confvars;
|
|
int n_resources;
|
|
xce_resource_t** resources;
|
|
int n_queues;
|
|
xce_queue_t** queues;
|
|
int n_ugroups;
|
|
xce_group_config_t** ugroups;
|
|
int n_hgroups;
|
|
xce_group_config_t** hgroups;
|
|
int nresvals;
|
|
xce_val_with_idx_t** resvals;
|
|
int nlimits;
|
|
xce_limit_config_t** limits;
|
|
int nhproviders;
|
|
scaler_config_t** hproviders;
|
|
} xce_conf4sched_t;
|
|
|
|
typedef struct {
|
|
char* clustername;
|
|
int n_confvars;
|
|
xce_config_t** confvars;
|
|
} xce_conf4worker_t;
|
|
|
|
typedef struct {
|
|
int data_which;
|
|
union {
|
|
xce_conf4sched_t* conf4sched;
|
|
xce_conf4worker_t* conf4worker;
|
|
cluster_config_t* clusterconfig;
|
|
} data;
|
|
} xce_configdata_t;
|
|
|
|
typedef struct {
|
|
int n_total;
|
|
int pos;
|
|
int count;
|
|
xce_job_t** jobs;
|
|
} xce_jobs_data_t;
|
|
|
|
typedef struct {
|
|
int n_total;
|
|
int pos;
|
|
int count;
|
|
xce_worker_t** workers;
|
|
} xce_workers_data_t;
|
|
|
|
typedef struct {
|
|
int n_total;
|
|
int pos;
|
|
int count;
|
|
xce_resource_t** resources;
|
|
} xce_resource_data_t;
|
|
|
|
typedef struct {
|
|
int n_total;
|
|
int pos;
|
|
int count;
|
|
xce_resval_t** vals;
|
|
} xce_resval_data_t;
|
|
|
|
typedef struct {
|
|
int count;
|
|
xce_resval_t** vals;
|
|
} xce_resval_list_t;
|
|
|
|
typedef struct {
|
|
uint64_t jobid;
|
|
int npids;
|
|
int* pids;
|
|
int npgids;
|
|
int* pgids;
|
|
int count;
|
|
xce_rusage_t** usages;
|
|
} xce_job_rusages_t;
|
|
|
|
typedef struct {
|
|
int table;
|
|
union {
|
|
xce_jobs_data_t* jobs;
|
|
xce_workers_data_t* workers;
|
|
xce_resource_data_t* resources;
|
|
xce_resval_data_t* resvals;
|
|
} data;
|
|
} xce_data_t;
|
|
|
|
typedef struct {
|
|
int table;
|
|
xce_match_t* condition;
|
|
} xce_get_t;
|
|
|
|
typedef struct {
|
|
int event;
|
|
union {
|
|
job_pidinfo_t* pidinfo;
|
|
job_failinfo_t* failinfo;
|
|
job_failinfo_t* dispatchfail;
|
|
xce_jobfinish_t* finishinfo;
|
|
uint64_t sched_start_job;
|
|
uint64_t sched_exit_job;
|
|
uint64_t sched_fail_job;
|
|
xce_job_t* sched_update_job;
|
|
xce_resval_list_t* sched_update_resvals;
|
|
uint64_t stopped_job;
|
|
uint64_t resumed_job;
|
|
xce_ckptinfo_t* ckptinfo;
|
|
xce_queue_t* sched_update_queue;
|
|
xce_task_pidinfo_t* taskinfo;
|
|
xce_task_failinfo_t* taskfailinfo;
|
|
xce_task_finish_t* taskfinish;
|
|
uint64_t pdone_job;
|
|
xce_job_rusages_t* sched_job_rusages;
|
|
xce_job_t* update_job;
|
|
} data;
|
|
} xce_notify_data_t;
|
|
|
|
typedef struct {
|
|
int table;
|
|
union {
|
|
xce_resval_list_t* resvals;
|
|
xce_job_rusages_t* jobrusages;
|
|
} data;
|
|
} xce_update_data_t;
|
|
|
|
typedef struct {
|
|
uint64_t seq;
|
|
uint32_t opcode;
|
|
int32_t status;
|
|
int data_which;
|
|
union {
|
|
char* debugmsg;
|
|
uint64_t jobid;
|
|
xce_data_t* getdata;
|
|
xce_clusterconf_t* clusterconf;
|
|
} data;
|
|
} xce_reply_t;
|
|
|
|
typedef struct {
|
|
uint32_t opcode;
|
|
uint64_t seq;
|
|
xce_peerinfo_t* from;
|
|
int body_which;
|
|
union {
|
|
xce_reply_t* replymsg;
|
|
char* hellomsg;
|
|
xce_joindata_t* joinmsg;
|
|
xce_configdata_t* configpushmsg;
|
|
xce_data_t* pushmsg;
|
|
xce_get_t* getmsg;
|
|
dataset_t* datamsg;
|
|
xce_job_dispatch_t* dispatchmsg;
|
|
xce_job_exec_t* jobstartmsg;
|
|
xce_notify_data_t* notifymsg;
|
|
xce_job_submit_t* jobsubmsg;
|
|
xce_update_data_t* updatemsg;
|
|
xce_jobctrl_t* jobctrlmsg;
|
|
xce_queuectrl_t* queuectrlmsg;
|
|
xce_taskrun_t* runtaskmsg;
|
|
xce_preason_set_t* preasonmsg;
|
|
xce_clear_reason_t* clrpreasonmsg;
|
|
xce_hostctrl_t* hostctrlmsg;
|
|
} body;
|
|
} xce_request_t;
|
|
|
|
/* ── Persistence Cap'n Proto mapped types (P0-9) ─────────────────────
|
|
* These are the C-side counterparts for the capnp encode/decode shims.
|
|
* Named with capnp_ prefix to avoid collision with the plain-C structs
|
|
* in persist.h (persist_config_t) and the on-disk binary formats. */
|
|
typedef struct {
|
|
uint32_t walSyncMs;
|
|
uint32_t snapIntervalS;
|
|
uint32_t snapWalSizeMb;
|
|
uint32_t finishedRetainS;
|
|
uint32_t workerRetainS;
|
|
uint32_t syncTimeoutMs;
|
|
uint32_t snapKeepN;
|
|
uint32_t transientJobTimeoutS;
|
|
} capnp_persist_cfg_t;
|
|
|
|
typedef struct {
|
|
uint64_t lsn;
|
|
uint64_t term;
|
|
uint64_t timestamp;
|
|
uint32_t version;
|
|
uint32_t nJobs;
|
|
uint32_t nQueues;
|
|
uint32_t nWorkers;
|
|
uint32_t checksum;
|
|
uint32_t headerChecksum;
|
|
} capnp_snap_hdr_t;
|
|
|
|
typedef struct {
|
|
uint64_t term;
|
|
uint64_t lsn;
|
|
uint32_t entryType;
|
|
xce_data_t* payload; /* owned; decoded via decode_Data_ptr */
|
|
uint32_t crc;
|
|
uint32_t prevCrc;
|
|
} capnp_repl_envelope_t;
|
|
|
|
#endif
|