]> git.kaiwu.me - haproxy.git/commitdiff
BUG/MEDIUM: acme: Set HTTPCLIENT_O_RES_ACCUM option on the http-client
authorChristopher Faulet <cfaulet@haproxy.com>
Wed, 16 Sep 2026 07:19:21 +0000 (09:19 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 18 Sep 2026 14:50:30 +0000 (16:50 +0200)
The ACME task does not consume the response payload on the fly. It waits for
the end of the response to parse the JSON object stored in the http-client
response buffer.

Thus, since commit b24260ec9 ("BUG/MEDIUM: http-client: Only consume input
buffer when hc one is empty"), the http-client applet stops to consume data
as soon as the first part of the payload is stored in its response buffer,
waiting for the caller to consume it. But it never happens. So, when the
response is not received in one time, the ACME task is stuck till the server
timeout expiration.

The HTTPCLIENT_O_RES_ACCUM option is now set to instruct the http-client to
continue to fill its response buffer.

This patch depends on :

  * BUG/MEDIUM: http-client: Don't use the httpclient context if it was released
  * MINOR: http-client: Add an option to not stop the reception of the response

It must be backported as far as 3.3 with commit b24260ec9.

src/acme.c

index d536b2be97184607c7d29be5251d1bf24e6b1bdd..dbf1d1f3adb6901a8e94ca13c73a0f0ce1e350e2 100644 (file)
@@ -1329,6 +1329,11 @@ int acme_http_req(struct task *task, struct acme_ctx *ctx, struct ist url, enum
        if (httpclient_req_gen(hc, hc->req.url, hc->req.meth, hdrs, payload) != ERR_NONE)
                goto error;
 
+       /* The response payload is not consumed on the fly. It is retrieved at
+        * the end of the response.
+        */
+       hc->options |= HTTPCLIENT_O_RES_ACCUM;
+
        hc->ops.res_end = acme_httpclient_end;
 
        ctx->hc = hc;