[experimental-ims] 0887a4f Try to firm up v00010 even more, by explicitly waiting for the crashing child to do so, and then explicitly start it again.

Geoff Simmons geoff at varnish-cache.org
Mon Jan 9 21:52:03 CET 2012


commit 0887a4f9891e13c2249558041e743ddc6f6e0e8a
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Thu Oct 6 10:48:57 2011 +0000

    Try to firm up v00010 even more, by explicitly waiting for the
    crashing child to do so, and then explicitly start it again.

diff --git a/bin/varnishtest/tests/v00010.vtc b/bin/varnishtest/tests/v00010.vtc
index 0421956..45dbc79 100644
--- a/bin/varnishtest/tests/v00010.vtc
+++ b/bin/varnishtest/tests/v00010.vtc
@@ -27,9 +27,6 @@ varnish v1 -cliok "param.set diag_bitmap 0x00001000"
 # Force the (random) port selected to be used again after restart.
 varnish v1 -cliok "param.set listen_address ${v1_addr}:${v1_port}"
 
-# varnishtest defaults to auto_restart off, to avoid masking bugs.
-varnish v1 -cliok "param.set auto_restart on" 
-
 client c1 {
 	txreq -url "/"
 	rxresp
@@ -37,6 +34,11 @@ client c1 {
 	# Don't expect answer, the server crashed.
 } -run
 
+varnish v1 -wait-stopped
+varnish v1 -cliok "panic.show"
+varnish v1 -cliok "panic.clear"
+varnish v1 -clierr 300 "panic.clear"
+varnish v1 -cliok "start"
 varnish v1 -wait-running
 sema r1 sync 2
 
@@ -45,7 +47,3 @@ client c1 {
 	rxresp
 	expect resp.http.foo == "foo"
 } -run
-
-varnish v1 -cliok "panic.show"
-varnish v1 -cliok "panic.clear"
-varnish v1 -clierr 300 "panic.clear"
diff --git a/bin/varnishtest/vtc_varnish.c b/bin/varnishtest/vtc_varnish.c
index 9ba34a7..9690a23 100644
--- a/bin/varnishtest/vtc_varnish.c
+++ b/bin/varnishtest/vtc_varnish.c
@@ -124,12 +124,37 @@ varnish_ask_cli(const struct varnish *v, const char *cmd, char **repl)
  */
 
 static void
+wait_stopped(const struct varnish *v)
+{
+	char *r;
+	enum VCLI_status_e st;
+
+	while (1) {
+		vtc_log(v->vl, 3, "wait-stopped");
+		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 stopped")) {
+			free(r);
+			break;
+		}
+		free(r);
+		(void)usleep(200000);
+	}
+}
+/**********************************************************************
+ *
+ */
+
+static void
 wait_running(const struct varnish *v)
 {
 	char *r;
 	enum VCLI_status_e st;
 
 	while (1) {
+		vtc_log(v->vl, 3, "wait-running");
 		st = varnish_ask_cli(v, "status", &r);
 		if (st != CLIS_OK)
 			vtc_log(v->vl, 0,
@@ -848,6 +873,10 @@ cmd_varnish(CMD_ARGS)
 			varnish_stop(v);
 			continue;
 		}
+		if (!strcmp(*av, "-wait-stopped")) {
+			wait_stopped(v);
+			continue;
+		}
 		if (!strcmp(*av, "-wait-running")) {
 			wait_running(v);
 			continue;



More information about the varnish-commit mailing list