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