[master] 06bb24099 Add the reason for dynamic bounds in param specs

Poul-Henning Kamp phk at FreeBSD.org
Mon Oct 21 11:56:07 UTC 2019


commit 06bb24099deefa80013b419754c9492424119358
Author: Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
Date:   Fri Oct 18 16:01:35 2019 +0200

    Add the reason for dynamic bounds in param specs

diff --git a/bin/varnishd/mgt/mgt_param.h b/bin/varnishd/mgt/mgt_param.h
index 2d4936c94..1ce2bdc5f 100644
--- a/bin/varnishd/mgt/mgt_param.h
+++ b/bin/varnishd/mgt/mgt_param.h
@@ -56,6 +56,8 @@ struct parspec {
 	const char	*def;
 	const char	*units;
 
+	const char	*dyn_min_reason;
+	const char	*dyn_max_reason;
 	char		*dyn_min;
 	char		*dyn_max;
 	char		*dyn_def;
@@ -80,7 +82,8 @@ enum tweak_e {
 };
 
 enum tweak_e tweak_generic_uint(struct vsb *vsb, volatile unsigned *dest,
-    const char *arg, const char *min, const char *max);
+    const char *arg, const char *min, const char *max,
+    const char *min_reason, const char *max_reason);
 
 extern struct parspec mgt_parspec[]; /* mgt_param_tbl.c */
 extern struct parspec VSL_parspec[]; /* mgt_param_vsl.c */
diff --git a/bin/varnishd/mgt/mgt_param_tweak.c b/bin/varnishd/mgt/mgt_param_tweak.c
index fbb6933dc..3ae97aa95 100644
--- a/bin/varnishd/mgt/mgt_param_tweak.c
+++ b/bin/varnishd/mgt/mgt_param_tweak.c
@@ -158,7 +158,8 @@ tweak_bool(struct vsb *vsb, const struct parspec *par, const char *arg)
 
 enum tweak_e
 tweak_generic_uint(struct vsb *vsb, volatile unsigned *dest, const char *arg,
-    const char *min, const char *max)
+    const char *min, const char *max,
+    const char *min_reason, const char *max_reason)
 {
 	unsigned u, minv = 0, maxv = 0;
 	char *p;
@@ -191,11 +192,17 @@ tweak_generic_uint(struct vsb *vsb, volatile unsigned *dest, const char *arg,
 			}
 		}
 		if (min != NULL && u < minv) {
-			VSB_printf(vsb, "Must be at least %s\n", min);
+			VSB_printf(vsb, "Must be at least %s", min);
+			if (min_reason != NULL)
+				VSB_printf(vsb, " %s", min_reason);
+			VSB_putc(vsb, '\n');
 			return (TWEAK_BELOW_MIN);
 		}
 		if (max != NULL && u > maxv) {
-			VSB_printf(vsb, "Must be no more than %s\n", max);
+			VSB_printf(vsb, "Must be no more than %s", max);
+			if (max_reason != NULL)
+				VSB_printf(vsb, " %s", max_reason);
+			VSB_putc(vsb, '\n');
 			return (TWEAK_ABOVE_MAX);
 		}
 		*dest = u;
@@ -215,7 +222,8 @@ tweak_uint(struct vsb *vsb, const struct parspec *par, const char *arg)
 	volatile unsigned *dest;
 
 	dest = par->priv;
-	return (tweak_generic_uint(vsb, dest, arg, par->min, par->max));
+	return (tweak_generic_uint(vsb, dest, arg, par->min, par->max,
+	    par->dyn_min_reason, par->dyn_max_reason));
 }
 
 /*--------------------------------------------------------------------*/
