diff --git a/core/master_utils.c b/core/master_utils.c index 2130866d..b86fe0fb 100644 --- a/core/master_utils.c +++ b/core/master_utils.c @@ -1146,6 +1146,9 @@ struct uwsgi_stats *uwsgi_master_generate_stats() { if (uwsgi_stats_keylong_comma(us, "offloaded_requests", (unsigned long long) uc->offloaded_requests)) goto end; + if (uwsgi_stats_keylong_comma(us, "write_errors", (unsigned long long) uc->write_errors)) + goto end; + if (uwsgi_stats_keylong_comma(us, "in_request", (unsigned long long) uc->in_request)) goto end; diff --git a/core/utils.c b/core/utils.c index 8648560a..2aaa5457 100644 --- a/core/utils.c +++ b/core/utils.c @@ -625,6 +625,7 @@ void uwsgi_close_request(struct wsgi_request *wsgi_req) { uwsgi.workers[0].requests++; uwsgi.workers[uwsgi.mywid].requests++; uwsgi.workers[uwsgi.mywid].cores[wsgi_req->async_id].requests++; + uwsgi.workers[uwsgi.mywid].cores[wsgi_req->async_id].write_errors += wsgi_req->write_errors; // this is used for MAX_REQUESTS uwsgi.workers[uwsgi.mywid].delta_requests++; diff --git a/core/uwsgi.c b/core/uwsgi.c index 2e32e55f..54410ad2 100644 --- a/core/uwsgi.c +++ b/core/uwsgi.c @@ -93,7 +93,7 @@ static struct uwsgi_option uwsgi_base_options[] = { {"ignore-sigpipe", no_argument, 0, "do not report (annoying) SIGPIPE", uwsgi_opt_true, &uwsgi.ignore_sigpipe, 0}, {"ignore-write-errors", no_argument, 0, "do not report (annoying) write()/writev() errors", uwsgi_opt_true, &uwsgi.ignore_write_errors, 0}, - {"write-errors-tolerance", required_argument, 0, "set the maximum number of allowed write errors (default: no tolerance)", uwsgi_opt_set_int, &uwsgi.write_errors_tolerance, 0}, + {"write-errors-tolerance", required_argument, 0, "set the maximum number of allowed write errors (default: no tolerance)", uwsgi_opt_set_64bit, &uwsgi.write_errors_tolerance, 0}, {"write-errors-exception-only", no_argument, 0, "only raise an exception on write errors giving control to the app itself", uwsgi_opt_true, &uwsgi.write_errors_exception_only, 0}, {"disable-write-exception", no_argument, 0, "disable exception generation on write()/writev()", uwsgi_opt_true, &uwsgi.disable_write_exception, 0}, diff --git a/uwsgi.h b/uwsgi.h index 3fed7657..d1a397d0 100644 --- a/uwsgi.h +++ b/uwsgi.h @@ -1265,7 +1265,7 @@ struct uwsgi_cache { int async_plagued; int suspended; - int write_errors; + uint64_t write_errors; int *ovector; size_t post_cl; @@ -1647,7 +1647,7 @@ struct uwsgi_server { int ignore_sigpipe; int ignore_write_errors; - int write_errors_tolerance; + uint64_t write_errors_tolerance; int write_errors_exception_only; int disable_write_exception; @@ -2303,6 +2303,8 @@ struct uwsgi_rpc { uint64_t routed_requests; uint64_t offloaded_requests; + uint64_t write_errors; + pthread_t thread_id; int offload_rr;