Rev 567: call kill_clients when releasing all IPs,
as well as for individual IPs in http://samba.org/~tridge/ctdb
tridge at samba.org
tridge at samba.org
Sun Jul 8 10:45:12 GMT 2007
------------------------------------------------------------
revno: 567
revision-id: tridge at samba.org-20070708104512-w67iwrvl7cob139s
parent: tridge at samba.org-20070708102403-p29l9sq76g3jc556
committer: Andrew Tridgell <tridge at samba.org>
branch nick: tridge
timestamp: Sun 2007-07-08 20:45:12 +1000
message:
call kill_clients when releasing all IPs, as well as for individual IPs
modified:
server/ctdb_takeover.c ctdb_takeover.c-20070525071636-a5n1ihghjtppy08r-2
=== modified file 'server/ctdb_takeover.c'
--- a/server/ctdb_takeover.c 2007-07-08 10:24:03 +0000
+++ b/server/ctdb_takeover.c 2007-07-08 10:45:12 +0000
@@ -224,19 +224,19 @@
/*
kill any clients that are registered with a IP that is being released
*/
-static void release_kill_clients(struct ctdb_context *ctdb, struct sockaddr_in *sin)
+static void release_kill_clients(struct ctdb_context *ctdb, struct in_addr in)
{
struct ctdb_client_ip *ip;
for (ip=ctdb->client_ip_list; ip; ip=ip->next) {
- if (ip->ip.sin_addr.s_addr == sin->sin_addr.s_addr) {
+ if (ip->ip.sin_addr.s_addr == in.s_addr) {
struct ctdb_client *client = ctdb_reqid_find(ctdb,
ip->client_id,
struct ctdb_client);
if (client->pid != 0) {
DEBUG(0,(__location__ " Killing client pid %u for IP %s on client_id %u\n",
- (unsigned)client->pid, inet_ntoa(sin->sin_addr),
- ip->client_id));
+ (unsigned)client->pid, inet_ntoa(in),
+ ip->client_id));
kill(client->pid, SIGKILL);
}
}
@@ -266,7 +266,7 @@
ctdb_daemon_send_message(ctdb, ctdb->vnn, CTDB_SRVID_RELEASE_IP, data);
/* kill clients that have registered with this IP */
- release_kill_clients(ctdb, state->sin);
+ release_kill_clients(ctdb, state->sin->sin_addr);
/* tell other nodes about any tcp connections we were holding with this IP */
@@ -780,10 +780,14 @@
for (i=0;i<ctdb->num_nodes;i++) {
struct ctdb_node *node = ctdb->nodes[i];
if (ctdb_sys_have_ip(node->public_address)) {
+ struct in_addr in;
ctdb_event_script(ctdb, "releaseip %s %s %u",
ctdb->takeover.interface,
node->public_address,
node->public_netmask_bits);
+ if (inet_aton(node->public_address, &in) == 0) {
+ release_kill_clients(ctdb, in);
+ }
}
}
}
More information about the samba-cvs
mailing list