Hi, it appeared to me that VCL is cumbersome for handling body replacement on the backend side and the behavior of abandon from the client side is confusing.
Current status: - generating synthetic content (setting a body) on the backend side is only possible in vcl_backend_error. To get there, we need to reach the max retries or trigger a fetch error. To tell vcl_backend_error what to do, we need markers in bereq.http.* - return(abandon) fails the backend request and ends up on the client side, but we can't tell the client side what to do Suggestion: - retire synthetic and support (un)set (be)resp.body (not directly related to the topic, but something we should do for consistency) - add support for (un)set beresp.body to vcl_backend_response if used: -> short-term: silently abort the backend connection -> better: discard-read the response body - add support for (un)set resp.body to vcl_deliver - rename vcl_backend_error to vcl_backend_synth to be consistent with the client side - add status and reason to abandon which get pre-set for the call to vcl_synth 503 as default - add return(backend_synth(status, reason)) to vcl_backend_fetch as an easy way to return synthetic content at backend request time. More thoughts: - if we want the (un)set beresp.body, should we maybe have set beresp.body = fetch() also? This would be the default if no other beresp.body action happend in vcl_backend_response Thanks, Nils _______________________________________________ varnish-dev mailing list varnish-dev@varnish-cache.org https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev