------------------------------------------------------------
revno: 525
revision-id: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Andrew Tridgell <[EMAIL PROTECTED]>
branch nick: tridge
timestamp: Sun 2007-06-10 08:46:33 +1000
message:
  - send tcp info to all connected nodes, not just vnnmap nodes
  - use a non-blocking freeze when banned
  - release all IPs when banned
modified:
  include/ctdb_private.h         
ctdb_private.h-20061117234101-o3qt14umlg9en8z0-13
  server/ctdb_daemon.c           ctdb_daemon.c-20070409200331-3el1kqgdb9m4ib0g-1
  server/ctdb_freeze.c           ctdb_freeze.c-20070512051503-935zdtyuqknqnhmo-1
  server/ctdb_monitor.c          
ctdb_monitor.c-20070518100625-8jf4ft1mjzmb22ck-1
  takeover/ctdb_takeover.c       
ctdb_takeover.c-20070525071636-a5n1ihghjtppy08r-2
=== modified file 'include/ctdb_private.h'
--- a/include/ctdb_private.h    2007-06-07 08:07:38 +0000
+++ b/include/ctdb_private.h    2007-06-09 22:46:33 +0000
@@ -1022,4 +1022,6 @@
                               uint32_t destnode,
                               struct ctdb_tunable *tunables);
 
+void ctdb_start_freeze(struct ctdb_context *ctdb);
+
 #endif

=== modified file 'server/ctdb_daemon.c'
--- a/server/ctdb_daemon.c      2007-06-07 12:06:19 +0000
+++ b/server/ctdb_daemon.c      2007-06-09 22:46:33 +0000
@@ -54,6 +54,12 @@
                (ctdb->nodes[c->vnn]->flags&NODE_FLAGS_DISCONNECTED) 
                | (c->flags & ~NODE_FLAGS_DISCONNECTED);        
        DEBUG(2,("Node flags for node %u are now 0x%x\n", c->vnn, 
ctdb->nodes[c->vnn]->flags));
+
+       /* make sure we don't hold any IPs when we shouldn't */
+       if (c->vnn == ctdb->vnn &&
+           (ctdb->nodes[c->vnn]->flags & 
(NODE_FLAGS_INACTIVE|NODE_FLAGS_BANNED))) {
+               ctdb_release_all_ips(ctdb);
+       }
 }
 
 /* called when the "startup" event script has finished */

=== modified file 'server/ctdb_freeze.c'
--- a/server/ctdb_freeze.c      2007-06-07 12:06:19 +0000
+++ b/server/ctdb_freeze.c      2007-06-09 22:46:33 +0000
@@ -182,6 +182,24 @@
 }
 
 /*
+  start the freeze process
+ */
+void ctdb_start_freeze(struct ctdb_context *ctdb)
+{
+       if (ctdb->freeze_mode == CTDB_FREEZE_FROZEN) {
+               /* we're already frozen */
+               return;
+       }
+
+       /* if there isn't a freeze lock child then create one */
+       if (!ctdb->freeze_handle) {
+               ctdb->freeze_handle = ctdb_freeze_lock(ctdb);
+               CTDB_NO_MEMORY_VOID(ctdb, ctdb->freeze_handle);
+               ctdb->freeze_mode = CTDB_FREEZE_PENDING;
+       }
+}
+
+/*
   freeze the databases
  */
 int32_t ctdb_control_freeze(struct ctdb_context *ctdb, struct ctdb_req_control 
*c, bool *async_reply)
@@ -193,12 +211,7 @@
                return 0;
        }
 
-       /* if there isn't a freeze lock child then create one */
-       if (!ctdb->freeze_handle) {
-               ctdb->freeze_handle = ctdb_freeze_lock(ctdb);
-               CTDB_NO_MEMORY(ctdb, ctdb->freeze_handle);
-               ctdb->freeze_mode = CTDB_FREEZE_PENDING;
-       }
+       ctdb_start_freeze(ctdb);
 
        /* add ourselves to list of waiters */
        w = talloc(ctdb->freeze_handle, struct ctdb_freeze_waiter);
@@ -220,17 +233,7 @@
  */
 bool ctdb_blocking_freeze(struct ctdb_context *ctdb)
 {
-       if (ctdb->freeze_mode == CTDB_FREEZE_FROZEN) {
-               /* we're already frozen */
-               return true;
-       }
-
-       /* if there isn't a freeze lock child then create one */
-       if (!ctdb->freeze_handle) {
-               ctdb->freeze_handle = ctdb_freeze_lock(ctdb);
-               CTDB_NO_MEMORY(ctdb, ctdb->freeze_handle);
-               ctdb->freeze_mode = CTDB_FREEZE_PENDING;
-       }
+       ctdb_start_freeze(ctdb);
 
        /* block until frozen */
        while (ctdb->freeze_mode == CTDB_FREEZE_PENDING) {

=== modified file 'server/ctdb_monitor.c'
--- a/server/ctdb_monitor.c     2007-06-09 11:58:50 +0000
+++ b/server/ctdb_monitor.c     2007-06-09 22:46:33 +0000
@@ -219,9 +219,8 @@
        if ((node->flags & NODE_FLAGS_BANNED) && !(old_flags & 
NODE_FLAGS_BANNED)) {
                /* make sure we are frozen */
                DEBUG(0,("This node has been banned - forcing freeze and 
recovery\n"));
-               if (!ctdb_blocking_freeze(ctdb)) {
-                       ctdb_fatal(ctdb, "Unable to freeze when banned");
-               }
+               ctdb_start_freeze(ctdb);
+               ctdb_release_all_ips(ctdb);
                ctdb->recovery_mode = CTDB_RECOVERY_ACTIVE;
        }
        

=== modified file 'takeover/ctdb_takeover.c'
--- a/takeover/ctdb_takeover.c  2007-06-09 11:47:06 +0000
+++ b/takeover/ctdb_takeover.c  2007-06-09 22:46:33 +0000
@@ -247,7 +247,7 @@
                        data.dptr = (uint8_t *)&t;
                        data.dsize = sizeof(t);
 
-                       ctdb_daemon_send_control(ctdb, CTDB_BROADCAST_VNNMAP, 
0, 
+                       ctdb_daemon_send_control(ctdb, 
CTDB_BROADCAST_CONNECTED, 0, 
                                                 CTDB_CONTROL_TCP_ADD,
                                                 0, CTDB_CTRL_FLAG_NOREPLY, 
data, NULL, NULL);
                }
@@ -469,7 +469,6 @@
 
        /* at this point ctdb->nodes[i]->takeover_vnn is the vnn which will own 
each IP */
 
-
        /* now tell all nodes to delete any alias that they should not
           have.  This will be a NOOP on nodes that don't currently
           hold the given alias */
@@ -557,7 +556,7 @@
        data.dsize = sizeof(t);
 
        /* tell all nodes about this tcp connection */
-       ret = ctdb_daemon_send_control(ctdb, CTDB_BROADCAST_VNNMAP, 0, 
+       ret = ctdb_daemon_send_control(ctdb, CTDB_BROADCAST_CONNECTED, 0, 
                                       CTDB_CONTROL_TCP_ADD,
                                       0, CTDB_CTRL_FLAG_NOREPLY, data, NULL, 
NULL);
        if (ret != 0) {
@@ -703,7 +702,7 @@
                p.dest = tcp->daddr;
                data.dptr = (uint8_t *)&p;
                data.dsize = sizeof(p);
-               ctdb_daemon_send_control(client->ctdb, CTDB_BROADCAST_VNNMAP, 
0, 
+               ctdb_daemon_send_control(client->ctdb, 
CTDB_BROADCAST_CONNECTED, 0, 
                                         CTDB_CONTROL_TCP_REMOVE,
                                         0, CTDB_CTRL_FLAG_NOREPLY, data, NULL, 
NULL);
                talloc_free(tcp);

Reply via email to