summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGarrett Rooney <rooneg@apache.org>2006-01-23 15:57:03 +0000
committerGarrett Rooney <rooneg@apache.org>2006-01-23 15:57:03 +0000
commit769ceff431b0351ee5527d9ff5db8eb7c32ac38e (patch)
treed44e2a17ac06fb6e8b27da93a1b38203158e0e77
parentfee8affb5299a572edc2819dd074e3c47990a19d (diff)
downloadhttpd-769ceff431b0351ee5527d9ff5db8eb7c32ac38e.tar.gz
Update the proxy worker stats when we read/write data from/to the back
end fastcgi process. * modules/proxy/mod_proxy_fcgi.c (send_data, get_data): New wrapper functions that do the sendv/recv stuff and then update the proper statistics. (send_begin_request, send_environment, dispatch): Use send_data/get_data. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@371560 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--modules/proxy/mod_proxy_fcgi.c50
1 files changed, 37 insertions, 13 deletions
diff --git a/modules/proxy/mod_proxy_fcgi.c b/modules/proxy/mod_proxy_fcgi.c
index a62cdfb00c..f796301fd0 100644
--- a/modules/proxy/mod_proxy_fcgi.c
+++ b/modules/proxy/mod_proxy_fcgi.c
@@ -142,6 +142,35 @@ static void fill_in_header(fcgi_header *header,
header->reserved = 0;
}
+/* Wrapper for apr_socket_sendv that handles updating the worker stats. */
+static apr_status_t send_data(proxy_conn_rec *conn,
+ struct iovec *vec,
+ int nvec,
+ apr_size_t *len)
+{
+ apr_status_t rv = apr_socket_sendv(conn->sock, vec, nvec, len);
+
+ if (! rv) {
+ conn->worker->s->transferred += *len;
+ }
+
+ return rv;
+}
+
+/* Wrapper for apr_socket_recv that handles updating the worker stats. */
+static apr_status_t get_data(proxy_conn_rec *conn,
+ char *buffer,
+ apr_size_t *buflen)
+{
+ apr_status_t rv = apr_socket_recv(conn->sock, buffer, buflen);
+
+ if (! rv) {
+ conn->worker->s->read += *buflen;
+ }
+
+ return rv;
+}
+
static apr_status_t send_begin_request(proxy_conn_rec *conn, int request_id)
{
struct iovec vec[2];
@@ -165,7 +194,7 @@ static apr_status_t send_begin_request(proxy_conn_rec *conn, int request_id)
vec[1].iov_base = abrb;
vec[1].iov_len = sizeof(abrb);
- return apr_socket_sendv(conn->sock, vec, 2, &len);
+ return send_data(conn, vec, 2, &len);
}
static apr_status_t send_environment(proxy_conn_rec *conn, request_rec *r,
@@ -284,7 +313,7 @@ static apr_status_t send_environment(proxy_conn_rec *conn, request_rec *r,
vec[1].iov_base = body;
vec[1].iov_len = bodylen;
- rv = apr_socket_sendv(conn->sock, vec, 2, &len);
+ rv = send_data(conn, vec, 2, &len);
if (rv) {
return rv;
}
@@ -295,7 +324,7 @@ static apr_status_t send_environment(proxy_conn_rec *conn, request_rec *r,
vec[0].iov_base = farray;
vec[0].iov_len = sizeof(farray);
- return apr_socket_sendv(conn->sock, vec, 1, &len);
+ return send_data(conn, vec, 1, &len);
}
enum {
@@ -529,14 +558,11 @@ static apr_status_t dispatch(proxy_conn_rec *conn, request_rec *r,
/* XXX This should be nonblocking, and if we don't write all
* the data we need to keep track of that fact so we can
* get to it next time through. */
- rv = apr_socket_sendv(conn->sock, vec, 2, &len);
+ rv = send_data(conn, vec, 2, &len);
if (rv != APR_SUCCESS) {
break;
}
- /* XXX AJP updates conn->worker->s->transferred here, do we need
- * to? */
-
if (last_stdin) {
pfd.reqevents = APR_POLLIN; /* Done with input data */
@@ -546,7 +572,7 @@ static apr_status_t dispatch(proxy_conn_rec *conn, request_rec *r,
vec[0].iov_base = farray;
vec[0].iov_len = sizeof(farray);
- rv = apr_socket_sendv(conn->sock, vec, 1, &len);
+ rv = send_data(conn, vec, 1, &len);
}
}
@@ -567,7 +593,7 @@ static apr_status_t dispatch(proxy_conn_rec *conn, request_rec *r,
/* First, we grab the header... */
readbuflen = FCGI_HEADER_LEN;
- rv = apr_socket_recv(conn->sock, (char *) farray, &readbuflen);
+ rv = get_data(conn, (char *) farray, &readbuflen);
if (rv != APR_SUCCESS) {
break;
}
@@ -622,7 +648,7 @@ recv_again:
* recv call, this will eventually change when we move to real
* nonblocking recv calls. */
if (readbuflen != 0) {
- rv = apr_socket_recv(conn->sock, readbuf, &readbuflen);
+ rv = get_data(conn, readbuf, &readbuflen);
if (rv != APR_SUCCESS) {
break;
}
@@ -650,8 +676,6 @@ recv_again:
}
}
- /* XXX Update conn->worker->s->read like AJP does */
-
if (seen_end_of_headers) {
rv = ap_pass_brigade(r->output_filters, ob);
if (rv != APR_SUCCESS) {
@@ -713,7 +737,7 @@ recv_again:
if (plen) {
readbuflen = plen;
- rv = apr_socket_recv(conn->sock, readbuf, &readbuflen);
+ rv = get_data(conn, readbuf, &readbuflen);
if (rv != APR_SUCCESS) {
break;
}