#define TIMEOUT() timeval_current_ofs(recover_timeout, 0)
-#define LOG(...) DEBUG(DEBUG_NOTICE, (__VA_ARGS__))
-
/*
* Utility functions
*/
tdb_flags, O_RDWR|O_CREAT|O_EXCL, 0600);
if (recdb->db == NULL) {
talloc_free(recdb);
- LOG("failed to create recovery db %s\n", recdb->db_path);
+ D_ERR("failed to create recovery db %s\n", recdb->db_path);
return NULL;
}
ret = tdb_traverse_read(recdb_tdb(recdb), recdb_records_traverse,
&state);
if (ret == -1 || state.failed) {
- LOG("Failed to marshall recovery records for %s\n",
- recdb_name(recdb));
+ D_ERR("Failed to marshall recovery records for %s\n",
+ recdb_name(recdb));
TALLOC_FREE(state.recbuf);
return NULL;
}
if (ctdb_rec_buffer_len(state->recbuf) > state->max_size) {
ret = ctdb_rec_buffer_write(state->recbuf, state->fd);
if (ret != 0) {
- LOG("Failed to collect recovery records for %s\n",
- recdb_name(state->recdb));
+ D_ERR("Failed to collect recovery records for %s\n",
+ recdb_name(state->recdb));
state->failed = true;
return ret;
}
ret = ctdb_rec_buffer_write(state.recbuf, fd);
if (ret != 0) {
- LOG("Failed to collect recovery records for %s\n",
- recdb_name(recdb));
+ D_ERR("Failed to collect recovery records for %s\n",
+ recdb_name(recdb));
TALLOC_FREE(state.recbuf);
return -1;
}
state.num_buffers += 1;
- LOG("Wrote %d buffers of recovery records for %s\n",
- state.num_buffers, recdb_name(recdb));
+ D_DEBUG("Wrote %d buffers of recovery records for %s\n",
+ state.num_buffers, recdb_name(recdb));
return state.num_buffers;
}
ret = ctdb_rec_buffer_pull(data.dptr, data.dsize, state, &recbuf);
if (ret != 0) {
- LOG("Invalid data received for DB_PULL messages\n");
+ D_ERR("Invalid data received for DB_PULL messages\n");
return;
}
if (recbuf->db_id != recdb_id(state->recdb)) {
talloc_free(recbuf);
- LOG("Invalid dbid:%08x for DB_PULL messages for %s\n",
- recbuf->db_id, recdb_name(state->recdb));
+ D_ERR("Invalid dbid:%08x for DB_PULL messages for %s\n",
+ recbuf->db_id, recdb_name(state->recdb));
return;
}
recbuf);
if (! status) {
talloc_free(recbuf);
- LOG("Failed to add records to recdb for %s\n",
- recdb_name(state->recdb));
+ D_ERR("Failed to add records to recdb for %s\n",
+ recdb_name(state->recdb));
return;
}
status = ctdb_client_set_message_handler_recv(subreq, &ret);
TALLOC_FREE(subreq);
if (! status) {
- LOG("failed to set message handler for DB_PULL for %s\n",
- recdb_name(state->recdb));
+ D_ERR("Failed to set message handler for DB_PULL for %s\n",
+ recdb_name(state->recdb));
tevent_req_error(req, ret);
return;
}
status = ctdb_client_control_recv(subreq, &ret, state, &reply);
TALLOC_FREE(subreq);
if (! status) {
- LOG("control PULL_DB failed for %s on node %u, ret=%d\n",
- recdb_name(state->recdb), state->pnn, ret);
+ D_ERR("control PULL_DB failed for %s on node %u, ret=%d\n",
+ recdb_name(state->recdb), state->pnn, ret);
tevent_req_error(req, ret);
return;
}
state->num_records = recbuf->count;
talloc_free(recbuf);
- LOG("Pulled %d records for db %s from node %d\n",
- state->num_records, recdb_name(state->recdb), state->pnn);
+ D_INFO("Pulled %d records for db %s from node %d\n",
+ state->num_records, recdb_name(state->recdb), state->pnn);
tevent_req_done(req);
}
status = ctdb_client_control_recv(subreq, &ret, state, &reply);
TALLOC_FREE(subreq);
if (! status) {
- LOG("control DB_PULL failed for %s on node %u, ret=%d\n",
- recdb_name(state->recdb), state->pnn, ret);
+ D_ERR("control DB_PULL failed for %s on node %u, ret=%d\n",
+ recdb_name(state->recdb), state->pnn, ret);
tevent_req_error(req, ret);
return;
}
ret = ctdb_reply_control_db_pull(reply, &num_records);
talloc_free(reply);
if (num_records != state->num_records) {
- LOG("mismatch (%u != %u) in DB_PULL records for %s\n",
- num_records, state->num_records, recdb_name(state->recdb));
+ D_ERR("mismatch (%u != %u) in DB_PULL records for db %s\n",
+ num_records, state->num_records,
+ recdb_name(state->recdb));
tevent_req_error(req, EIO);
return;
}
- LOG("Pulled %d records for db %s from node %d\n",
- state->num_records, recdb_name(state->recdb), state->pnn);
+ D_INFO("Pulled %d records for db %s from node %d\n",
+ state->num_records, recdb_name(state->recdb), state->pnn);
subreq = ctdb_client_remove_message_handler_send(
state, state->ev, state->client,
status = ctdb_client_remove_message_handler_recv(subreq, &ret);
TALLOC_FREE(subreq);
if (! status) {
- LOG("failed to remove message handler for DB_PULL for %s\n",
- recdb_name(state->recdb));
+ D_ERR("failed to remove message handler for DB_PULL for db %s\n",
+ recdb_name(state->recdb));
tevent_req_error(req, ret);
return;
}
status = ctdb_client_control_recv(subreq, &ret, NULL, NULL);
TALLOC_FREE(subreq);
if (! status) {
- LOG("control PUSH_DB failed for db %s on node %u, ret=%d\n",
- recdb_name(state->recdb), state->pnn_list[state->index],
- ret);
+ D_ERR("control PUSH_DB failed for db %s on node %u, ret=%d\n",
+ recdb_name(state->recdb), state->pnn_list[state->index],
+ ret);
tevent_req_error(req, ret);
return;
}
state->count,
err_list, &pnn);
if (ret2 != 0) {
- LOG("control DB_PUSH_START failed for db %s "
- "on node %u, ret=%d\n",
- recdb_name(state->recdb), pnn, ret2);
+ D_ERR("control DB_PUSH_START failed for db %s"
+ " on node %u, ret=%d\n",
+ recdb_name(state->recdb), pnn, ret2);
} else {
- LOG("control DB_PUSH_START failed for db %s, ret=%d\n",
- recdb_name(state->recdb), ret);
+ D_ERR("control DB_PUSH_START failed for db %s,"
+ " ret=%d\n",
+ recdb_name(state->recdb), ret);
}
talloc_free(err_list);
message.srvid = state->srvid;
message.data.data = data;
- LOG("Pushing buffer %d with %d records for %s\n",
- state->num_buffers_sent, recbuf->count, recdb_name(state->recdb));
+ D_DEBUG("Pushing buffer %d with %d records for db %s\n",
+ state->num_buffers_sent, recbuf->count,
+ recdb_name(state->recdb));
subreq = ctdb_client_message_multi_send(state, state->ev,
state->client,
status = ctdb_client_message_multi_recv(subreq, &ret, NULL, NULL);
TALLOC_FREE(subreq);
if (! status) {
- LOG("Sending recovery records failed for %s\n",
- recdb_name(state->recdb));
+ D_ERR("Sending recovery records failed for %s\n",
+ recdb_name(state->recdb));
tevent_req_error(req, ret);
return;
}
state->count, err_list,
&pnn);
if (ret2 != 0) {
- LOG("control DB_PUSH_CONFIRM failed for %s on node %u,"
- " ret=%d\n", recdb_name(state->recdb), pnn, ret2);
+ D_ERR("control DB_PUSH_CONFIRM failed for db %s"
+ " on node %u, ret=%d\n",
+ recdb_name(state->recdb), pnn, ret2);
} else {
- LOG("control DB_PUSH_CONFIRM failed for %s, ret=%d\n",
- recdb_name(state->recdb), ret);
+ D_ERR("control DB_PUSH_CONFIRM failed for db %s,"
+ " ret=%d\n",
+ recdb_name(state->recdb), ret);
}
tevent_req_error(req, ret);
return;
}
if (num_records != state->num_records) {
- LOG("Node %u received %d of %d records for %s\n",
- state->pnn_list[i], num_records,
- state->num_records, recdb_name(state->recdb));
+ D_ERR("Node %u received %d of %d records for %s\n",
+ state->pnn_list[i], num_records,
+ state->num_records, recdb_name(state->recdb));
tevent_req_error(req, EPROTO);
return;
}
talloc_free(reply);
- LOG("Pushed %d records for db %s\n",
- state->num_records, recdb_name(state->recdb));
+ D_INFO("Pushed %d records for db %s\n",
+ state->num_records, recdb_name(state->recdb));
tevent_req_done(req);
}
state->count, err_list,
&pnn);
if (ret2 != 0) {
- LOG("control GET_DB_SEQNUM failed for %s on node %u,"
- " ret=%d\n", recdb_name(state->recdb), pnn, ret2);
+ D_ERR("control GET_DB_SEQNUM failed for db %s"
+ " on node %u, ret=%d\n",
+ recdb_name(state->recdb), pnn, ret2);
} else {
- LOG("control GET_DB_SEQNUM failed for %s, ret=%d\n",
- recdb_name(state->recdb), ret);
+ D_ERR("control GET_DB_SEQNUM failed for db %s,"
+ " ret=%d\n",
+ recdb_name(state->recdb), ret);
}
tevent_req_error(req, ret);
return;
talloc_free(reply);
- LOG("Pull persistent db %s from node %d with seqnum 0x%"PRIx64"\n",
- recdb_name(state->recdb), state->max_pnn, max_seqnum);
+ D_INFO("Pull persistent db %s from node %d with seqnum 0x%"PRIx64"\n",
+ recdb_name(state->recdb), state->max_pnn, max_seqnum);
subreq = pull_database_send(state, state->ev, state->client,
state->max_pnn,
status = ctdb_client_control_recv(subreq, &ret, state, &reply);
TALLOC_FREE(subreq);
if (! status) {
- LOG("control GET_DBNAME failed for db=0x%x, ret=%d\n",
- state->db_id, ret);
+ D_ERR("control GET_DBNAME failed for db=0x%x, ret=%d\n",
+ state->db_id, ret);
tevent_req_error(req, ret);
return;
}
ret = ctdb_reply_control_get_dbname(reply, state, &state->db_name);
if (ret != 0) {
- LOG("control GET_DBNAME failed for db=0x%x, ret=%d\n",
- state->db_id, ret);
+ D_ERR("control GET_DBNAME failed for db=0x%x, ret=%d\n",
+ state->db_id, ret);
tevent_req_error(req, EPROTO);
return;
}
status = ctdb_client_control_recv(subreq, &ret, state, &reply);
TALLOC_FREE(subreq);
if (! status) {
- LOG("control GETDBPATH failed for db %s, ret=%d\n",
- state->db_name, ret);
+ D_ERR("control GETDBPATH failed for db %s, ret=%d\n",
+ state->db_name, ret);
tevent_req_error(req, ret);
return;
}
ret = ctdb_reply_control_getdbpath(reply, state, &state->db_path);
if (ret != 0) {
- LOG("control GETDBPATH failed for db %s, ret=%d\n",
- state->db_name, ret);
+ D_ERR("control GETDBPATH failed for db %s, ret=%d\n",
+ state->db_name, ret);
tevent_req_error(req, EPROTO);
return;
}
state->count, err_list,
&pnn);
if (ret2 != 0) {
- LOG("control FREEZE_DB failed for db %s on node %u,"
- " ret=%d\n", state->db_name, pnn, ret2);
+ D_ERR("control FREEZE_DB failed for db %s"
+ " on node %u, ret=%d\n",
+ state->db_name, pnn, ret2);
} else {
- LOG("control FREEZE_DB failed for db %s, ret=%d\n",
- state->db_name, ret);
+ D_ERR("control FREEZE_DB failed for db %s, ret=%d\n",
+ state->db_name, ret);
}
tevent_req_error(req, ret);
return;
state->count,
err_list, &pnn);
if (ret2 != 0) {
- LOG("control TRANSACTION_DB failed for db=%s on node %u,"
- " ret=%d\n", state->db_name, pnn, ret2);
+ D_ERR("control TRANSACTION_DB failed for db=%s"
+ " on node %u, ret=%d\n",
+ state->db_name, pnn, ret2);
} else {
- LOG("control TRANSACTION_DB failed for db=%s,"
- " ret=%d\n", state->db_name, ret);
+ D_ERR("control TRANSACTION_DB failed for db=%s,"
+ " ret=%d\n", state->db_name, ret);
}
tevent_req_error(req, ret);
return;
state->count,
err_list, &pnn);
if (ret2 != 0) {
- LOG("control WIPEDB failed for db %s on node %u,"
- " ret=%d\n", state->db_name, pnn, ret2);
+ D_ERR("control WIPEDB failed for db %s on node %u,"
+ " ret=%d\n", state->db_name, pnn, ret2);
} else {
- LOG("control WIPEDB failed for db %s, ret=%d\n",
- state->db_name, ret);
+ D_ERR("control WIPEDB failed for db %s, ret=%d\n",
+ state->db_name, ret);
}
tevent_req_error(req, ret);
return;
state->count,
err_list, &pnn);
if (ret2 != 0) {
- LOG("control DB_TRANSACTION_COMMIT failed for db %s"
- " on node %u, ret=%d\n", state->db_name, pnn, ret2);
+ D_ERR("control DB_TRANSACTION_COMMIT failed for db %s"
+ " on node %u, ret=%d\n",
+ state->db_name, pnn, ret2);
} else {
- LOG("control DB_TRANSACTION_COMMIT failed for db %s,"
- " ret=%d\n", state->db_name, ret);
+ D_ERR("control DB_TRANSACTION_COMMIT failed for db %s,"
+ " ret=%d\n", state->db_name, ret);
}
tevent_req_error(req, ret);
return;
state->count,
err_list, &pnn);
if (ret2 != 0) {
- LOG("control DB_THAW failed for db %s on node %u,"
- " ret=%d\n", state->db_name, pnn, ret2);
+ D_ERR("control DB_THAW failed for db %s on node %u,"
+ " ret=%d\n", state->db_name, pnn, ret2);
} else {
- LOG("control DB_THAW failed for db %s, ret=%d\n",
- state->db_name, ret);
+ D_ERR("control DB_THAW failed for db %s, ret=%d\n",
+ state->db_name, ret);
}
tevent_req_error(req, ret);
return;
}
tevent_req_set_callback(subreq, db_recovery_one_done,
substate);
- LOG("recover database 0x%08x\n", substate->db_id);
+ D_NOTICE("recover database 0x%08x\n", substate->db_id);
}
return req;
goto failed;
}
tevent_req_set_callback(subreq, db_recovery_one_done, substate);
- LOG("recover database 0x%08x, attempt %d\n", substate->db_id,
- substate->num_fails+1);
+ D_NOTICE("recover database 0x%08x, attempt %d\n",
+ substate->db_id, substate->num_fails+1);
return;
}
status = ctdb_client_control_recv(subreq, &ret, state, &reply);
TALLOC_FREE(subreq);
if (! status) {
- LOG("control GET_ALL_TUNABLES failed, ret=%d\n", ret);
+ D_ERR("control GET_ALL_TUNABLES failed, ret=%d\n", ret);
tevent_req_error(req, ret);
return;
}
ret = ctdb_reply_control_get_all_tunables(reply, state,
&state->tun_list);
if (ret != 0) {
- LOG("control GET_ALL_TUNABLES failed, ret=%d\n", ret);
+ D_ERR("control GET_ALL_TUNABLES failed, ret=%d\n", ret);
tevent_req_error(req, EPROTO);
return;
}
status = ctdb_client_control_recv(subreq, &ret, state, &reply);
TALLOC_FREE(subreq);
if (! status) {
- LOG("control GET_NODEMAP failed to node %u, ret=%d\n",
- state->destnode, ret);
+ D_ERR("control GET_NODEMAP failed to node %u, ret=%d\n",
+ state->destnode, ret);
tevent_req_error(req, ret);
return;
}
ret = ctdb_reply_control_get_nodemap(reply, state, &state->nodemap);
if (ret != 0) {
- LOG("control GET_NODEMAP failed, ret=%d\n", ret);
+ D_ERR("control GET_NODEMAP failed, ret=%d\n", ret);
tevent_req_error(req, ret);
return;
}
status = ctdb_client_control_recv(subreq, &ret, state, &reply);
TALLOC_FREE(subreq);
if (! status) {
- LOG("control GETVNNMAP failed to node %u, ret=%d\n",
- state->destnode, ret);
+ D_ERR("control GETVNNMAP failed to node %u, ret=%d\n",
+ state->destnode, ret);
tevent_req_error(req, ret);
return;
}
ret = ctdb_reply_control_getvnnmap(reply, state, &state->vnnmap);
if (ret != 0) {
- LOG("control GETVNNMAP failed, ret=%d\n", ret);
+ D_ERR("control GETVNNMAP failed, ret=%d\n", ret);
tevent_req_error(req, ret);
return;
}
state->count,
err_list, &pnn);
if (ret2 != 0) {
- LOG("control GET_CAPABILITIES failed on node %u,"
- " ret=%d\n", pnn, ret2);
+ D_ERR("control GET_CAPABILITIES failed on node %u,"
+ " ret=%d\n", pnn, ret2);
} else {
- LOG("control GET_CAPABILITIES failed, ret=%d\n", ret);
+ D_ERR("control GET_CAPABILITIES failed, ret=%d\n",
+ ret);
}
tevent_req_error(req, ret);
return;
ret = ctdb_reply_control_get_capabilities(reply[i],
&state->caps[pnn]);
if (ret != 0) {
- LOG("control GET_CAPABILITIES failed on node %u\n", pnn);
+ D_ERR("control GET_CAPABILITIES failed on node %u\n",
+ pnn);
tevent_req_error(req, EPROTO);
return;
}
status = ctdb_client_control_recv(subreq, &ret, state, &reply);
TALLOC_FREE(subreq);
if (! status) {
- LOG("control GET_DBMAP failed to node %u, ret=%d\n",
- state->destnode, ret);
+ D_ERR("control GET_DBMAP failed to node %u, ret=%d\n",
+ state->destnode, ret);
tevent_req_error(req, ret);
return;
}
ret = ctdb_reply_control_get_dbmap(reply, state, &state->dbmap);
if (ret != 0) {
- LOG("control GET_DBMAP failed, ret=%d\n", ret);
+ D_ERR("control GET_DBMAP failed, ret=%d\n", ret);
tevent_req_error(req, ret);
return;
}
state->count,
err_list, &pnn);
if (ret2 != 0) {
- LOG("failed to set recovery mode to ACTIVE on node %u,"
- " ret=%d\n", pnn, ret2);
+ D_ERR("failed to set recovery mode ACTIVE on node %u,"
+ " ret=%d\n", pnn, ret2);
} else {
- LOG("failed to set recovery mode to ACTIVE, ret=%d\n",
- ret);
+ D_ERR("failed to set recovery mode ACTIVE, ret=%d\n",
+ ret);
}
tevent_req_error(req, ret);
return;
}
- LOG("set recovery mode to ACTIVE\n");
+ D_ERR("Set recovery mode to ACTIVE\n");
/* Calculate new VNNMAP */
count = 0;
}
if (count == 0) {
- LOG("no active lmasters found. Adding recmaster anyway\n");
+ D_WARNING("No active lmasters found. Adding recmaster anyway\n");
}
vnnmap = talloc_zero(state, struct ctdb_vnn_map);
state->count,
err_list, &pnn);
if (ret2 != 0) {
- LOG("failed to run start_recovery event on node %u,"
- " ret=%d\n", pnn, ret2);
+ D_ERR("failed to run start_recovery event on node %u,"
+ " ret=%d\n", pnn, ret2);
} else {
- LOG("failed to run start_recovery event, ret=%d\n",
- ret);
+ D_ERR("failed to run start_recovery event, ret=%d\n",
+ ret);
}
tevent_req_error(req, ret);
return;
}
- LOG("start_recovery event finished\n");
+ D_ERR("start_recovery event finished\n");
ctdb_req_control_setvnnmap(&request, state->vnnmap);
subreq = ctdb_client_control_multi_send(state, state->ev,
state->count,
err_list, &pnn);
if (ret2 != 0) {
- LOG("failed to update VNNMAP on node %u, ret=%d\n",
- pnn, ret2);
+ D_ERR("failed to update VNNMAP on node %u, ret=%d\n",
+ pnn, ret2);
} else {
- LOG("failed to update VNNMAP, ret=%d\n", ret);
+ D_ERR("failed to update VNNMAP, ret=%d\n", ret);
}
tevent_req_error(req, ret);
return;
}
- LOG("updated VNNMAP\n");
+ D_NOTICE("updated VNNMAP\n");
subreq = db_recovery_send(state, state->ev, state->client,
state->dbmap, state->tun_list,
status = db_recovery_recv(subreq, &count);
TALLOC_FREE(subreq);
- LOG("%d of %d databases recovered\n", count, state->dbmap->num);
+ D_ERR("%d of %d databases recovered\n", count, state->dbmap->num);
if (! status) {
uint32_t max_pnn = CTDB_UNKNOWN_PNN, max_credits = 0;
if (max_credits >= NUM_RETRIES) {
struct ctdb_req_message message;
- LOG("Assigning banning credits to node %u\n", max_pnn);
+ D_ERR("Assigning banning credits to node %u\n",
+ max_pnn);
message.srvid = CTDB_SRVID_BANNING;
message.data.pnn = max_pnn;
status = ctdb_client_message_recv(subreq, &ret);
TALLOC_FREE(subreq);
if (! status) {
- LOG("failed to assign banning credits, ret=%d\n", ret);
+ D_ERR("failed to assign banning credits, ret=%d\n", ret);
}
tevent_req_error(req, EIO);
state->count,
err_list, &pnn);
if (ret2 != 0) {
- LOG("failed to set recovery mode to NORMAL on node %u,"
- " ret=%d\n", pnn, ret2);
+ D_ERR("failed to set recovery mode NORMAL on node %u,"
+ " ret=%d\n", pnn, ret2);
} else {
- LOG("failed to set recovery mode to NORMAL, ret=%d\n",
- ret);
+ D_ERR("failed to set recovery mode NORMAL, ret=%d\n",
+ ret);
}
tevent_req_error(req, ret);
return;
}
- LOG("set recovery mode to NORMAL\n");
+ D_ERR("Set recovery mode to NORMAL\n");
ctdb_req_control_end_recovery(&request);
subreq = ctdb_client_control_multi_send(state, state->ev,
state->count,
err_list, &pnn);
if (ret2 != 0) {
- LOG("failed to run recovered event on node %u,"
- " ret=%d\n", pnn, ret2);
+ D_ERR("failed to run recovered event on node %u,"
+ " ret=%d\n", pnn, ret2);
} else {
- LOG("failed to run recovered event, ret=%d\n", ret);
+ D_ERR("failed to run recovered event, ret=%d\n", ret);
}
tevent_req_error(req, ret);
return;
}
- LOG("recovered event finished\n");
+ D_ERR("recovered event finished\n");
tevent_req_done(req);
}
ev = tevent_context_init(mem_ctx);
if (ev == NULL) {
- LOG("tevent_context_init() failed\n");
+ D_ERR("tevent_context_init() failed\n");
goto failed;
}
ret = ctdb_client_init(mem_ctx, ev, sockpath, &client);
if (ret != 0) {
- LOG("ctdb_client_init() failed, ret=%d\n", ret);
+ D_ERR("ctdb_client_init() failed, ret=%d\n", ret);
goto failed;
}
req = recovery_send(mem_ctx, ev, client, generation);
if (req == NULL) {
- LOG("database_recover_send() failed\n");
+ D_ERR("database_recover_send() failed\n");
goto failed;
}
if (! tevent_req_poll(req, ev)) {
- LOG("tevent_req_poll() failed\n");
+ D_ERR("tevent_req_poll() failed\n");
goto failed;
}
recovery_recv(req, &ret);
TALLOC_FREE(req);
if (ret != 0) {
- LOG("database recovery failed, ret=%d\n", ret);
+ D_ERR("database recovery failed, ret=%d\n", ret);
goto failed;
}