Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 130701790bf2d95e902edf16031ff596 > files > 8

autofs-5.0.1-0.rc2.164.el5_8.src.rpm

5.0.3 - add replicated server selection debug logging

From: Ian Kent <raven@themaw.net>

Add some debug logging to the replicated server selection code.
---

 modules/replicated.c |   86 +++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 66 insertions(+), 20 deletions(-)


--- autofs-5.0.1.orig/modules/replicated.c
+++ autofs-5.0.1/modules/replicated.c
@@ -400,6 +400,10 @@ static unsigned int get_nfs_info(unsigne
 	double taken = 0;
 	int status, count = 0;
 
+	debug(logopt,
+	      "called for host %s proto %s version 0x%x",
+	      host->name, proto, version);
+
 	memset(&parms, 0, sizeof(struct pmap));
 
 	parms.pm_prog = NFS_PROGRAM;
@@ -424,11 +428,17 @@ static unsigned int get_nfs_info(unsigne
 		status = rpc_ping_proto(rpc_info);
 		gettimeofday(&end, &tz);
 		if (status) {
-			if (random_selection)
+			double reply;
+			if (random_selection) {
 				/* Random value between 0 and 1 */
-				taken += ((float) random())/((float) RAND_MAX+1);
-			else
-				taken += elapsed(start, end);;
+				reply = ((float) random())/((float) RAND_MAX+1);
+				debug(logopt,
+				      "nfs v4 random selection time: %f", reply);
+			} else {
+				reply = elapsed(start, end);
+				debug(logopt, "nfs v4 rpc ping time: %f", reply);
+			}
+			taken += reply;
 			count++;
 			supported = NFS4_SUPPORTED;
 		}
@@ -465,11 +475,17 @@ v3_ver:
 		status = rpc_ping_proto(rpc_info);
 		gettimeofday(&end, &tz);
 		if (status) {
-			if (random_selection)
+			double reply;
+			if (random_selection) {
 				/* Random value between 0 and 1 */
-				taken += ((float) random())/((float) RAND_MAX+1);
-			else
-				taken += elapsed(start, end);;
+				reply = ((float) random())/((float) RAND_MAX+1);
+				debug(logopt,
+				      "nfs v3 random selection time: %f", reply);
+			} else {
+				reply = elapsed(start, end);
+				debug(logopt, "nfs v3 rpc ping time: %f", reply);
+			}
+			taken += reply;
 			count++;
 			supported |= NFS3_SUPPORTED;
 		}
@@ -499,11 +515,17 @@ v2_ver:
 		status = rpc_ping_proto(rpc_info);
 		gettimeofday(&end, &tz);
 		if (status) {
-			if (random_selection)
+			double reply;
+			if (random_selection) {
 				/* Random value between 0 and 1 */
-				taken += ((float) random())/((float) RAND_MAX+1);
-			else
-				taken += elapsed(start, end);;
+				reply = ((float) random())/((float) RAND_MAX+1);
+				debug(logopt,
+				      "nfs v2 random selection time: %f", reply);
+			} else {
+				reply = elapsed(start, end);;
+				debug(logopt, "nfs v2 rpc ping time: %f", reply);
+			}
+			taken += reply;
 			count++;
 			supported |= NFS2_SUPPORTED;
 		}
@@ -528,6 +550,9 @@ done_ver:
 		/* Allow for user bias */
 		if (host->weight)
 			host->cost *= (host->weight + 1);
+
+		debug(logopt, "host %s cost %ld weight %d",
+		      host->name, host->cost, host->weight);
 	}
 
 	return supported;
@@ -596,6 +621,9 @@ static int get_supported_ver_and_cost(un
 	time_t timeout = RPC_TIMEOUT;
 	int status;
 
+	debug(logopt,
+	      "called with host %s version 0x%x", host->name, version);
+
 	memset(&pm_info, 0, sizeof(struct conn_info));
 	memset(&rpc_info, 0, sizeof(struct conn_info));
 	memset(&parms, 0, sizeof(struct pmap));
@@ -671,11 +699,14 @@ static int get_supported_ver_and_cost(un
 		status = rpc_ping_proto(&rpc_info);
 		gettimeofday(&end, &tz);
 		if (status) {
-			if (random_selection)
+			if (random_selection) {
 				/* Random value between 0 and 1 */
 				taken = ((float) random())/((float) RAND_MAX+1);
-			else
+				debug(logopt, "random selection time %f", taken);
+			} else {
 				taken = elapsed(start, end);
+				debug(logopt, "rpc ping time %f", taken);
+			}
 		}
 	}
 done:
@@ -695,6 +726,8 @@ done:
 		if (host->weight)
 			host->cost *= (host->weight + 1);
 
+		debug(logopt, "cost %ld weight %d", host->cost, host->weight);
+
 		return 1;
 	}
 
@@ -801,18 +834,31 @@ int prune_host_list(unsigned logopt, str
 	max_udp_count = mmax(v4_udp_count, v3_udp_count, v2_udp_count);
 	max_count = max(max_tcp_count, max_udp_count);
 
-	if (max_count == v4_tcp_count)
+	if (max_count == v4_tcp_count) {
 		selected_version = NFS4_TCP_SUPPORTED;
-	else if (max_count == v3_tcp_count)
+		debug(logopt,
+		      "selected subset of hosts that support NFS4 over TCP");
+	} else if (max_count == v3_tcp_count) {
 		selected_version = NFS3_TCP_SUPPORTED;
-	else if (max_count == v2_tcp_count)
+		debug(logopt,
+		      "selected subset of hosts that support NFS3 over TCP");
+	} else if (max_count == v2_tcp_count) {
 		selected_version = NFS2_TCP_SUPPORTED;
-	else if (max_count == v4_udp_count)
+		debug(logopt,
+		      "selected subset of hosts that support NFS2 over TCP");
+	} else if (max_count == v4_udp_count) {
 		selected_version = NFS4_UDP_SUPPORTED;
-	else if (max_count == v3_udp_count)
+		debug(logopt,
+		      "selected subset of hosts that support NFS4 over UDP");
+	} else if (max_count == v3_udp_count) {
 		selected_version = NFS3_UDP_SUPPORTED;
-	else if (max_count == v2_udp_count)
+		debug(logopt,
+		      "selected subset of hosts that support NFS3 over UDP");
+	} else if (max_count == v2_udp_count) {
 		selected_version = NFS2_UDP_SUPPORTED;
+		debug(logopt,
+		      "selected subset of hosts that support NFS2 over UDP");
+	}
 
 	/* Add local and hosts with selected version to new list */
 	this = *list;