summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorYann Ylavic <ylavic@apache.org>2023-07-07 13:00:34 +0200
committerYann Ylavic <ylavic@apache.org>2023-07-07 13:00:34 +0200
commitb24195a1f212e91e162a9c107e03733b6d03e7a5 (patch)
tree049fa7b0cab1c80925e1ecaa192524f7a44bc03d /server
parentpytests: Ignore log errors/warnings per function. (diff)
downloadapache2-b24195a1f212e91e162a9c107e03733b6d03e7a5.tar.xz
apache2-b24195a1f212e91e162a9c107e03733b6d03e7a5.zip
util_filter: More useful logging for brigade setaside/reinstate/adopt.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1910846 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'server')
-rw-r--r--server/util_filter.c86
1 files changed, 49 insertions, 37 deletions
diff --git a/server/util_filter.c b/server/util_filter.c
index 8c278293cf..3b1e96fb44 100644
--- a/server/util_filter.c
+++ b/server/util_filter.c
@@ -949,12 +949,14 @@ AP_DECLARE(apr_status_t) ap_filter_setaside_brigade(ap_filter_t *f,
apr_status_t rv = APR_SUCCESS;
struct ap_filter_private *fp = f->priv;
- ap_log_cerror(APLOG_MARK, APLOG_TRACE6, 0, f->c,
- "setaside %s brigade to %s brigade in '%s' %sput filter",
- APR_BRIGADE_EMPTY(bb) ? "empty" : "full",
- (!fp->bb || APR_BRIGADE_EMPTY(fp->bb)) ? "empty" : "full",
- f->frec->name,
- f->frec->direction == AP_FILTER_INPUT ? "in" : "out");
+ if (!APR_BRIGADE_EMPTY(bb) || (fp->bb && !APR_BRIGADE_EMPTY(fp->bb))) {
+ ap_log_cerror(APLOG_MARK, APLOG_TRACE6, 0, f->c,
+ "setaside %s brigade to %s brigade in '%s' %sput filter",
+ APR_BRIGADE_EMPTY(bb) ? "empty" : "full",
+ (!fp->bb || APR_BRIGADE_EMPTY(fp->bb)) ? "empty" : "full",
+ f->frec->name,
+ f->frec->direction == AP_FILTER_INPUT ? "in" : "out");
+ }
/* This API is not suitable for request filters */
if (f->frec->ftype < AP_FTYPE_CONNECTION) {
@@ -1049,12 +1051,14 @@ AP_DECLARE(void) ap_filter_adopt_brigade(ap_filter_t *f,
{
struct ap_filter_private *fp = f->priv;
- ap_log_cerror(APLOG_MARK, APLOG_TRACE6, 0, f->c,
- "adopt %s brigade to %s brigade in '%s' %sput filter",
- APR_BRIGADE_EMPTY(bb) ? "empty" : "full",
- (!fp->bb || APR_BRIGADE_EMPTY(fp->bb)) ? "empty" : "full",
- f->frec->name,
- f->frec->direction == AP_FILTER_INPUT ? "in" : "out");
+ if (!APR_BRIGADE_EMPTY(bb) || (fp->bb && !APR_BRIGADE_EMPTY(fp->bb))) {
+ ap_log_cerror(APLOG_MARK, APLOG_TRACE6, 0, f->c,
+ "adopt %s brigade to %s brigade in '%s' %sput filter",
+ APR_BRIGADE_EMPTY(bb) ? "empty" : "full",
+ (!fp->bb || APR_BRIGADE_EMPTY(fp->bb)) ? "empty" : "full",
+ f->frec->name,
+ f->frec->direction == AP_FILTER_INPUT ? "in" : "out");
+ }
if (!APR_BRIGADE_EMPTY(bb)) {
ap_filter_prepare_brigade(f);
@@ -1067,18 +1071,26 @@ AP_DECLARE(apr_status_t) ap_filter_reinstate_brigade(ap_filter_t *f,
apr_bucket **flush_upto)
{
apr_bucket *bucket, *next;
+ apr_size_t flush_max_threshold;
+ apr_int32_t flush_max_pipelined;
apr_size_t bytes_in_brigade, memory_bytes_in_brigade;
int eor_buckets_in_brigade, opaque_buckets_in_brigade;
struct ap_filter_private *fp = f->priv;
core_server_config *conf;
int is_flush;
- ap_log_cerror(APLOG_MARK, APLOG_TRACE6, 0, f->c,
- "reinstate %s brigade to %s brigade in '%s' %sput filter",
- (!fp->bb || APR_BRIGADE_EMPTY(fp->bb) ? "empty" : "full"),
- (APR_BRIGADE_EMPTY(bb) ? "empty" : "full"),
- f->frec->name,
- f->frec->direction == AP_FILTER_INPUT ? "in" : "out");
+ if (flush_upto) {
+ *flush_upto = NULL;
+ }
+
+ if (!APR_BRIGADE_EMPTY(bb) || (fp->bb && !APR_BRIGADE_EMPTY(fp->bb))) {
+ ap_log_cerror(APLOG_MARK, APLOG_TRACE6, 0, f->c,
+ "reinstate %s brigade to %s brigade in '%s' %sput filter",
+ (!fp->bb || APR_BRIGADE_EMPTY(fp->bb) ? "empty" : "full"),
+ (APR_BRIGADE_EMPTY(bb) ? "empty" : "full"),
+ f->frec->name,
+ f->frec->direction == AP_FILTER_INPUT ? "in" : "out");
+ }
/* This API is not suitable for request filters */
if (f->frec->ftype < AP_FTYPE_CONNECTION) {
@@ -1086,17 +1098,15 @@ AP_DECLARE(apr_status_t) ap_filter_reinstate_brigade(ap_filter_t *f,
}
/* Buckets in fp->bb are leftover from previous call to setaside, so
- * they happen before anything added here in bb.
+ * they happen before anything in bb already.
*/
if (fp->bb) {
APR_BRIGADE_PREPEND(bb, fp->bb);
}
- if (!flush_upto) {
- /* Just prepend all. */
+ if (!flush_upto || APR_BRIGADE_EMPTY(bb)) {
+ /* Just prepend all, or nothing to do. */
return APR_SUCCESS;
}
-
- *flush_upto = NULL;
/*
* Determine if and up to which bucket the caller needs to do a blocking
@@ -1124,13 +1134,15 @@ AP_DECLARE(apr_status_t) ap_filter_reinstate_brigade(ap_filter_t *f,
* reinstated by moving them from/to fp->bb to/from user bb.
*/
+ conf = ap_get_core_module_config(f->c->base_server->module_config);
+ flush_max_threshold = conf->flush_max_threshold;
+ flush_max_pipelined = conf->flush_max_pipelined;
+
bytes_in_brigade = 0;
memory_bytes_in_brigade = 0;
eor_buckets_in_brigade = 0;
opaque_buckets_in_brigade = 0;
- conf = ap_get_core_module_config(f->c->base_server->module_config);
-
for (bucket = APR_BRIGADE_FIRST(bb); bucket != APR_BRIGADE_SENTINEL(bb);
bucket = next) {
next = APR_BUCKET_NEXT(bucket);
@@ -1157,9 +1169,9 @@ AP_DECLARE(apr_status_t) ap_filter_reinstate_brigade(ap_filter_t *f,
}
if (is_flush
- || (memory_bytes_in_brigade > conf->flush_max_threshold)
- || (conf->flush_max_pipelined >= 0
- && eor_buckets_in_brigade > conf->flush_max_pipelined)) {
+ || (memory_bytes_in_brigade > flush_max_threshold)
+ || (flush_max_pipelined >= 0
+ && eor_buckets_in_brigade > flush_max_pipelined)) {
/* this segment of the brigade MUST be sent before returning. */
if (APLOGctrace6(f->c)) {
@@ -1170,11 +1182,9 @@ AP_DECLARE(apr_status_t) ap_filter_reinstate_brigade(ap_filter_t *f,
ap_log_cerror(APLOG_MARK, APLOG_TRACE6, 0, f->c,
"will flush because of %s", reason);
ap_log_cerror(APLOG_MARK, APLOG_TRACE8, 0, f->c,
- "seen in brigade%s: bytes: %" APR_SIZE_T_FMT
+ "seen in brigade so far: bytes: %" APR_SIZE_T_FMT
", memory bytes: %" APR_SIZE_T_FMT ", eor "
"buckets: %d, opaque buckets: %d",
- *flush_upto == NULL ? " so far"
- : " since last flush point",
bytes_in_brigade,
memory_bytes_in_brigade,
eor_buckets_in_brigade,
@@ -1183,16 +1193,18 @@ AP_DECLARE(apr_status_t) ap_filter_reinstate_brigade(ap_filter_t *f,
/*
* Defer the actual blocking write to avoid doing many writes.
*/
+ if (memory_bytes_in_brigade > flush_max_threshold) {
+ flush_max_threshold = APR_SIZE_MAX;
+ }
+ if (flush_max_pipelined >= 0
+ && eor_buckets_in_brigade > flush_max_pipelined) {
+ flush_max_pipelined = APR_INT32_MAX;
+ }
*flush_upto = next;
-
- bytes_in_brigade = 0;
- memory_bytes_in_brigade = 0;
- eor_buckets_in_brigade = 0;
- opaque_buckets_in_brigade = 0;
}
}
- ap_log_cerror(APLOG_MARK, APLOG_TRACE8, 0, f->c,
+ ap_log_cerror(APLOG_MARK, APLOG_TRACE6, 0, f->c,
"brigade contains%s: bytes: %" APR_SIZE_T_FMT
", non-file bytes: %" APR_SIZE_T_FMT
", eor buckets: %d, opaque buckets: %d",