From 3d495c48d22c81e812424a984fa715fac7817443 Mon Sep 17 00:00:00 2001 From: Ronnie Sahlberg Date: Wed, 20 Jul 2011 13:30:12 +1000 Subject: [PATCH] ReadOnly: Add an extra flag to ctdb_call_local to specify whether we want to write the record and header back to the tdb (for example we do when performing dmaster migrations) (This used to be ctdb commit b935e83255aeb3754b2fd37cf5611e02f7283514) --- ctdb/client/ctdb_client.c | 8 ++++---- ctdb/include/ctdb_private.h | 2 +- ctdb/server/ctdb_call.c | 10 +++++++--- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/ctdb/client/ctdb_client.c b/ctdb/client/ctdb_client.c index 2b215d07d18..bcf9b2e89a9 100644 --- a/ctdb/client/ctdb_client.c +++ b/ctdb/client/ctdb_client.c @@ -72,7 +72,7 @@ struct ctdb_req_header *_ctdbd_allocate_pkt(struct ctdb_context *ctdb, */ int ctdb_call_local(struct ctdb_db_context *ctdb_db, struct ctdb_call *call, struct ctdb_ltdb_header *header, TALLOC_CTX *mem_ctx, - TDB_DATA *data) + TDB_DATA *data, bool updatetdb) { struct ctdb_call_info *c; struct ctdb_registered_call *fn; @@ -111,7 +111,7 @@ int ctdb_call_local(struct ctdb_db_context *ctdb_db, struct ctdb_call *call, c->new_data = &c->record_data; } - if (c->new_data) { + if (c->new_data && updatetdb) { /* XXX check that we always have the lock here? */ if (ctdb_ltdb_store(ctdb_db, call->key, header, *c->new_data) != 0) { ctdb_set_error(ctdb, "ctdb_call tdb_store failed\n"); @@ -346,7 +346,7 @@ int ctdb_call_recv(struct ctdb_client_call_state *state, struct ctdb_call *call) call->status = state->call->status; talloc_free(state); - return 0; + return call->status; } @@ -387,7 +387,7 @@ static struct ctdb_client_call_state *ctdb_client_call_local_send(struct ctdb_db *(state->call) = *call; state->ctdb_db = ctdb_db; - ret = ctdb_call_local(ctdb_db, state->call, header, state, data); + ret = ctdb_call_local(ctdb_db, state->call, header, state, data, true); return state; } diff --git a/ctdb/include/ctdb_private.h b/ctdb/include/ctdb_private.h index d0f0dc4972f..f7ab821b166 100644 --- a/ctdb/include/ctdb_private.h +++ b/ctdb/include/ctdb_private.h @@ -791,7 +791,7 @@ struct ctdb_call_state *ctdb_daemon_call_send_remote(struct ctdb_db_context *ctd int ctdb_call_local(struct ctdb_db_context *ctdb_db, struct ctdb_call *call, struct ctdb_ltdb_header *header, TALLOC_CTX *mem_ctx, - TDB_DATA *data); + TDB_DATA *data, bool updatetdb); #define ctdb_reqid_find(ctdb, reqid, type) (type *)_ctdb_reqid_find(ctdb, reqid, #type, __location__) diff --git a/ctdb/server/ctdb_call.c b/ctdb/server/ctdb_call.c index 0ea76bf44fd..eb5e2582b9c 100644 --- a/ctdb/server/ctdb_call.c +++ b/ctdb/server/ctdb_call.c @@ -339,7 +339,7 @@ static void ctdb_become_dmaster(struct ctdb_db_context *ctdb_db, return; } - ctdb_call_local(ctdb_db, state->call, &header, state, &data); + ctdb_call_local(ctdb_db, state->call, &header, state, &data, true); ret = ctdb_ltdb_unlock(ctdb_db, state->call->key); if (ret != 0) { @@ -543,7 +543,11 @@ void ctdb_request_call(struct ctdb_context *ctdb, struct ctdb_req_header *hdr) } } - ctdb_call_local(ctdb_db, call, &header, hdr, &data); + ret = ctdb_call_local(ctdb_db, call, &header, hdr, &data, true); + if (ret != 0) { + DEBUG(DEBUG_ERR,(__location__ " ctdb_call_local failed\n")); + call->status = -1; + } ret = ctdb_ltdb_unlock(ctdb_db, call->key); if (ret != 0) { @@ -766,7 +770,7 @@ struct ctdb_call_state *ctdb_call_local_send(struct ctdb_db_context *ctdb_db, *(state->call) = *call; state->ctdb_db = ctdb_db; - ret = ctdb_call_local(ctdb_db, state->call, header, state, data); + ret = ctdb_call_local(ctdb_db, state->call, header, state, data, true); event_add_timed(ctdb->ev, state, timeval_zero(), call_local_trigger, state);