r->hdr.destnode = new_dmaster;
r->hdr.reqid = reqid;
+ r->hdr.generation = ctdb_db->generation;
r->rsn = header->rsn;
r->keylen = key.dsize;
r->datalen = data.dsize;
CTDB_NO_MEMORY_FATAL(ctdb, r);
r->hdr.destnode = lmaster;
r->hdr.reqid = c->hdr.reqid;
+ r->hdr.generation = ctdb_db->generation;
r->db_id = c->db_id;
r->rsn = header->rsn;
r->dmaster = c->hdr.srcnode;
};
struct dmaster_defer_queue {
- struct ctdb_context *ctdb;
+ struct ctdb_db_context *ctdb_db;
uint32_t generation;
struct dmaster_defer_call *deferred_calls;
};
static int dmaster_defer_queue_destructor(struct dmaster_defer_queue *ddq)
{
/* Ignore requests, if database recovery happens in-between. */
- if (ddq->generation != ddq->ctdb->vnn_map->generation) {
+ if (ddq->generation != ddq->ctdb_db->generation) {
return 0;
}
talloc_free(k);
return -1;
}
- ddq->ctdb = ctdb_db->ctdb;
+ ddq->ctdb_db = ctdb_db;
ddq->generation = hdr->generation;
ddq->deferred_calls = NULL;
CTDB_NO_MEMORY_FATAL(ctdb, r);
r->hdr.destnode = c->hdr.srcnode;
r->hdr.reqid = c->hdr.reqid;
+ r->hdr.generation = ctdb_db->generation;
r->status = 0;
r->datalen = data.dsize + sizeof(struct ctdb_ltdb_header);
header.rsn -= 2;
CTDB_NO_MEMORY_FATAL(ctdb, r);
r->hdr.destnode = hdr->srcnode;
r->hdr.reqid = hdr->reqid;
+ r->hdr.generation = ctdb_db->generation;
r->status = call->status;
r->datalen = call->reply_data.dsize;
if (call->reply_data.dsize) {
{
struct ctdb_context *ctdb = state->ctdb_db->ctdb;
- state->generation = ctdb->vnn_map->generation;
+ state->generation = state->ctdb_db->generation;
/* use a new reqid, in case the old reply does eventually come in */
ctdb_reqid_remove(ctdb, state->reqid);
/* this limits us to 16k outstanding messages - not unreasonable */
state->c->hdr.reqid = state->reqid;
+ state->c->hdr.generation = ctdb_db->generation;
state->c->flags = call->flags;
state->c->db_id = ctdb_db->db_id;
state->c->callid = call->call_id;
state->call->key.dptr = &state->c->data[0];
state->state = CTDB_CALL_WAIT;
- state->generation = ctdb->vnn_map->generation;
+ state->generation = ctdb_db->generation;
DLIST_ADD(ctdb_db->pending_calls, state);
struct lock_fetch_state {
struct ctdb_context *ctdb;
+ struct ctdb_db_context *ctdb_db;
void (*recv_pkt)(void *, struct ctdb_req_header *);
void *recv_context;
struct ctdb_req_header *hdr;
{
struct lock_fetch_state *state = talloc_get_type(p, struct lock_fetch_state);
if (!state->ignore_generation &&
- state->generation != state->ctdb->vnn_map->generation) {
+ state->generation != state->ctdb_db->generation) {
DEBUG(DEBUG_NOTICE,("Discarding previous generation lockwait packet\n"));
talloc_free(state->hdr);
return;
state = talloc(hdr, struct lock_fetch_state);
state->ctdb = ctdb_db->ctdb;
+ state->ctdb_db = ctdb_db;
state->hdr = hdr;
state->recv_pkt = recv_pkt;
state->recv_context = recv_context;
- state->generation = ctdb_db->ctdb->vnn_map->generation;
+ state->generation = ctdb_db->generation;
state->ignore_generation = ignore_generation;
/* now the contended path */