state = ctdb_control_send(ctdb, destnode, srvid, opcode,
flags, data, mem_ctx,
- timeout, errormsg);
+ errormsg);
+ if (state != NULL && timeout && !timeval_is_zero(timeout)) {
+ event_add_timed(ctdb->ev, state, *timeout, ctdb_control_timeout_func, state);
+ }
+
return ctdb_control_recv(ctdb, state, mem_ctx, outdata, status,
errormsg);
}
state = ctdb_control_send(ctdb, destnode, 0,
CTDB_CONTROL_SHUTDOWN, 0, tdb_null,
- NULL, &timeout, NULL);
+ NULL, NULL);
if (state == NULL) {
DEBUG(DEBUG_ERR,(__location__ " ctdb_control for shutdown failed\n"));
return -1;
}
+ if (!timeval_is_zero(&timeout)) {
+ event_add_timed(ctdb->ev, state, timeout, ctdb_control_timeout_func, state);
+ }
return 0;
}
struct ctdb_client_control_state *
ctdb_ctrl_getrecmode_send(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct timeval timeout, uint32_t destnode)
{
- return ctdb_control_send(ctdb, destnode, 0,
+ struct ctdb_client_control_state *state;
+
+ state = ctdb_control_send(ctdb, destnode, 0,
CTDB_CONTROL_GET_RECMODE, 0, tdb_null,
- mem_ctx, &timeout, NULL);
+ mem_ctx, NULL);
+
+ if (state != NULL && !timeval_is_zero(&timeout)) {
+ event_add_timed(ctdb->ev, state, timeout, ctdb_control_timeout_func, state);
+ }
+
+ return state;
}
int ctdb_ctrl_getrecmode_recv(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct ctdb_client_control_state *state, uint32_t *recmode)
ctdb_ctrl_getrecmaster_send(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx,
struct timeval timeout, uint32_t destnode)
{
- return ctdb_control_send(ctdb, destnode, 0,
+ struct ctdb_client_control_state *state;
+
+ state = ctdb_control_send(ctdb, destnode, 0,
CTDB_CONTROL_GET_RECMASTER, 0, tdb_null,
- mem_ctx, &timeout, NULL);
+ mem_ctx, NULL);
+ if (state != NULL && !timeval_is_zero(&timeout)) {
+ event_add_timed(ctdb->ev, state, timeout, ctdb_control_timeout_func, state);
+ }
+
+ return state;
}
int ctdb_ctrl_getrecmaster_recv(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct ctdb_client_control_state *state, uint32_t *recmaster)
state = ctdb_control_send(ctdb, destnode, 0,
CTDB_CONTROL_PULL_DB, 0, indata,
- mem_ctx, &timeout, NULL);
+ mem_ctx, NULL);
+ if (state != NULL && !timeval_is_zero(&timeout)) {
+ event_add_timed(ctdb->ev, state, timeout, ctdb_control_timeout_func, state);
+ }
+
talloc_free(pull);
return state;
struct ctdb_client_control_state *
ctdb_ctrl_freeze_send(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct timeval timeout, uint32_t destnode, uint32_t priority)
{
- return ctdb_control_send(ctdb, destnode, priority,
+ struct ctdb_client_control_state *state;
+
+ state = ctdb_control_send(ctdb, destnode, priority,
CTDB_CONTROL_FREEZE, 0, tdb_null,
- mem_ctx, &timeout, NULL);
+ mem_ctx, NULL);
+ if (state != NULL && !timeval_is_zero(&timeout)) {
+ event_add_timed(ctdb->ev, state, timeout, ctdb_control_timeout_func, state);
+ }
+
+ return state;
}
/*
struct ctdb_client_control_state *
ctdb_ctrl_uptime_send(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct timeval timeout, uint32_t destnode)
{
- return ctdb_control_send(ctdb, destnode, 0,
+ struct ctdb_client_control_state *state;
+
+ state = ctdb_control_send(ctdb, destnode, 0,
CTDB_CONTROL_UPTIME, 0, tdb_null,
- mem_ctx, &timeout, NULL);
+ mem_ctx, NULL);
+ if (state != NULL && !timeval_is_zero(&timeout)) {
+ event_add_timed(ctdb->ev, state, timeout, ctdb_control_timeout_func, state);
+ }
+
+ return state;
}
int ctdb_ctrl_uptime_recv(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct ctdb_client_control_state *state, struct ctdb_uptime **uptime)
uint32_t pnn = nodes[j];
state = ctdb_control_send(ctdb, pnn, srvid, opcode,
- 0, data, async_data, &timeout, NULL);
+ 0, data, async_data, NULL);
if (state == NULL) {
DEBUG(DEBUG_ERR,(__location__ " Failed to call async control %u\n", (unsigned)opcode));
talloc_free(async_data);
return -1;
}
+ if (!timeval_is_zero(&timeout)) {
+ event_add_timed(ctdb->ev, state, timeout, ctdb_control_timeout_func, state);
+ }
ctdb_client_async_add(async_data, state);
}
struct ctdb_client_control_state *
ctdb_ctrl_getcapabilities_send(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct timeval timeout, uint32_t destnode)
{
- return ctdb_control_send(ctdb, destnode, 0,
+ struct ctdb_client_control_state *state;
+
+ state = ctdb_control_send(ctdb, destnode, 0,
CTDB_CONTROL_GET_CAPABILITIES, 0, tdb_null,
- mem_ctx, &timeout, NULL);
+ mem_ctx, NULL);
+ if (state != NULL && !timeval_is_zero(&timeout)) {
+ event_add_timed(ctdb->ev, state, timeout, ctdb_control_timeout_func, state);
+ }
+
+ return state;
}
int ctdb_ctrl_getcapabilities_recv(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct ctdb_client_control_state *state, uint32_t *capabilities)
struct ctdb_public_ip_list *all_ips, *tmp_ip;
int maxnode, maxnum=0, minnode, minnum=0, num;
TDB_DATA data;
- struct timeval timeout;
struct client_async_data *async_data;
struct ctdb_client_control_state *state;
TALLOC_CTX *tmp_ctx = talloc_new(ctdb);
ipv4.pnn = tmp_ip->pnn;
ipv4.sin = tmp_ip->addr.ip;
- timeout = TAKEOVER_TIMEOUT();
+
data.dsize = sizeof(ipv4);
data.dptr = (uint8_t *)&ipv4;
state = ctdb_control_send(ctdb, nodemap->nodes[i].pnn,
0, CTDB_CONTROL_RELEASE_IPv4, 0,
data, async_data,
- &timeout, NULL);
+ NULL);
+ if (state != NULL) {
+ event_add_timed(ctdb->ev, state, TAKEOVER_TIMEOUT(), ctdb_control_timeout_func, state);
+ }
} else {
ip.pnn = tmp_ip->pnn;
ip.addr = tmp_ip->addr;
- timeout = TAKEOVER_TIMEOUT();
data.dsize = sizeof(ip);
data.dptr = (uint8_t *)&ip;
state = ctdb_control_send(ctdb, nodemap->nodes[i].pnn,
0, CTDB_CONTROL_RELEASE_IP, 0,
data, async_data,
- &timeout, NULL);
+ NULL);
+ if (state != NULL) {
+ event_add_timed(ctdb->ev, state, TAKEOVER_TIMEOUT(), ctdb_control_timeout_func, state);
+ }
}
if (state == NULL) {
ipv4.pnn = tmp_ip->pnn;
ipv4.sin = tmp_ip->addr.ip;
- timeout = TAKEOVER_TIMEOUT();
data.dsize = sizeof(ipv4);
data.dptr = (uint8_t *)&ipv4;
state = ctdb_control_send(ctdb, tmp_ip->pnn,
0, CTDB_CONTROL_TAKEOVER_IPv4, 0,
data, async_data,
- &timeout, NULL);
+ NULL);
+ if (state != NULL) {
+ event_add_timed(ctdb->ev, state, TAKEOVER_TIMEOUT(), ctdb_control_timeout_func, state);
+ }
} else {
ip.pnn = tmp_ip->pnn;
ip.addr = tmp_ip->addr;
- timeout = TAKEOVER_TIMEOUT();
data.dsize = sizeof(ip);
data.dptr = (uint8_t *)&ip;
state = ctdb_control_send(ctdb, tmp_ip->pnn,
0, CTDB_CONTROL_TAKEOVER_IP, 0,
data, async_data,
- &timeout, NULL);
+ NULL);
+ if (state != NULL) {
+ event_add_timed(ctdb->ev, state, TAKEOVER_TIMEOUT(), ctdb_control_timeout_func, state);
+ }
}
if (state == NULL) {
DEBUG(DEBUG_ERR,(__location__ " Failed to call async control CTDB_CONTROL_TAKEOVER_IP to node %u\n", tmp_ip->pnn));