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
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