Index: /branches/rel_apv_10_7/usr/click/lib/libhttp_proxy/client_states.c
===================================================================
--- /branches/rel_apv_10_7/usr/click/lib/libhttp_proxy/client_states.c	(revision 39012)
+++ /branches/rel_apv_10_7/usr/click/lib/libhttp_proxy/client_states.c	(working copy)
@@ -531,14 +531,18 @@
 	
 	if (conn_mode != PROXY_MODE_TRANSPARENT && !conn_noreuse) {
 		/* reuse only non-transparent connections */
+		int is_server_writable = 0;
+
 		TAILQ_FOREACH(server_conn_data, &(http_conn_pools[slb_rs_p->rs_id].idle_conn_q), next_idle_conn) {
 
+			is_server_writable = amp_conn_is_writable(PROXY_CONNP(server_conn_data));
+
 			/* If port range RS or IP RS, need to check the port */
 			if (((slb_rs_p->port == 0 && AMP_REMOTE_PORT(PROXY_CONNP(server_conn_data))
 			      == AMP_LOCAL_PORT(PROXY_CONNP(client_conn_data))) || slb_rs_p->port != 0)
 			    &&
-			    amp_conn_is_writable(PROXY_CONNP(server_conn_data)) &&
-			    server_conn_data->http_peer == NULL 
+			    is_server_writable &&
+			    server_conn_data->http_peer == NULL
 			    && is_conn_valid(server_conn_data, slb_rs_p->rs_id)) {
 				if (sf_on() && PCB_SSF_STANDBY(client_pcb)) {
 					/* if the connection is different from ssf peer, continue to search */
@@ -613,6 +617,22 @@
 					}
 				}
 				return SLB_SERVER_FOUND;
+			} else {
+				/* log why we are not reusing server conn */
+				if (!((slb_rs_p->port == 0 &&
+				       AMP_REMOTE_PORT(PROXY_CONNP(server_conn_data)) == AMP_LOCAL_PORT(PROXY_CONNP(client_conn_data)))
+				      || slb_rs_p->port != 0)) {
+					ulog_error_conn(PROXY_CONNP(server_conn_data), AMP_ULOG_HTTP_PROXY,
+							"no reuse(%d) wrong port", server_conn_data->conn_reuse_count);
+				} else if (!is_server_writable) {
+					ulog_error_conn(PROXY_CONNP(server_conn_data), AMP_ULOG_HTTP_PROXY,
+							"no reuse(%d) server is not WRT", server_conn_data->conn_reuse_count);
+				} else if (server_conn_data->http_peer != NULL) {
+					ulog_error_conn(PROXY_CONNP(server_conn_data), AMP_ULOG_HTTP_PROXY,
+							"no reuse(%d) server with peer", server_conn_data->conn_reuse_count);
+				} else {
+					/* the no reuse reason logged inside of conn_is_valid */
+				}
 			}
 		}
 	}
