You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by mt...@apache.org on 2006/09/02 09:16:21 UTC
svn commit: r439553 - in /tomcat/connectors/trunk/jk/native/common:
jk_ajp_common.c jk_ajp_common.h
Author: mturk
Date: Sat Sep 2 00:16:21 2006
New Revision: 439553
URL: http://svn.apache.org/viewvc?rev=439553&view=rev
Log:
Add last socket errno structure element, so we can
log the OS failure codes. Make logging more verbose
when client connection is aborted or client simply
disconnected.
Modified:
tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c
tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h
Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c?rev=439553&r1=439552&r2=439553&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c Sat Sep 2 00:16:21 2006
@@ -841,6 +841,7 @@
ae->worker->socket_timeout,
ae->worker->socket_buf, l);
if (IS_VALID_SOCKET(ae->sd)) {
+ ae->last_errno = 0;
if (JK_IS_DEBUG_LEVEL(l)) {
jk_log(l, JK_LOG_DEBUG,
"Connected socket %d to (%s)",
@@ -866,6 +867,7 @@
JK_TRACE_EXIT(l);
return JK_TRUE;
}
+ ae->last_errno = errno;
jk_log(l, JK_LOG_INFO,
"Failed opening socket to (%s) with (errno=%d)",
@@ -905,10 +907,12 @@
msg->len)) > 0) {
ae->endpoint.wr += msg->len;
JK_TRACE_EXIT(l);
+ ae->last_errno = 0;
return JK_TRUE;
}
+ ae->last_errno = errno;
jk_log(l, JK_LOG_ERROR,
- "sendfull returned %d with errno=%d ", rc, errno);
+ "sendfull returned %d with errno=%d ", rc, ae->last_errno);
JK_TRACE_EXIT(l);
return JK_FALSE;
@@ -932,6 +936,7 @@
rc = jk_tcp_socket_recvfull(ae->sd, head, AJP_HEADER_LEN);
if (rc < 0) {
+ ae->last_errno = errno;
if (rc == JK_SOCKET_EOF) {
jk_log(l, JK_LOG_INFO,
"Tomcat has forced a connection close for socket %d",
@@ -947,6 +952,7 @@
}
return JK_FALSE;
}
+ ae->last_errno = 0;
ae->endpoint.rd += rc;
header = ((unsigned int)head[0] << 8) | head[1];
@@ -1004,6 +1010,7 @@
rc = jk_tcp_socket_recvfull(ae->sd, msg->buf, msglen);
if (rc < 0) {
+ ae->last_errno = errno;
jk_log(l, JK_LOG_ERROR,
"ERROR: can't receive the response message from tomcat, "
"network problems or tomcat (%s) is down %d",
@@ -1011,6 +1018,7 @@
JK_TRACE_EXIT(l);
return JK_FALSE;
}
+ ae->last_errno = 0;
ae->endpoint.rd += rc;
if (ae->proto == AJP13_PROTO) {
@@ -1157,8 +1165,8 @@
if (ae->worker->socket_timeout) {
if (!jk_is_socket_connected(ae->sd)) {
jk_log(l, JK_LOG_INFO,
- "Socket %d is not connected any more",
- ae->sd);
+ "Socket %d is not connected any more (errno=%d)",
+ ae->sd, ae->last_errno);
jk_close_socket(ae->sd);
ae->sd = JK_INVALID_SOCKET;
err++;
@@ -1220,7 +1228,8 @@
jk_close_socket(ae->sd);
ae->sd = -1;
jk_log(l, JK_LOG_INFO,
- "Error sending request on a fresh connection");
+ "Error sending request on a fresh connection (errno=%d)",
+ ae->last_errno);
JK_TRACE_EXIT(l);
return JK_FALSE;
}
@@ -1230,7 +1239,8 @@
jk_close_socket(ae->sd);
ae->sd = JK_INVALID_SOCKET;
jk_log(l, JK_LOG_INFO,
- "Error connecting to the backend server.");
+ "Error connecting to the backend server (errno=%d)",
+ ae->last_errno);
JK_TRACE_EXIT(l);
return JK_FALSE;
}
@@ -1261,7 +1271,7 @@
/* Close the socket if unable to send request */
jk_close_socket(ae->sd);
ae->sd = JK_INVALID_SOCKET;
- jk_log(l, JK_LOG_ERROR, "Error resending request body (%d)",
+ jk_log(l, JK_LOG_ERROR, "failed resending request body (%d)",
postlen);
JK_TRACE_EXIT(l);
return JK_SERVER_ERROR;
@@ -1282,7 +1292,7 @@
jk_close_socket(ae->sd);
ae->sd = -1;
jk_log(l, JK_LOG_ERROR,
- "Error resending request body (lb mode) (%d)",
+ "failed resending request body (lb mode) (%d)",
postlen);
JK_TRACE_EXIT(l);
return JK_SERVER_ERROR;
@@ -1391,9 +1401,9 @@
}
if (!r->write(r, msg->buf + msg->pos, len)) {
jk_log(l, JK_LOG_INFO,
- "Backend connection aborted or network problems");
+ "Writing to client aborted or client network problems");
JK_TRACE_EXIT(l);
- return JK_SERVER_ERROR;
+ return JK_CLIENT_ERROR;
}
if (r->flush && r->flush_packets)
r->flush(r);
@@ -1422,7 +1432,7 @@
}
jk_log(l, JK_LOG_INFO,
- "Client connection aborted or network problems");
+ "Reding from client aborted or client network problems");
JK_TRACE_EXIT(l);
return JK_CLIENT_ERROR;
@@ -1436,7 +1446,7 @@
* AJP13 protocol reuse flag set to false.
* Tomcat will close its side of the connection.
*/
- jk_log(l, JK_LOG_INFO, "AJP13 protocol: Reuse is set to false");
+ jk_log(l, JK_LOG_WARNING, "AJP13 protocol: Reuse is set to false");
}
else if (r->disable_reuse) {
ae->reuse = JK_FALSE;
@@ -1597,6 +1607,15 @@
return JK_FALSE;
}
}
+ else if (JK_AJP13_ERROR == rc) {
+ /*
+ * Tomcat has send invalid AJP message.
+ * Locadbalancer if present will decide if
+ * failover is possible.
+ */
+ JK_TRACE_EXIT(l);
+ return JK_SERVER_ERROR;
+ }
else if (JK_FATAL_ERROR == rc) {
/*
* we won't be able to gracefully recover from this so
@@ -1620,10 +1639,8 @@
else if (JK_SERVER_ERROR == rc) {
/*
* Tomcat has stop talking to us, so get out.
- * We assume this isn't our fault, so just a normal exit.
- * In most (all?) cases, the ajp13_endpoint::reuse will still be
- * false here, so this will be functionally the same as an
- * un-recoverable error. We just won't log it as such.
+ * Locadbalancer if present will decide if
+ * failover is possible.
*/
JK_TRACE_EXIT(l);
return JK_SERVER_ERROR;
@@ -1739,8 +1756,12 @@
if (err == JK_CLIENT_ERROR) {
*is_error = JK_HTTP_BAD_REQUEST;
+ if (p->worker->recovery_opts & RECOVER_ABORT_IF_CLIENTERROR) {
+ /* Mark the endpoint for shutdown */
+ p->reuse = JK_FALSE;
+ }
jk_log(l, JK_LOG_INFO,
- "Receiving from tomcat failed, "
+ "request failed, "
"because of client error "
"without recovery in send loop %d", i);
JK_TRACE_EXIT(l);
@@ -1749,7 +1770,8 @@
else if (err == JK_SERVER_ERROR) {
*is_error = JK_HTTP_SERVER_ERROR;
jk_log(l, JK_LOG_INFO,
- "Sending to tomcat failed, "
+ "request failed, "
+ "because of client error "
"without recovery in send loop %d", i);
JK_TRACE_EXIT(l);
return JK_SERVER_ERROR;
Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h?rev=439553&r1=439552&r2=439553&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h Sat Sep 2 00:16:21 2006
@@ -311,6 +311,7 @@
/* time of the last request
handled by this endpoint */
time_t last_access;
+ int last_errno;
};
/*
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org