[master] 59fd455 shard director: test layering

Nils Goroll nils.goroll at uplex.de
Fri Mar 9 13:01:07 UTC 2018


commit 59fd455f846d3b68e59dd466ea0db2b9726ec4c7
Author: Nils Goroll <nils.goroll at uplex.de>
Date:   Fri Mar 9 13:36:04 2018 +0100

    shard director: test layering

diff --git a/bin/varnishtest/tests/d00021.vtc b/bin/varnishtest/tests/d00021.vtc
index c29e03f..c62e77e 100644
--- a/bin/varnishtest/tests/d00021.vtc
+++ b/bin/varnishtest/tests/d00021.vtc
@@ -1,16 +1,16 @@
-varnishtest "shard director LAZY"
+varnishtest "shard director LAZY and layering"
 
-server s1 {
+server s1 -repeat 2 {
 	rxreq
 	txresp -body "ech3Ooj"
 } -start
 
-server s2 {
+server s2 -repeat 2 {
 	rxreq
 	txresp -body "ieQu2qua"
 } -start
 
-server s3 {
+server s3 -repeat 2 {
 	rxreq
 	txresp -body "xiuFi3Pe"
 } -start
@@ -33,30 +33,75 @@ varnish v1 -vcl+backend {
 	    if (!vd.reconfigure(replicas=25)) {
 		std.log("reconfigure failed");
 	    }
+
+	    new l = directors.shard();
+	    new lp = directors.shard_param();
+	    l.associate(lp.use());
+	    if (!l.add_backend(s1)) {
+		std.log("add s1 failed");
+	    }
+	    if (!l.add_backend(s2)) {
+		std.log("add s2 failed");
+	    }
+	    if (!l.add_backend(s3)) {
+		std.log("add s3 failed");
+	    }
+	    if (!l.reconfigure(replicas=25)) {
+		std.log("reconfigure failed");
+	    }
+	    new ll = directors.round_robin();
+	    ll.add_backend(l.backend(resolve=LAZY));
 	}
 
 	sub vcl_recv {
 	    return(pass);
 	}
 
-	sub vcl_backend_fetch {
+	sub backend_fetch_direct {
 	    if (bereq.url == "/1") {
 		set bereq.backend =
 		    vd.backend(resolve=LAZY, by=KEY, key=1);
-	    }
+	    } else
 	    if (bereq.url == "/2") {
 		set bereq.backend =
 		  vd.backend(resolve=LAZY, by=KEY, key=2147483647);
-	    }
+	    } else
 	    if (bereq.url == "/3") {
 		set bereq.backend =
 		  vd.backend(resolve=LAZY, by=KEY, key=4294967295);
 	    }
 	}
 
+	sub backend_fetch_layered {
+	    set bereq.backend = ll.backend();
+	    if (bereq.url == "/1") {
+		lp.set(by=KEY, key=1);
+	    } else
+	    if (bereq.url == "/2") {
+		lp.set(by=KEY, key=2147483647);
+	    } else
+	    if (bereq.url == "/3") {
+		lp.set(by=KEY, key=4294967295);
+	    }
+	}
+
+	sub vcl_backend_fetch {
+	    if (bereq.http.layered) {
+		call backend_fetch_layered;
+	    } else {
+		call backend_fetch_direct;
+	    }
+	}
+
 	sub vcl_backend_response {
-	    set beresp.http.healthy = std.healthy(
-	      vd.backend(resolve=LAZY, by=KEY, key=1));
+	    if (bereq.http.layered) {
+		set beresp.http.healthy = std.healthy(ll.backend());
+	    } else {
+		set beresp.http.healthy = std.healthy(
+		  vd.backend(resolve=LAZY, by=KEY, key=1));
+	    }
+	    set beresp.http.director = bereq.backend;
+	    set beresp.http.backend = beresp.backend;
 	}
 } -start
 
@@ -66,14 +111,41 @@ client c1 {
 	rxresp
 	expect resp.body == "ech3Ooj"
 	expect resp.http.healthy == "true"
+	expect resp.http.director == "vd"
+	expect resp.http.backend == "s1"
 
 	txreq -url /2
 	rxresp
 	expect resp.body == "ieQu2qua"
 	expect resp.http.healthy == "true"
+	expect resp.http.director == "vd"
+	expect resp.http.backend == "s2"
 
 	txreq -url /3
 	rxresp
 	expect resp.body == "xiuFi3Pe"
 	expect resp.http.healthy == "true"
+	expect resp.http.director == "vd"
+	expect resp.http.backend == "s3"
+
+	txreq -url /1 -hdr "layered: true"
+	rxresp
+	expect resp.body == "ech3Ooj"
+	expect resp.http.healthy == "true"
+	expect resp.http.director == "ll"
+	expect resp.http.backend == "s1"
+
+	txreq -url /2 -hdr "layered: true"
+	rxresp
+	expect resp.body == "ieQu2qua"
+	expect resp.http.healthy == "true"
+	expect resp.http.director == "ll"
+	expect resp.http.backend == "s2"
+
+	txreq -url /3 -hdr "layered: true"
+	rxresp
+	expect resp.body == "xiuFi3Pe"
+	expect resp.http.healthy == "true"
+	expect resp.http.director == "ll"
+	expect resp.http.backend == "s3"
 } -run


More information about the varnish-commit mailing list