mirror of
https://github.com/samba-team/samba.git
synced 2024-12-22 13:34:15 +03:00
ctdb-recoverd: Move ctdb_ctrl_modflags() to ctdb_recoverd.c
This file is the only user of this function. Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Amitay Isaacs <amitay@gmail.com>
This commit is contained in:
parent
b1e631ff92
commit
a88c10c5a9
@ -195,11 +195,6 @@ int ctdb_ctrl_get_ifaces(struct ctdb_context *ctdb,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
struct ctdb_iface_list_old **ifaces);
|
||||
|
||||
int ctdb_ctrl_modflags(struct ctdb_context *ctdb,
|
||||
struct timeval timeout,
|
||||
uint32_t destnode,
|
||||
uint32_t set, uint32_t clear);
|
||||
|
||||
int ctdb_ctrl_get_all_tunables(struct ctdb_context *ctdb,
|
||||
struct timeval timeout, uint32_t destnode,
|
||||
struct ctdb_tunable_list *tunables);
|
||||
|
@ -1243,71 +1243,6 @@ int ctdb_ctrl_get_ifaces(struct ctdb_context *ctdb,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
set/clear the permanent disabled bit on a remote node
|
||||
*/
|
||||
int ctdb_ctrl_modflags(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode,
|
||||
uint32_t set, uint32_t clear)
|
||||
{
|
||||
int ret;
|
||||
TDB_DATA data;
|
||||
struct ctdb_node_map_old *nodemap=NULL;
|
||||
struct ctdb_node_flag_change c;
|
||||
TALLOC_CTX *tmp_ctx = talloc_new(ctdb);
|
||||
uint32_t recmaster;
|
||||
uint32_t *nodes;
|
||||
|
||||
|
||||
/* find the recovery master */
|
||||
ret = ctdb_ctrl_getrecmaster(ctdb, tmp_ctx, timeout, CTDB_CURRENT_NODE, &recmaster);
|
||||
if (ret != 0) {
|
||||
DEBUG(DEBUG_ERR, (__location__ " Unable to get recmaster from local node\n"));
|
||||
talloc_free(tmp_ctx);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* read the node flags from the recmaster */
|
||||
ret = ctdb_ctrl_getnodemap(ctdb, timeout, recmaster, tmp_ctx, &nodemap);
|
||||
if (ret != 0) {
|
||||
DEBUG(DEBUG_ERR, (__location__ " Unable to get nodemap from node %u\n", destnode));
|
||||
talloc_free(tmp_ctx);
|
||||
return -1;
|
||||
}
|
||||
if (destnode >= nodemap->num) {
|
||||
DEBUG(DEBUG_ERR,(__location__ " Nodemap from recmaster does not contain node %d\n", destnode));
|
||||
talloc_free(tmp_ctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
c.pnn = destnode;
|
||||
c.old_flags = nodemap->nodes[destnode].flags;
|
||||
c.new_flags = c.old_flags;
|
||||
c.new_flags |= set;
|
||||
c.new_flags &= ~clear;
|
||||
|
||||
data.dsize = sizeof(c);
|
||||
data.dptr = (unsigned char *)&c;
|
||||
|
||||
/* send the flags update to all connected nodes */
|
||||
nodes = list_of_connected_nodes(ctdb, nodemap, tmp_ctx, true);
|
||||
|
||||
if (ctdb_client_async_control(ctdb, CTDB_CONTROL_MODIFY_FLAGS,
|
||||
nodes, 0,
|
||||
timeout, false, data,
|
||||
NULL, NULL,
|
||||
NULL) != 0) {
|
||||
DEBUG(DEBUG_ERR, (__location__ " Unable to update nodeflags on remote nodes\n"));
|
||||
|
||||
talloc_free(tmp_ctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
talloc_free(tmp_ctx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
get all tunables
|
||||
*/
|
||||
|
@ -424,6 +424,74 @@ static int set_recovery_mode(struct ctdb_context *ctdb,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set/clear flags on a remote node
|
||||
*/
|
||||
static int ctdb_ctrl_modflags(struct ctdb_context *ctdb,
|
||||
struct timeval timeout,
|
||||
uint32_t destnode,
|
||||
uint32_t set,
|
||||
uint32_t clear)
|
||||
{
|
||||
int ret;
|
||||
TDB_DATA data;
|
||||
struct ctdb_node_map_old *nodemap=NULL;
|
||||
struct ctdb_node_flag_change c;
|
||||
TALLOC_CTX *tmp_ctx = talloc_new(ctdb);
|
||||
uint32_t recmaster;
|
||||
uint32_t *nodes;
|
||||
|
||||
|
||||
/* find the recovery master */
|
||||
ret = ctdb_ctrl_getrecmaster(ctdb, tmp_ctx, timeout, CTDB_CURRENT_NODE, &recmaster);
|
||||
if (ret != 0) {
|
||||
DEBUG(DEBUG_ERR, (__location__ " Unable to get recmaster from local node\n"));
|
||||
talloc_free(tmp_ctx);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* read the node flags from the recmaster */
|
||||
ret = ctdb_ctrl_getnodemap(ctdb, timeout, recmaster, tmp_ctx, &nodemap);
|
||||
if (ret != 0) {
|
||||
DEBUG(DEBUG_ERR, (__location__ " Unable to get nodemap from node %u\n", destnode));
|
||||
talloc_free(tmp_ctx);
|
||||
return -1;
|
||||
}
|
||||
if (destnode >= nodemap->num) {
|
||||
DEBUG(DEBUG_ERR,(__location__ " Nodemap from recmaster does not contain node %d\n", destnode));
|
||||
talloc_free(tmp_ctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
c.pnn = destnode;
|
||||
c.old_flags = nodemap->nodes[destnode].flags;
|
||||
c.new_flags = c.old_flags;
|
||||
c.new_flags |= set;
|
||||
c.new_flags &= ~clear;
|
||||
|
||||
data.dsize = sizeof(c);
|
||||
data.dptr = (unsigned char *)&c;
|
||||
|
||||
/* send the flags update to all connected nodes */
|
||||
nodes = list_of_connected_nodes(ctdb, nodemap, tmp_ctx, true);
|
||||
|
||||
if (ctdb_client_async_control(ctdb, CTDB_CONTROL_MODIFY_FLAGS,
|
||||
nodes, 0,
|
||||
timeout, false, data,
|
||||
NULL, NULL,
|
||||
NULL) != 0) {
|
||||
DEBUG(DEBUG_ERR, (__location__ " Unable to update nodeflags on remote nodes\n"));
|
||||
|
||||
talloc_free(tmp_ctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
talloc_free(tmp_ctx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Update flags on all connected nodes
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user