Mailing List Archive

[master] 1a49e049d vcl: Session timeouts can now be unset
commit 1a49e049d787005deab2afd1bd143404402f5a09
Author: Dridi Boukelmoune <dridi.boukelmoune@gmail.com>
Date: Wed Feb 28 17:01:56 2024 +0100

vcl: Session timeouts can now be unset

They were already relying on NAN to fall back to parameters.

diff --git a/bin/varnishd/cache/cache_vrt_var.c b/bin/varnishd/cache/cache_vrt_var.c
index 9a14519b8..e509aea4b 100644
--- a/bin/varnishd/cache/cache_vrt_var.c
+++ b/bin/varnishd/cache/cache_vrt_var.c
@@ -1135,7 +1135,7 @@ set_idle_send_timeout(const struct sess *sp, VCL_DURATION d)

#define SESS_VAR_DUR(x, setter) \
VCL_VOID \
-VRT_l_sess_##x(VRT_CTX, VCL_DURATION d) \
+VRT_l_sess_##x(VRT_CTX, VCL_DURATION d) \
{ \
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); \
CHECK_OBJ_NOTNULL(ctx->sp, SESS_MAGIC); \
@@ -1145,11 +1145,19 @@ VRT_l_sess_##x(VRT_CTX, VCL_DURATION d) \
} \
\
VCL_DURATION \
-VRT_r_sess_##x(VRT_CTX) \
+VRT_r_sess_##x(VRT_CTX) \
{ \
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); \
CHECK_OBJ_NOTNULL(ctx->sp, SESS_MAGIC); \
return (SESS_TMO(ctx->sp, x)); \
+} \
+ \
+VCL_VOID \
+VRT_u_sess_##x(VRT_CTX) \
+{ \
+ CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); \
+ CHECK_OBJ_NOTNULL(ctx->sp, SESS_MAGIC); \
+ ctx->sp->x = NAN; \
}

SESS_VAR_DUR(timeout_idle, )
diff --git a/bin/varnishtest/tests/v00069.vtc b/bin/varnishtest/tests/v00069.vtc
new file mode 100644
index 000000000..03ffcfdaa
--- /dev/null
+++ b/bin/varnishtest/tests/v00069.vtc
@@ -0,0 +1,61 @@
+varnishtest "Unset session timeouts"
+
+varnish v1 -cliok "param.set timeout_idle 42"
+varnish v1 -cliok "param.set timeout_linger 42"
+varnish v1 -cliok "param.set idle_send_timeout 42"
+varnish v1 -cliok "param.set send_timeout 42"
+
+varnish v1 -vcl {
+ backend be none;
+
+ sub vcl_recv {
+ return (synth(200));
+ }
+
+ sub vcl_synth {
+ set resp.http.def_timeout_idle = sess.timeout_idle;
+ set resp.http.def_timeout_linger = sess.timeout_linger;
+ set resp.http.def_idle_send_timeout = sess.idle_send_timeout;
+ set resp.http.def_send_timeout = sess.send_timeout;
+
+ set sess.timeout_idle = 0s;
+ set sess.timeout_linger = 0s;
+ set sess.idle_send_timeout = 0s;
+ set sess.send_timeout = 0s;
+
+ set resp.http.set_timeout_idle = sess.timeout_idle;
+ set resp.http.set_timeout_linger = sess.timeout_linger;
+ set resp.http.set_idle_send_timeout = sess.idle_send_timeout;
+ set resp.http.set_send_timeout = sess.send_timeout;
+
+ unset sess.timeout_idle;
+ unset sess.timeout_linger;
+ unset sess.idle_send_timeout;
+ unset sess.send_timeout;
+
+ set resp.http.unset_timeout_idle = sess.timeout_idle;
+ set resp.http.unset_timeout_linger = sess.timeout_linger;
+ set resp.http.unset_idle_send_timeout = sess.idle_send_timeout;
+ set resp.http.unset_send_timeout = sess.send_timeout;
+ }
+} -start
+
+client c1 {
+ txreq
+ rxresp
+
+ expect resp.http.def_timeout_idle == 42.000
+ expect resp.http.def_timeout_linger == 42.000
+ expect resp.http.def_idle_send_timeout == 42.000
+ expect resp.http.def_send_timeout == 42.000
+
+ expect resp.http.set_timeout_idle == 0.000
+ expect resp.http.set_timeout_linger == 0.000
+ expect resp.http.set_idle_send_timeout == 0.000
+ expect resp.http.set_send_timeout == 0.000
+
+ expect resp.http.unset_timeout_idle == 42.000
+ expect resp.http.unset_timeout_linger == 42.000
+ expect resp.http.unset_idle_send_timeout == 42.000
+ expect resp.http.unset_send_timeout == 42.000
+} -run
diff --git a/doc/sphinx/reference/vcl_var.rst b/doc/sphinx/reference/vcl_var.rst
index 16bb9c8c7..3be25d54e 100644
--- a/doc/sphinx/reference/vcl_var.rst
+++ b/doc/sphinx/reference/vcl_var.rst
@@ -1781,6 +1781,8 @@ sess.idle_send_timeout

Writable from: client

+ Unsetable from: client
+
Send timeout for individual pieces of data on client
connections, defaults to the ``idle_send_timeout`` parameter,
see :ref:`varnishd(1)`
@@ -1796,6 +1798,8 @@ sess.send_timeout

Writable from: client

+ Unsetable from: client
+
Total timeout for ordinary HTTP1 responses, defaults to the
``send_timeout`` parameter, see :ref:`varnishd(1)`

@@ -1810,6 +1814,8 @@ sess.timeout_idle

Writable from: client

+ Unsetable from: client
+
Idle timeout for this session, defaults to the
``timeout_idle`` parameter, see :ref:`varnishd(1)`

@@ -1824,6 +1830,8 @@ sess.timeout_linger

Writable from: client

+ Unsetable from: client
+
Linger timeout for this session, defaults to the
``timeout_linger`` parameter, see :ref:`varnishd(1)`

diff --git a/include/vrt.h b/include/vrt.h
index f5ea03bc5..8bbdf8186 100644
--- a/include/vrt.h
+++ b/include/vrt.h
@@ -60,6 +60,10 @@
* NEXT (2024-03-15)
* [cache.h] (struct req).filter_list renamed to vdp_filter_list
* order of vcl/vmod and director COLD events reversed to directors first
+ * VRT_u_sess_idle_send_timeout() added
+ * VRT_u_sess_send_timeout() added
+ * VRT_u_sess_timeout_idle() added
+ * VRT_u_sess_timeout_linger() added
* 18.1 (2023-12-05)
* vbf_objiterate() implementation changed #4013
* 18.0 (2023-09-15)
_______________________________________________
varnish-commit mailing list
varnish-commit@varnish-cache.org
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-commit