myxce/src/include/xcectx.h

62 lines
1.7 KiB
C

#if !defined(_XCECTX_H_)
#define _XCECTX_H_ 1
#include <stdint.h>
#include "config.h" /* XCE_MAXHOSTNAME_LEN */
#include "netio.h"
#include "request.h"
#include "vtaskmgr.h"
#include "xce/types.h"
typedef enum {
XCE_CTX_INIT = 0,
XCE_CTX_RUN,
XCE_CTX_DOWN,
XCE_CTX_BUSY,
XCE_CTX_ERR
} xce_ctx_state_t;
typedef int (*xce_request_handler_t)(xce_request_t*, void*);
typedef struct {
xce_ctx_state_t state;
xce_peerinfo_t myinfo;
iomgr_t iomgr;
vtaskmgr_t vtaskmgr;
endpoint_t* ep;
xce_request_handler_t handler;
void* handler_args;
cbuf_t wbuf;
dataset_t* dataset;
/* Redirect-hint address captured from the last redirect reply by
* handle_reply() (which only sees xce_ctx_t) and read by the failover
* rotator on the next retry. Empty host ("") means no hint. Advisory only;
* correctness never depends on it. */
char redirect_hint_host[XCE_MAXHOSTNAME_LEN];
uint16_t redirect_hint_port;
struct {
union {
char* debugmsg;
dataset_t* get;
uint64_t jobid;
xce_clusterconf_t* clusterconf;
} u;
} reply;
} xce_ctx_t;
extern int xce_ctx_init(xce_ctx_t*, char*, char*);
extern void xce_ctx_fini(xce_ctx_t*);
extern int xce_ctx_set_handler(xce_ctx_t*, xce_request_handler_t, void*);
extern int xce_ctx_start(xce_ctx_t*);
extern int xce_ctx_stop(xce_ctx_t*);
extern int xce_wakeup(xce_ctx_t*, int);
extern int xce_try_wakeup(xce_ctx_t*, int);
extern int xce_ctx_set_endpoint(xce_ctx_t*, endpoint_t*);
extern void xce_block_tasks(xce_ctx_t*);
extern void xce_unblock_tasks(xce_ctx_t*);
#endif