@@ -415,11 +423,13 @@ tweak_poolparam(struct vsb *vsb, const struct parspec *par, const char *arg)
 			}
 			px = *pp;
 			retval = tweak_generic_uint(vsb, &px.min_pool, av[1],
-			    par->min, par->max);
+			    par->min, par->max, par->dyn_min_reason,
+			    par->dyn_max_reason);
 			if (retval)
 				break;
 			retval = tweak_generic_uint(vsb, &px.max_pool, av[2],
-			    par->min, par->max);
+			    par->min, par->max, par->dyn_min_reason,
+			    par->dyn_max_reason);
 			if (retval)
 				break;
 			retval = tweak_generic_double(vsb,
diff --git a/bin/varnishd/mgt/mgt_pool.c b/bin/varnishd/mgt/mgt_pool.c
index 5184ea147..b2728de6d 100644
--- a/bin/varnishd/mgt/mgt_pool.c
+++ b/bin/varnishd/mgt/mgt_pool.c
@@ -59,7 +59,8 @@ tweak_thread_pool_min(struct vsb *vsb, const struct parspec *par,
 {
 	enum tweak_e tweak;
 
-	tweak = tweak_generic_uint(vsb, par->priv, arg, par->min, par->max);
+	tweak = tweak_generic_uint(vsb, par->priv, arg, par->min, par->max,
+	    par->dyn_min_reason, par->dyn_max_reason);
 
 	if (tweak == TWEAK_OK) {
 		MCF_ParamConf(MCF_MINIMUM, "thread_pool_max",
@@ -69,11 +70,6 @@ tweak_thread_pool_min(struct vsb *vsb, const struct parspec *par,
 		return (0);
 	}
 
-	if (arg != JSON_FMT && tweak == TWEAK_ABOVE_MAX) {
-		vsb->s_len--; /* XXX: VSB_trim(vsb, "\n"); instead? */
-		VSB_cat(vsb, " (thread_pool_max)\n");
-	}
-
 	return (-1);
 }
 
@@ -83,7 +79,8 @@ tweak_thread_pool_max(struct vsb *vsb, const struct parspec *par,
 {
 	enum tweak_e tweak;
 
-	tweak = tweak_generic_uint(vsb, par->priv, arg, par->min, par->max);
+	tweak = tweak_generic_uint(vsb, par->priv, arg, par->min, par->max,
+	    par->dyn_min_reason, par->dyn_max_reason);
 
 	if (tweak == TWEAK_OK) {
 		MCF_ParamConf(MCF_MAXIMUM, "thread_pool_min",
@@ -91,29 +88,6 @@ tweak_thread_pool_max(struct vsb *vsb, const struct parspec *par,
 		return (0);
 	}
 
-	if (arg != JSON_FMT && tweak == TWEAK_BELOW_MIN) {
-		vsb->s_len--; /* XXX: VSB_trim(vsb, "\n"); instead? */
-		VSB_cat(vsb, " (thread_pool_min)\n");
-	}
-
-	return (-1);
-}
-
-static int
-tweak_thread_pool_reserve(struct vsb *vsb, const struct parspec *par,
-    const char *arg)
-{
-	enum tweak_e tweak;
-
-	tweak = tweak_generic_uint(vsb, par->priv, arg, par->min, par->max);
-	if (tweak == TWEAK_OK)
-		return (0);
-
-	if (arg != JSON_FMT && tweak == TWEAK_ABOVE_MAX) {
-		vsb->s_len--; /* XXX: VSB_trim(vsb, "\n"); instead? */
-		VSB_cat(vsb, " (95% of thread_pool_min)\n");
-	}
-
 	return (-1);
 }
 
@@ -146,7 +120,8 @@ struct parspec WRK_parspec[] = {
 		"worker threads soak up RAM and CPU and generally just get "
 		"in the way of getting work done.",
 		DELAYED_EFFECT,
-		"5000", "threads" },
+		"5000", "threads",
+		"(thread_pool_min)" },
 	{ "thread_pool_min", tweak_thread_pool_min, &mgt_param.wthread_min,
 		NULL, NULL,
 		"The minimum number of worker threads in each pool. The "
@@ -157,8 +132,9 @@ struct parspec WRK_parspec[] = {
 		"\n"
 		"Minimum is 10 threads.",
 		DELAYED_EFFECT,
-		"100", "threads" },
-	{ "thread_pool_reserve", tweak_thread_pool_reserve,
+		"100", "threads",
+		NULL, "(thread_pool_max)" },
+	{ "thread_pool_reserve", tweak_uint,
 		&mgt_param.wthread_reserve,
 		NULL, NULL,
 		"The number of worker threads reserved for vital tasks "
@@ -177,7 +153,8 @@ struct parspec WRK_parspec[] = {
 		"Default is 0 to auto-tune (currently 5% of thread_pool_min).\n"
 		"Minimum is 1 otherwise, maximum is 95% of thread_pool_min.",
 		DELAYED_EFFECT,
-		"0", "threads" },
+		"0", "threads",
+		NULL, "(95% of thread_pool_min)" },
 	{ "thread_pool_timeout",
 		tweak_timeout, &mgt_param.wthread_timeout,
 		"10", NULL,


More information about the varnish-commit mailing list