------------------------------------------------------------
revno: 308
revision-id: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Andrew Tridgell <[EMAIL PROTECTED]>
branch nick: tridge
timestamp: Wed 2007-05-16 18:10:26 +1000
message:
- merge from ronnie
- fixed a memory leak found by dmitry
modified:
common/ctdb_call.c ctdb_call.c-20061128065342-to93h6eejj5kon81-1
common/ctdb_client.c ctdb_client.c-20070411010216-3kd8v37k61steeya-1
common/ctdb_control.c
ctdb_control.c-20070426122724-j6gkpiofhbwdin63-1
common/ctdb_recover.c
ctdb_recover.c-20070503002147-admmfgt1oj6gexfo-1
common/ctdb_recoverd.c recoverd.c-20070503213540-bvxuyd9jm1f7ig90-1
include/ctdb.h ctdb.h-20061117234101-o3qt14umlg9en8z0-11
include/ctdb_private.h
ctdb_private.h-20061117234101-o3qt14umlg9en8z0-13
------------------------------------------------------------
revno: 197.1.112
merged: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Ronnie Sahlberg <[EMAIL PROTECTED]>
branch nick: ctdb
timestamp: Wed 2007-05-16 12:34:30 +1000
message:
if a caller specifies a timeout when calling a control, it makes no
sense to have the daemon requeue the packets if they timeout or fail to
deliver to the remote node
------------------------------------------------------------
revno: 197.1.111
merged: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Ronnie Sahlberg <[EMAIL PROTECTED]>
branch nick: ctdb
timestamp: Wed 2007-05-16 11:12:28 +1000
message:
merge from tridge
------------------------------------------------------------
revno: 197.1.110
merged: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Ronnie Sahlberg <[EMAIL PROTECTED]>
branch nick: ctdb
timestamp: Tue 2007-05-15 10:34:14 +1000
message:
merge from tridge
------------------------------------------------------------
revno: 197.1.109
merged: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Ronnie Sahlberg <[EMAIL PROTECTED]>
branch nick: ctdb
timestamp: Tue 2007-05-15 10:28:41 +1000
message:
merge from tridge
------------------------------------------------------------
revno: 197.1.108
merged: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Ronnie Sahlberg <[EMAIL PROTECTED]>
branch nick: ctdb
timestamp: Mon 2007-05-14 14:07:19 +1000
message:
merge from tridge
------------------------------------------------------------
revno: 197.1.107
merged: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Ronnie Sahlberg <[EMAIL PROTECTED]>
branch nick: ctdb
timestamp: Mon 2007-05-14 14:05:49 +1000
message:
merge from tridge
------------------------------------------------------------
revno: 197.1.106
merged: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Ronnie Sahlberg <[EMAIL PROTECTED]>
branch nick: ctdb
timestamp: Mon 2007-05-14 08:03:48 +1000
message:
remove the control to bump the rsn since we dont need it anymore
------------------------------------------------------------
revno: 197.1.105
merged: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Ronnie Sahlberg <[EMAIL PROTECTED]>
branch nick: ctdb
timestamp: Mon 2007-05-14 06:50:24 +1000
message:
add a mising parameter to the new signature for ctdb_control
------------------------------------------------------------
revno: 197.1.104
merged: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Ronnie Sahlberg <[EMAIL PROTECTED]>
branch nick: ctdb
timestamp: Mon 2007-05-14 06:25:15 +1000
message:
merge from tridge
------------------------------------------------------------
revno: 197.1.103
merged: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Ronnie Sahlberg <[EMAIL PROTECTED]>
branch nick: ctdb
timestamp: Fri 2007-05-11 12:03:19 +1000
message:
we have to get a NEW generation id after completing recovery
to solve a race condition with the logic to retransmit in
ctdb_call.c/ctdb_call_timeout()
------------------------------------------------------------
revno: 197.1.102
merged: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Ronnie Sahlberg <[EMAIL PROTECTED]>
branch nick: ctdb
timestamp: Fri 2007-05-11 10:37:42 +1000
message:
merge from tridge
------------------------------------------------------------
revno: 197.1.101
merged: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Ronnie Sahlberg <[EMAIL PROTECTED]>
branch nick: ctdb
timestamp: Fri 2007-05-11 10:36:47 +1000
message:
add a control to bump the rsn number for all records in a database
use this control from the recovery daemon to ensure that the recmaster
always have a higher rsn than andy other node for the records after
recovery completes
=== modified file 'common/ctdb_call.c'
--- a/common/ctdb_call.c 2007-05-15 00:16:59 +0000
+++ b/common/ctdb_call.c 2007-05-16 08:10:26 +0000
@@ -48,8 +48,8 @@
local version of ctdb_call
*/
int ctdb_call_local(struct ctdb_db_context *ctdb_db, struct ctdb_call *call,
- struct ctdb_ltdb_header *header, TDB_DATA *data,
- uint32_t caller)
+ struct ctdb_ltdb_header *header, TALLOC_CTX *mem_ctx,
+ TDB_DATA *data, uint32_t caller)
{
struct ctdb_call_info *c;
struct ctdb_registered_call *fn;
@@ -322,12 +322,10 @@
return;
}
- ctdb_call_local(ctdb_db, &state->call, &header, &data, ctdb->vnn);
+ ctdb_call_local(ctdb_db, &state->call, &header, state, &data,
ctdb->vnn);
ctdb_ltdb_unlock(ctdb_db, state->call.key);
- talloc_steal(state, state->call.reply_data.dptr);
-
state->state = CTDB_CALL_DONE;
if (state->async.fn) {
state->async.fn(state);
@@ -477,7 +475,7 @@
return;
}
- ctdb_call_local(ctdb_db, &call, &header, &data, c->hdr.srcnode);
+ ctdb_call_local(ctdb_db, &call, &header, hdr, &data, c->hdr.srcnode);
ctdb_ltdb_unlock(ctdb_db, call.key);
@@ -491,7 +489,6 @@
r->datalen = call.reply_data.dsize;
if (call.reply_data.dsize) {
memcpy(&r->data[0], call.reply_data.dptr,
call.reply_data.dsize);
- talloc_free(call.reply_data.dptr);
}
ctdb_queue_packet(ctdb, &r->hdr);
@@ -694,8 +691,7 @@
state->call = *call;
state->ctdb_db = ctdb_db;
- ret = ctdb_call_local(ctdb_db, &state->call, header, data, ctdb->vnn);
- talloc_steal(state, state->call.reply_data.dptr);
+ ret = ctdb_call_local(ctdb_db, &state->call, header, state, data,
ctdb->vnn);
event_add_timed(ctdb->ev, state, timeval_zero(), call_local_trigger,
state);
=== modified file 'common/ctdb_client.c'
--- a/common/ctdb_client.c 2007-05-12 11:25:26 +0000
+++ b/common/ctdb_client.c 2007-05-16 08:10:26 +0000
@@ -264,8 +264,7 @@
state->call = *call;
state->ctdb_db = ctdb_db;
- ret = ctdb_call_local(ctdb_db, &state->call, header, data, ctdb->vnn);
- talloc_steal(state, state->call.reply_data.dptr);
+ ret = ctdb_call_local(ctdb_db, &state->call, header, state, data,
ctdb->vnn);
return state;
}
@@ -706,6 +705,13 @@
ctdb_socket_connect(ctdb);
}
+ /* if the caller specified a timeout it makes no sense for the
+ daemon to requeue the packet if the destination is unavailable
+ */
+ if (timeout) {
+ flags |= CTDB_CTRL_FLAG_NOREQUEUE;
+ }
+
state = talloc_zero(ctdb, struct ctdb_client_control_state);
CTDB_NO_MEMORY(ctdb, state);
=== modified file 'common/ctdb_control.c'
--- a/common/ctdb_control.c 2007-05-15 00:17:16 +0000
+++ b/common/ctdb_control.c 2007-05-16 02:34:30 +0000
@@ -359,14 +359,19 @@
struct timeval t, void *private_data)
{
struct ctdb_control_state *state = talloc_get_type(private_data, struct
ctdb_control_state);
+ struct ctdb_req_control *c = (struct ctdb_req_control
*)state->private_data;
TALLOC_CTX *tmp_ctx = talloc_new(ev);
state->ctdb->status.timeouts.control++;
talloc_steal(tmp_ctx, state);
- state->callback(state->ctdb, -1, tdb_null, "ctdb_control timed out",
- state->private_data);
+ /* Dont retry the control if the caller asked for NOREQUEUE */
+ if (!(c->flags & CTDB_CTRL_FLAG_NOREQUEUE)) {
+ state->callback(state->ctdb, -1, tdb_null,
+ "ctdb_control timed out",
+ state->private_data);
+ }
talloc_free(tmp_ctx);
}
=== modified file 'common/ctdb_recover.c'
--- a/common/ctdb_recover.c 2007-05-14 03:48:40 +0000
+++ b/common/ctdb_recover.c 2007-05-14 04:05:49 +0000
@@ -449,3 +449,4 @@
ctdb->recovery_mode = recmode;
return 0;
}
+
=== modified file 'common/ctdb_recoverd.c'
--- a/common/ctdb_recoverd.c 2007-05-15 05:13:36 +0000
+++ b/common/ctdb_recoverd.c 2007-05-16 01:12:28 +0000
@@ -400,6 +400,7 @@
/* build a new vnn map with all the currently active nodes */
+ generation = random();
vnnmap = talloc(mem_ctx, struct ctdb_vnn_map);
CTDB_NO_MEMORY(ctdb, vnnmap);
vnnmap->generation = generation;
@@ -439,7 +440,6 @@
}
-
/* disable recovery mode */
ret = set_recovery_mode(ctdb, nodemap, CTDB_RECOVERY_NORMAL);
if (ret!=0) {
=== modified file 'include/ctdb.h'
--- a/include/ctdb.h 2007-05-15 05:13:36 +0000
+++ b/include/ctdb.h 2007-05-16 01:12:28 +0000
@@ -277,6 +277,11 @@
int ctdb_ctrl_cleardb(struct ctdb_context *ctdb, uint32_t destnode, TALLOC_CTX
*mem_ctx, uint32_t dbid);
/*
+ bump the rsn number for al records
+ */
+int ctdb_ctrl_bumprsn(struct ctdb_context *ctdb, struct timeval timeout,
uint32_t destnode, TALLOC_CTX *mem_ctx, uint32_t dbid);
+
+/*
write a record on a specific db (this implicitely updates dmaster of the
record to locally be the vnn of the node where the control is executed on)
*/
int ctdb_ctrl_write_record(struct ctdb_context *ctdb, uint32_t destnode,
TALLOC_CTX *mem_ctx, uint32_t dbid, TDB_DATA key, TDB_DATA data);
=== modified file 'include/ctdb_private.h'
--- a/include/ctdb_private.h 2007-05-15 05:13:36 +0000
+++ b/include/ctdb_private.h 2007-05-16 08:10:26 +0000
@@ -518,7 +518,8 @@
uint32_t opcode;
uint64_t srvid;
uint32_t client_id;
-#define CTDB_CTRL_FLAG_NOREPLY 1
+#define CTDB_CTRL_FLAG_NOREPLY 1
+#define CTDB_CTRL_FLAG_NOREQUEUE 2
uint32_t flags;
uint32_t datalen;
uint8_t data[1];
@@ -680,7 +681,7 @@
void ctdb_request_finished(struct ctdb_context *ctdb, struct ctdb_req_header
*hdr);
int ctdb_call_local(struct ctdb_db_context *ctdb_db, struct ctdb_call *call,
- struct ctdb_ltdb_header *header, TDB_DATA *data,
+ struct ctdb_ltdb_header *header, TALLOC_CTX *mem_ctx,
TDB_DATA *data,
uint32_t caller);
#define ctdb_reqid_find(ctdb, reqid, type) (type *)_ctdb_reqid_find(ctdb,
reqid, #type, __location__)