[3.0] 98f1c8c Add a "wait-running" primitive to varnish instances, so we can avoid fixed sleeps waiting for the child process to start.

Tollef Fog Heen tfheen at varnish-cache.org
Mon Apr 16 10:20:33 CEST 2012


commit 98f1c8c743e3b848c1191b0adfdaec39b64a35d2
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Thu Oct 6 09:02:18 2011 +0000

    Add a "wait-running" primitive to varnish instances, so we can
    avoid fixed sleeps waiting for the child process to start.

diff --git a/bin/varnishtest/tests/v00010.vtc b/bin/varnishtest/tests/v00010.vtc
index ec7b947..0421956 100644
--- a/bin/varnishtest/tests/v00010.vtc
+++ b/bin/varnishtest/tests/v00010.vtc
@@ -5,6 +5,8 @@ server s1 {
 	txresp -hdr "Foo: bar" -body "abcdef\n"
 	rxreq
 	txresp -hdr "Panic: please" -body "012345\n"
+	close
+
 	sema r1 sync 2
 	accept
 	rxreq
@@ -33,10 +35,10 @@ client c1 {
 	rxresp
 	txreq -url "/foo"
 	# Don't expect answer, the server crashed.
-	sema r1 sync 2
 } -run
 
-delay 2.5
+varnish v1 -wait-running
+sema r1 sync 2
 
 client c1 {
 	txreq -url "/"
diff --git a/bin/varnishtest/vtc_varnish.c b/bin/varnishtest/vtc_varnish.c
index 2ff6ea9..d4b4569 100644
--- a/bin/varnishtest/vtc_varnish.c
+++ b/bin/varnishtest/vtc_varnish.c
@@ -120,6 +120,30 @@ varnish_ask_cli(const struct varnish *v, const char *cmd, char **repl)
 }
 
 /**********************************************************************
+ *
+ */
+
+static void
+wait_running(const struct varnish *v)
+{
+	char *r;
+	enum VCLI_status_e st;
+
+	while (1) {
+		st = varnish_ask_cli(v, "status", &r);
+		if (st != CLIS_OK)
+			vtc_log(v->vl, 0,
+			    "CLI status command failed: %u %s", st, r);
+		if (!strcmp(r, "Child in state running")) {
+			free(r);
+			break;
+		}
+		free(r);
+		(void)usleep(200000);
+	}
+}
+
+/**********************************************************************
  * Varnishlog gatherer + thread
  */
 
@@ -431,6 +455,7 @@ varnish_start(struct varnish *v)
 		return;
 	if (u != CLIS_OK)
 		vtc_log(v->vl, 0, "CLI start command failed: %u %s", u, resp);
+	wait_running(v);
 	free(resp);
 	u = varnish_ask_cli(v, "debug.xid 1000", &resp);
 	if (vtc_error)
@@ -815,6 +840,10 @@ cmd_varnish(CMD_ARGS)
 			varnish_stop(v);
 			continue;
 		}
+		if (!strcmp(*av, "-wait-running")) {
+			wait_running(v);
+			continue;
+		}
 		if (!strcmp(*av, "-wait")) {
 			varnish_wait(v);
 			continue;



More information about the varnish-commit mailing list