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