diff options
author | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2011-08-23 15:00:27 +1000 |
---|---|---|
committer | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2011-08-23 15:00:27 +1000 |
commit | 5e72ee512700cb140d94e0fec8ff7fb688e16934 (patch) | |
tree | d95a8719c5064eb882cc8b249803a1f9b808e62a | |
parent | 9729d3e339d33ef85025aab2c09c180430998f35 (diff) | |
download | samba-5e72ee512700cb140d94e0fec8ff7fb688e16934.tar.gz samba-5e72ee512700cb140d94e0fec8ff7fb688e16934.tar.xz samba-5e72ee512700cb140d94e0fec8ff7fb688e16934.zip |
LibCTDB : add support for getrecmode
(This used to be ctdb commit 0893fa0f3257f50d54896ffa78ec12ee11e8c6d2)
-rw-r--r-- | ctdb/include/ctdb.h | 50 | ||||
-rw-r--r-- | ctdb/libctdb/control.c | 28 | ||||
-rw-r--r-- | ctdb/libctdb/sync.c | 17 |
3 files changed, 95 insertions, 0 deletions
diff --git a/ctdb/include/ctdb.h b/ctdb/include/ctdb.h index fad3233ba6..484902fb83 100644 --- a/ctdb/include/ctdb.h +++ b/ctdb/include/ctdb.h @@ -552,6 +552,35 @@ bool ctdb_getrecmaster_recv(struct ctdb_connection *ctdb, uint32_t *recmaster); /** + * ctdb_getrecmode_send - read the recovery mode of a node + * @ctdb: the ctdb_connection from ctdb_connect. + * @destnode: the destination node (see below) + * @callback: the callback when ctdb replies to our message (typesafe) + * @cbdata: the argument to callback() + * + * There are several special values for destnode, detailed in + * ctdb_protocol.h, particularly CTDB_CURRENT_NODE which means the + * local ctdbd. + */ +struct ctdb_request * +ctdb_getrecmode_send(struct ctdb_connection *ctdb, + uint32_t destnode, + ctdb_callback_t callback, void *cbdata); + +/** + * ctdb_getrecmode_recv - read an ctdb_getrecmode reply from ctdbd + * @ctdb: the ctdb_connection from ctdb_connect. + * @req: the completed request. + * @recmode: a pointer to the recmode to fill in + * + * This returns false if something went wrong, or otherwise fills in + * recmode. + */ +bool ctdb_getrecmode_recv(struct ctdb_connection *ctdb, + struct ctdb_request *handle, + uint32_t *recmode); + +/** * ctdb_cancel - cancel an uncompleted request * @ctdb: the ctdb_connection from ctdb_connect. * @req: the uncompleted request. @@ -669,6 +698,23 @@ bool ctdb_getrecmaster(struct ctdb_connection *ctdb, /** + * ctdb_getrecmode - read the recovery mode of a node (synchronous) + * @ctdb: the ctdb_connection from ctdb_connect. + * @destnode: the destination node (see below) + * @recmode: a pointer to the recmode to fill in + * + * There are several special values for destnode, detailed in + * ctdb_protocol.h, particularly CTDB_CURRENT_NODE which means the + * local ctdbd. + * + * Returns true and fills in *recmode on success. + */ +bool ctdb_getrecmode(struct ctdb_connection *ctdb, + uint32_t destnode, + uint32_t *recmode); + + +/** * ctdb_getnodemap - read the nodemap from a node (synchronous) * @ctdb: the ctdb_connection from ctdb_connect. * @destnode: the destination node (see below) @@ -775,6 +821,10 @@ void ctdb_free_publicips(struct ctdb_all_public_ips *ips); ctdb_getrecmaster_send((ctdb), (destnode), \ ctdb_sendcb((cb), (cbdata)), (cbdata)) +#define ctdb_getrecmode_send(ctdb, destnode, cb, cbdata) \ + ctdb_getrecmode_send((ctdb), (destnode), \ + ctdb_sendcb((cb), (cbdata)), (cbdata)) + #define ctdb_getnodemap_send(ctdb, destnode, cb, cbdata) \ ctdb_getnodemap_send((ctdb), (destnode), \ ctdb_sendcb((cb), (cbdata)), (cbdata)) diff --git a/ctdb/libctdb/control.c b/ctdb/libctdb/control.c index e18a44ee22..48add207c7 100644 --- a/ctdb/libctdb/control.c +++ b/ctdb/libctdb/control.c @@ -23,6 +23,7 @@ /* Remove type-safety macros. */ #undef ctdb_getrecmaster_send +#undef ctdb_getrecmode_send #undef ctdb_getpnn_send #undef ctdb_getnodemap_send #undef ctdb_getpublicips_send @@ -54,6 +55,33 @@ struct ctdb_request *ctdb_getrecmaster_send(struct ctdb_connection *ctdb, callback, private_data); } +bool ctdb_getrecmode_recv(struct ctdb_connection *ctdb, + struct ctdb_request *req, uint32_t *recmode) +{ + struct ctdb_reply_control *reply; + + reply = unpack_reply_control(req, CTDB_CONTROL_GET_RECMODE); + if (!reply) { + return false; + } + if (reply->status == -1) { + DEBUG(ctdb, LOG_ERR, "ctdb_getrecmode_recv: status -1"); + return false; + } + *recmode = reply->status; + return true; +} + +struct ctdb_request *ctdb_getrecmode_send(struct ctdb_connection *ctdb, + uint32_t destnode, + ctdb_callback_t callback, + void *private_data) +{ + return new_ctdb_control_request(ctdb, CTDB_CONTROL_GET_RECMODE, + destnode, NULL, 0, + callback, private_data); +} + bool ctdb_getpnn_recv(struct ctdb_connection *ctdb, struct ctdb_request *req, uint32_t *pnn) { diff --git a/ctdb/libctdb/sync.c b/ctdb/libctdb/sync.c index 0340a9e173..f957514e0d 100644 --- a/ctdb/libctdb/sync.c +++ b/ctdb/libctdb/sync.c @@ -83,6 +83,23 @@ bool ctdb_getrecmaster(struct ctdb_connection *ctdb, return ret; } +bool ctdb_getrecmode(struct ctdb_connection *ctdb, + uint32_t destnode, uint32_t *recmode) +{ + struct ctdb_request *req; + bool done = false; + bool ret = false; + + req = synchronous(ctdb, + ctdb_getrecmode_send(ctdb, destnode, set, &done), + &done); + if (req != NULL) { + ret = ctdb_getrecmode_recv(ctdb, req, recmode); + ctdb_request_free(req); + } + return ret; +} + struct ctdb_db *ctdb_attachdb(struct ctdb_connection *ctdb, const char *name, bool persistent, uint32_t tdb_flags) |