feat(controller-status): xcecli_ctrlstatus_primary authoritative reach-the-primary read (task 3.2)
This commit is contained in:
parent
691cd9199e
commit
03813bf560
4 changed files with 291 additions and 2 deletions
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
#define _CLIENT_H_ 1
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "netio.h"
|
||||
|
|
@ -54,6 +56,29 @@ extern int xcecli_jobdispatch(xcecli_ctx_t, xce_job_dispatch_t*);
|
|||
extern int xcecli_joblist(xcecli_ctx_t, xce_job_t***);
|
||||
extern int xcecli_clusterconf(xcecli_ctx_t, xce_clusterconf_t**);
|
||||
extern int xcecli_ctrlstatus(xcecli_ctx_t, xce_ctrlstatus_t**);
|
||||
/*
|
||||
* xcecli_ctrlstatus_primary (controller-status task 3.2): AUTHORITATIVE
|
||||
* controller status read. Returns ONLY a reply whose responder role is the
|
||||
* primary. When the first answer is from a non-primary, it follows the redirect
|
||||
* (targets the reported primary via the reply's peer list, else rotates the
|
||||
* configured controller list) until the primary answers or the failover budget
|
||||
* is exhausted. On budget exhaustion / no reachable primary it returns a typed
|
||||
* negative and NEVER hands back a non-primary hint reply (Req 9.1, 9.2). The
|
||||
* any-node hint view is still available via xcecli_ctrlstatus above.
|
||||
*/
|
||||
extern int xcecli_ctrlstatus_primary(xcecli_ctx_t, xce_ctrlstatus_t**);
|
||||
/*
|
||||
* Pure decision helpers backing the authoritative read (no I/O — unit-testable
|
||||
* and exposed for tests). xcecli_ctrlstatus_is_authoritative returns true iff
|
||||
* the reply's responderRole is the primary role (ctrl_role_t PRIMARY == 0).
|
||||
* xcecli_ctrlstatus_primary_addr maps the reply's primaryName to its host:port
|
||||
* via the reply's peers list: returns 0 and fills host/port on a hit, -ENOENT
|
||||
* when the primary is unknown/absent from peers, -EINVAL on a bad argument.
|
||||
*/
|
||||
extern bool xcecli_ctrlstatus_is_authoritative(const xce_ctrlstatus_t*);
|
||||
extern int xcecli_ctrlstatus_primary_addr(const xce_ctrlstatus_t*,
|
||||
char* host_out, size_t host_sz,
|
||||
uint16_t* port_out);
|
||||
extern int xcecli_notify_jobfinish(xcecli_ctx_t, xce_jobfinish_t*);
|
||||
extern int xcecli_notify_jobstart(xcecli_ctx_t, job_pidinfo_t*);
|
||||
extern int xcecli_notify_jobfail(xcecli_ctx_t c, job_failinfo_t*);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue