On 26/04/2019 11:56, Christopher Faulet wrote:
Le 24/04/2019 à 15:51, Ignacio Lopez a écrit :
Hello,
After upgrading from 1.8.14 to 1.9.6 I've started to get: Lua
sample-fetch 'backend_select': unknown runtime error from [C] method
'dup'
The following is enough to make it trigger:
function backend_select(txn) {
local payload = txn.req:dup();
}
core.register_fetches("backend_select", backend_select)
I'm a bit lost of why this could be happening. I'm tempted to simply
switch to "local payload = txn.sf:req_body()" as I'm only interested
on the http body part to be fair, but I thought it would be
interesting to know what's causing this.
Hi Ignacio,
Since HAProxy 1.9, functions from the Channel class are forbidden for
LUA scripts called from HTTP proxies. See commit 3f829a4b7 [1]. So the
Channel.dup function only duplicate the request content, unlike
Channel.get or Channel.set. But it can't work with the HTX, the new
internal HTTP representation introduced in 1.9. The HTX is not the
default mode in 1.9, but it is on the 2.0. So, Channel.dup was forbidden
too, to avoid inconsistencies between the HTX and the legacy modes.
Using the sample fetch req_body() is a more reliable way to get the
request body.
[1] http://git.haproxy.org/?p=haproxy-1.9.git;a=commit;h=3f829a4b7
Hi Christopher,
thanks for the detailed explanation, I really appreciate it.
Best regards.