mirror of
http://git.haproxy.org/git/haproxy.git
synced 2026-02-04 05:33:34 +02:00
MEDIUM: lua: Add ifexist parameter to set_var
As discussed in GitHub issue #624 Lua scripts should not use variables that are never going to be read, because the memory for variable names is never going to be freed. Add an optional `ifexist` parameter to the `set_var` function that allows a Lua developer to set variables that are going to be ignored if the variable name was not used elsewhere before. Usually this mean that there is no `var()` sample fetch for the variable in question within the configuration.
This commit is contained in:
committed by
Christopher Faulet
parent
84ebc136a1
commit
4e172c93f9
@@ -10,3 +10,16 @@ core.register_service("set_var", "http", function(applet)
|
||||
applet:start_response()
|
||||
applet:send("")
|
||||
end)
|
||||
|
||||
core.register_service("set_var_ifexist", "http", function(applet)
|
||||
local var_name = applet.headers["var"][0]
|
||||
local result = applet:set_var(var_name, "value", true)
|
||||
if result then
|
||||
applet:set_status(202)
|
||||
else
|
||||
applet:set_status(400)
|
||||
end
|
||||
applet:add_header("echo", applet:get_var(var_name) or "(nil)")
|
||||
applet:start_response()
|
||||
applet:send("")
|
||||
end)
|
||||
|
||||
@@ -13,11 +13,20 @@ haproxy h1 -conf {
|
||||
bind "fd@${fe1}"
|
||||
|
||||
http-request use-service lua.set_var
|
||||
|
||||
frontend fe2
|
||||
mode http
|
||||
${no-htx} option http-use-htx
|
||||
bind "fd@${fe2}"
|
||||
|
||||
http-request set-header Dummy %[var(txn.fe2_foo)]
|
||||
|
||||
http-request use-service lua.set_var_ifexist
|
||||
} -start
|
||||
|
||||
client c0 -connect ${h1_fe1_sock} {
|
||||
txreq -url "/" \
|
||||
-hdr "Var: txn.foo"
|
||||
-hdr "Var: txn.fe1_foo"
|
||||
rxresp
|
||||
expect resp.status == 202
|
||||
expect resp.http.echo == "value"
|
||||
@@ -27,3 +36,16 @@ client c0 -connect ${h1_fe1_sock} {
|
||||
expect resp.status == 400
|
||||
expect resp.http.echo == "(nil)"
|
||||
} -run
|
||||
|
||||
client c1 -connect ${h1_fe2_sock} {
|
||||
txreq -url "/" \
|
||||
-hdr "Var: txn.fe2_foo"
|
||||
rxresp
|
||||
expect resp.status == 202
|
||||
expect resp.http.echo == "value"
|
||||
txreq -url "/" \
|
||||
-hdr "Var: txn.fe2_bar"
|
||||
rxresp
|
||||
expect resp.status == 400
|
||||
expect resp.http.echo == "(nil)"
|
||||
} -run
|
||||
|
||||
Reference in New Issue
Block a user