------------------------------------------------------------
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__)

Reply via email to