diff options
author | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2011-07-20 13:30:12 +1000 |
---|---|---|
committer | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2011-08-23 10:25:05 +1000 |
commit | 3d495c48d22c81e812424a984fa715fac7817443 (patch) | |
tree | 778de07b7da9091142f723269362f04417b75306 | |
parent | b01dc029caab470618eb7da97a66cf35bc4cbdec (diff) | |
download | samba-3d495c48d22c81e812424a984fa715fac7817443.tar.gz samba-3d495c48d22c81e812424a984fa715fac7817443.tar.xz samba-3d495c48d22c81e812424a984fa715fac7817443.zip |
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)
-rw-r--r-- | ctdb/client/ctdb_client.c | 8 | ||||
-rw-r--r-- | ctdb/include/ctdb_private.h | 2 | ||||
-rw-r--r-- | 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 2b215d07d1..bcf9b2e89a 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 d0f0dc4972..f7ab821b16 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 0ea76bf44f..eb5e2582b9 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); |