@@ -629,6 +649,8 @@
 	  */
 	if (slb_real_is_overloaded(slb_rs_p->rs_id)) {
 		hp_error("slb connection limit reached on %s", slb_rs_p->name);
+		ulog_error_conn(PROXY_CONNP(server_conn_data), AMP_ULOG_HTTP_PROXY,
+				"slb connection limit reached on %s", slb_rs_p->name);
 		AMP_PRX_APP_ERR_STAT_INC(err_slb_real_limit_reached);
 	}
 	if (create_new_server_conn(client_conn_data, slb_member_p,
Index: /branches/rel_apv_10_7/usr/click/lib/libhttp_proxy/http_proxy.c
===================================================================
--- /branches/rel_apv_10_7/usr/click/lib/libhttp_proxy/http_proxy.c	(revision 39012)
+++ /branches/rel_apv_10_7/usr/click/lib/libhttp_proxy/http_proxy.c	(working copy)
@@ -1598,11 +1598,15 @@
 			if (slb_rs_table[i].conn_reuse_limit == 0) {
 				if ((pc->max_num_req != 0) && 
 					(conn_data->conn_reuse_count >= pc->max_num_req)) {
+					ulog_error_conn(PROXY_CONNP(conn_data), AMP_ULOG_HTTP_PROXY,
+							"1 expire conn (%d)", conn_data->conn_reuse_count);
 					close_connection(conn_data, PROXY_CONN_ABORT, RST_ID_UPROXY_187);
 					continue;
 				} 
 			} else {
 				if (conn_data->conn_reuse_count >= slb_rs_table[i].conn_reuse_limit) {
+					ulog_error_conn(PROXY_CONNP(conn_data), AMP_ULOG_HTTP_PROXY,
+							"2 expire conn (%d)", conn_data->conn_reuse_count);
 					close_connection(conn_data, PROXY_CONN_ABORT, RST_ID_UPROXY_187);
 					continue;
 				}	
@@ -1612,10 +1616,14 @@
 			if (slb_rs_table[i].conn_reuse_timeout == 0) {
 				if ((pc->connreuse_timeout != 0) &&
 					(pass_time >= pc->connreuse_timeout)) {
+					ulog_error_conn(PROXY_CONNP(conn_data), AMP_ULOG_HTTP_PROXY,
+							"3 expire conn (%d)", conn_data->conn_reuse_count);
 					close_connection(conn_data, PROXY_CONN_ABORT, RST_ID_UPROXY_188);
 				} 
 			} else {
 				if (pass_time >= slb_rs_table[i].conn_reuse_timeout) {
+					ulog_error_conn(PROXY_CONNP(conn_data), AMP_ULOG_HTTP_PROXY,
+							"4 expire conn (%d)", conn_data->conn_reuse_count);
 					close_connection(conn_data, PROXY_CONN_ABORT, RST_ID_UPROXY_188);
 				}	
 			}	
Index: /branches/rel_apv_10_7/usr/click/lib/libhttp_proxy/misc.c
===================================================================
--- /branches/rel_apv_10_7/usr/click/lib/libhttp_proxy/misc.c	(revision 39012)
+++ /branches/rel_apv_10_7/usr/click/lib/libhttp_proxy/misc.c	(working copy)
@@ -6772,10 +6772,16 @@
 	if (slb_rs_table[rs_id].conn_reuse_limit == 0) {
 		if ((pc->max_num_req != 0) && 
 			(conn_data->conn_reuse_count >= pc->max_num_req)) {
+			ulog_error_conn(PROXY_CONNP(conn_data), AMP_ULOG_HTTP_PROXY,
+					"1 no reuse(%d) max req reached %d",
+					conn_data->conn_reuse_count, pc->max_num_req);
 			return 0;
 		} 
 	} else {
 		if (conn_data->conn_reuse_count >= slb_rs_table[rs_id].conn_reuse_limit) {
+			ulog_error_conn(PROXY_CONNP(conn_data), AMP_ULOG_HTTP_PROXY,
+					"2 no reuse(%d), max req reached %d",
+					conn_data->conn_reuse_count, slb_rs_table[rs_id].conn_reuse_limit);
 			return 0;
 		}	
 	}
@@ -6784,10 +6790,14 @@
 	if (slb_rs_table[rs_id].conn_reuse_timeout == 0) {
 		if ((pc->connreuse_timeout != 0) &&
 			(pass_time >= pc->connreuse_timeout)) {
+				ulog_error_conn(PROXY_CONNP(conn_data), AMP_ULOG_HTTP_PROXY,
+						"3 no reuse(%d)! conn timeout", conn_data->conn_reuse_count);
 				return 0;
 		} 
 	} else {
 		if (pass_time >= slb_rs_table[rs_id].conn_reuse_timeout) {
+			ulog_error_conn(PROXY_CONNP(conn_data), AMP_ULOG_HTTP_PROXY,
+					"4 no reuse(%d), conn timeout", conn_data->conn_reuse_count);
 			return 0;
 		}	
 	}
