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

Reply via email to