[master] 8c9cde8fc polish shard director logging

Nils Goroll nils.goroll at uplex.de
Sat Oct 10 10:24:07 UTC 2020


commit 8c9cde8fc3eb691f87757578158447bd4b8f7802
Author: Nils Goroll <nils.goroll at uplex.de>
Date:   Sat Oct 10 12:21:14 2020 +0200

    polish shard director logging
    
    SLT_Notice requires messages to be prefixed by the vmod name. Using this
    format for notices only would appear inconsistent, so we change all
    shard log messages to that format.

diff --git a/bin/varnishtest/tests/d00015.vtc b/bin/varnishtest/tests/d00015.vtc
index 0a5b0da57..d87bd4498 100644
--- a/bin/varnishtest/tests/d00015.vtc
+++ b/bin/varnishtest/tests/d00015.vtc
@@ -199,75 +199,75 @@ logexpect l1 -v v1 -g raw -d 1 {
 	expect 0 0    CLI     {^Rd vcl.load}
 
 	expect 0 0    VCL_Log {^-- invalid replicas$}
-	expect 0 0    Error   {^shard vd: .reconfigure.. invalid replicas argument 0}
+	expect 0 0    Error   {^vmod_directors shard vd: .reconfigure.. invalid replicas argument 0}
 	expect 0 0    VCL_Log {^reconfigure failed}
 
 	expect 0 0    VCL_Log {^-- no changes - no debug output$}
 
 	expect 0 0    VCL_Log {^-- no backends$}
-	expect 0 0    Error   {^shard vd: .reconfigure.. no backends}
+	expect 0 0    Error   {^vmod_directors shard vd: .reconfigure.. no backends}
 	expect 0 0    VCL_Log {^reconfigure failed}
 
 	expect 0 0    VCL_Log {^-- one backend$}
-	expect 0 0    Debug   {^shard:.*point = f08ad325, host =  0}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = f08ad325, host =  0}
 
 	expect 0 0    VCL_Log {^-- no change - no output$}
 
 	expect 0 0    VCL_Log {^-- change, clear, no backends$}
-	expect 0 0    Error   {^shard vd: .reconfigure.. no backends}
+	expect 0 0    Error   {^vmod_directors shard vd: .reconfigure.. no backends}
 	expect 0 0    VCL_Log {^reconfigure failed}
 
 	expect 0 0    VCL_Log {^-- duplicate add$}
-	expect 0 0    Notice  {^shard vd: backend s1 already exists - skipping$}
-	expect 0 0    Debug   {^shard:.*point = 6e040182, host =  1}
-	expect 0 0    Debug   {^shard:.*point = f08ad325, host =  0}
+	expect 0 0    Notice  {^vmod_directors shard vd: backend s1 already exists - skipping$}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = 6e040182, host =  1}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = f08ad325, host =  0}
 
 	expect 0 0    VCL_Log {^-- duplicate add with idents$}
-	expect 0 0    Notice  {^shard vd: backend s1 already exists - skipping}
-	expect 0 0    Notice  {^shard vd: backend s1/s1_1 already exists - skipping}
-	expect 0 0    Notice  {^shard vd: backend s1/s1_2 already exists - skipping}
-	expect 0 0    Debug   {^shard:.*point = 6e040182, host =  3}
-	expect 0 0    Debug   {^shard:.*point = 732c7bbe, host =  2}
-	expect 0 0    Debug   {^shard:.*point = bae80b0b, host =  1}
-	expect 0 0    Debug   {^shard:.*point = f08ad325, host =  0}
+	expect 0 0    Notice  {^vmod_directors shard vd: backend s1 already exists - skipping}
+	expect 0 0    Notice  {^vmod_directors shard vd: backend s1/s1_1 already exists - skipping}
+	expect 0 0    Notice  {^vmod_directors shard vd: backend s1/s1_2 already exists - skipping}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = 6e040182, host =  3}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = 732c7bbe, host =  2}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = bae80b0b, host =  1}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = f08ad325, host =  0}
 
 	expect 0 0    VCL_Log {^-- remove s1_2 specifically$}
-	expect 0 0    Debug   {^shard:.*point = 6e040182, host =  2}
-	expect 0 0    Debug   {^shard:.*point = bae80b0b, host =  1}
-	expect 0 0    Debug   {^shard:.*point = f08ad325, host =  0}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = 6e040182, host =  2}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = bae80b0b, host =  1}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = f08ad325, host =  0}
 
 	expect 0 0    VCL_Log {^-- remove all instances of s1$}
-	expect 0 0    Debug   {^shard:.*point = 6e040182, host =  0}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = 6e040182, host =  0}
 
 	expect 0 0    VCL_Log {^-- re-add some - no 2nd director$}
-	expect 0 0    Debug   {^shard:.*point =  3d1fe97, host =  3}
-	expect 0 0    Debug   {^shard:.*point =  a25a43b, host =  6}
-	expect 0 0    Debug   {^shard:.*point = 2b20d9a2, host =  1}
-	expect 0 0    Debug   {^shard:.*point = 6337e62c, host =  8}
-	expect 0 0    Debug   {^shard:.*point = c9803f17, host =  5}
-	expect 0 0    Debug   {^shard:.*point = d51dafe6, host =  0}
-	expect 0 0    Debug   {^shard:.*point = eb74a7d5, host =  4}
-	expect 0 0    Debug   {^shard:.*point = f493ce58, host =  2}
-	expect 0 0    Debug   {^shard:.*point = fc1a5162, host =  7}
+	expect 0 0    Debug   {^vmod_directors shard:.*point =  3d1fe97, host =  3}
+	expect 0 0    Debug   {^vmod_directors shard:.*point =  a25a43b, host =  6}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = 2b20d9a2, host =  1}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = 6337e62c, host =  8}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = c9803f17, host =  5}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = d51dafe6, host =  0}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = eb74a7d5, host =  4}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = f493ce58, host =  2}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = fc1a5162, host =  7}
 
 	expect 0 0    VCL_Log {^-- remove second-last$}
-	expect 0 0    Debug   {^shard:.*point =  3d1fe97, host =  3}
-	expect 0 0    Debug   {^shard:.*point =  a25a43b, host =  6}
-	expect 0 0    Debug   {^shard:.*point = 2b20d9a2, host =  1}
-	expect 0 0    Debug   {^shard:.*point = 6337e62c, host =  7}
-	expect 0 0    Debug   {^shard:.*point = c9803f17, host =  5}
-	expect 0 0    Debug   {^shard:.*point = d51dafe6, host =  0}
-	expect 0 0    Debug   {^shard:.*point = eb74a7d5, host =  4}
-	expect 0 0    Debug   {^shard:.*point = f493ce58, host =  2}
+	expect 0 0    Debug   {^vmod_directors shard:.*point =  3d1fe97, host =  3}
+	expect 0 0    Debug   {^vmod_directors shard:.*point =  a25a43b, host =  6}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = 2b20d9a2, host =  1}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = 6337e62c, host =  7}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = c9803f17, host =  5}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = d51dafe6, host =  0}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = eb74a7d5, host =  4}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = f493ce58, host =  2}
 
 	expect 0 0    VCL_Log {^-- remove last$}
-	expect 0 0    Debug   {^shard:.*point =  3d1fe97, host =  3}
-	expect 0 0    Debug   {^shard:.*point =  a25a43b, host =  6}
-	expect 0 0    Debug   {^shard:.*point = 2b20d9a2, host =  1}
-	expect 0 0    Debug   {^shard:.*point = c9803f17, host =  5}
-	expect 0 0    Debug   {^shard:.*point = d51dafe6, host =  0}
-	expect 0 0    Debug   {^shard:.*point = eb74a7d5, host =  4}
-	expect 0 0    Debug   {^shard:.*point = f493ce58, host =  2}
+	expect 0 0    Debug   {^vmod_directors shard:.*point =  3d1fe97, host =  3}
+	expect 0 0    Debug   {^vmod_directors shard:.*point =  a25a43b, host =  6}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = 2b20d9a2, host =  1}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = c9803f17, host =  5}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = d51dafe6, host =  0}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = eb74a7d5, host =  4}
+	expect 0 0    Debug   {^vmod_directors shard:.*point = f493ce58, host =  2}
 
 expect 0 0    VCL_Log {^-- END$}
 } -start
diff --git a/bin/varnishtest/tests/d00016.vtc b/bin/varnishtest/tests/d00016.vtc
index a6a8ed70a..0c093a6ac 100644
--- a/bin/varnishtest/tests/d00016.vtc
+++ b/bin/varnishtest/tests/d00016.vtc
@@ -158,13 +158,13 @@ varnish v1 -vcl+backend {
 
 logexpect l1 -v v1 -g raw -d 1 {
 	expect * 1001    VCL_Log {^-- invalid replicas$}
-	expect 0 1001    Error   {^shard vd: .reconfigure.. invalid replicas argument 0}
+	expect 0 1001    Error   {^vmod_directors shard vd: .reconfigure.. invalid replicas argument 0}
 	expect 0 1001    VCL_Log {^reconfigure failed}
 
 	expect 0 1001    VCL_Log {^-- no changes - no debug output$}
 
 	expect 0 1001    VCL_Log {^-- no backends$}
-	expect 0 1001    Error   {^shard vd: .reconfigure.. no backends}
+	expect 0 1001    Error   {^vmod_directors shard vd: .reconfigure.. no backends}
 	expect 0 1001    VCL_Log {^reconfigure failed}
 
 	expect 0 1001    VCL_Log {^-- one backend$}
@@ -172,15 +172,15 @@ logexpect l1 -v v1 -g raw -d 1 {
 	expect 0 1001    VCL_Log {^-- no change - no output$}
 
 	expect 0 1001    VCL_Log {^-- change, clear, no backends$}
-	expect 0 1001    Error   {^shard vd: .reconfigure.. no backends}
+	expect 0 1001    Error   {^vmod_directors shard vd: .reconfigure.. no backends}
 	expect 0 1001    VCL_Log {^reconfigure failed}
 
 	expect 0 1001    VCL_Log {^-- duplicate add$}
-	expect 0 1001    Notice  {^shard vd: backend s1 already exists - skipping$}
+	expect 0 1001    Notice  {^vmod_directors shard vd: backend s1 already exists - skipping$}
 	expect 0 1001    VCL_Log {^-- duplicate add with idents$}
-	expect 0 1001    Notice  {^shard vd: backend s1 already exists - skipping}
-	expect 0 1001    Notice  {^shard vd: backend s1/s1_1 already exists - skipping}
-	expect 0 1001    Notice  {^shard vd: backend s1/s1_2 already exists - skipping}
+	expect 0 1001    Notice  {^vmod_directors shard vd: backend s1 already exists - skipping}
+	expect 0 1001    Notice  {^vmod_directors shard vd: backend s1/s1_1 already exists - skipping}
+	expect 0 1001    Notice  {^vmod_directors shard vd: backend s1/s1_2 already exists - skipping}
 	expect 0 1001    VCL_Log {^-- remove s1_2 specifically$}
 	expect 0 1001    VCL_Log {^-- remove all instances of s1$}
 	expect 0 1001    VCL_Log {^-- re-add some - no 2nd director$}
@@ -190,41 +190,41 @@ logexpect l1 -v v1 -g raw -d 1 {
 }
 
 logexpect l2 -v v1 -g raw -d 1 {
-	expect *    0    Debug   {^shard:.*point = f08ad325, host =  0}
-	expect 0    0    Debug   {^shard:.*point = 6e040182, host =  1}
-	expect 0    0    Debug   {^shard:.*point = f08ad325, host =  0}
-	expect 0    0    Debug   {^shard:.*point = 6e040182, host =  3}
-	expect 0    0    Debug   {^shard:.*point = 732c7bbe, host =  2}
-	expect 0    0    Debug   {^shard:.*point = bae80b0b, host =  1}
-	expect 0    0    Debug   {^shard:.*point = f08ad325, host =  0}
-	expect 0    0    Debug   {^shard:.*point = 6e040182, host =  2}
-	expect 0    0    Debug   {^shard:.*point = bae80b0b, host =  1}
-	expect 0    0    Debug   {^shard:.*point = f08ad325, host =  0}
-	expect 0    0    Debug   {^shard:.*point = 6e040182, host =  0}
-	expect 0    0    Debug   {^shard:.*point =  3d1fe97, host =  3}
-	expect 0    0    Debug   {^shard:.*point =  a25a43b, host =  6}
-	expect 0    0    Debug   {^shard:.*point = 2b20d9a2, host =  1}
-	expect 0    0    Debug   {^shard:.*point = 6337e62c, host =  8}
-	expect 0    0    Debug   {^shard:.*point = c9803f17, host =  5}
-	expect 0    0    Debug   {^shard:.*point = d51dafe6, host =  0}
-	expect 0    0    Debug   {^shard:.*point = eb74a7d5, host =  4}
-	expect 0    0    Debug   {^shard:.*point = f493ce58, host =  2}
-	expect 0    0    Debug   {^shard:.*point = fc1a5162, host =  7}
-	expect 0    0    Debug   {^shard:.*point =  3d1fe97, host =  3}
-	expect 0    0    Debug   {^shard:.*point =  a25a43b, host =  6}
-	expect 0    0    Debug   {^shard:.*point = 2b20d9a2, host =  1}
-	expect 0    0    Debug   {^shard:.*point = 6337e62c, host =  7}
-	expect 0    0    Debug   {^shard:.*point = c9803f17, host =  5}
-	expect 0    0    Debug   {^shard:.*point = d51dafe6, host =  0}
-	expect 0    0    Debug   {^shard:.*point = eb74a7d5, host =  4}
-	expect 0    0    Debug   {^shard:.*point = f493ce58, host =  2}
-	expect 0    0    Debug   {^shard:.*point =  3d1fe97, host =  3}
-	expect 0    0    Debug   {^shard:.*point =  a25a43b, host =  6}
-	expect 0    0    Debug   {^shard:.*point = 2b20d9a2, host =  1}
-	expect 0    0    Debug   {^shard:.*point = c9803f17, host =  5}
-	expect 0    0    Debug   {^shard:.*point = d51dafe6, host =  0}
-	expect 0    0    Debug   {^shard:.*point = eb74a7d5, host =  4}
-	expect 0    0    Debug   {^shard:.*point = f493ce58, host =  2}
+	expect *    0    Debug   {^vmod_directors shard:.*point = f08ad325, host =  0}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = 6e040182, host =  1}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = f08ad325, host =  0}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = 6e040182, host =  3}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = 732c7bbe, host =  2}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = bae80b0b, host =  1}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = f08ad325, host =  0}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = 6e040182, host =  2}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = bae80b0b, host =  1}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = f08ad325, host =  0}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = 6e040182, host =  0}
+	expect 0    0    Debug   {^vmod_directors shard:.*point =  3d1fe97, host =  3}
+	expect 0    0    Debug   {^vmod_directors shard:.*point =  a25a43b, host =  6}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = 2b20d9a2, host =  1}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = 6337e62c, host =  8}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = c9803f17, host =  5}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = d51dafe6, host =  0}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = eb74a7d5, host =  4}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = f493ce58, host =  2}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = fc1a5162, host =  7}
+	expect 0    0    Debug   {^vmod_directors shard:.*point =  3d1fe97, host =  3}
+	expect 0    0    Debug   {^vmod_directors shard:.*point =  a25a43b, host =  6}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = 2b20d9a2, host =  1}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = 6337e62c, host =  7}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = c9803f17, host =  5}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = d51dafe6, host =  0}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = eb74a7d5, host =  4}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = f493ce58, host =  2}
+	expect 0    0    Debug   {^vmod_directors shard:.*point =  3d1fe97, host =  3}
+	expect 0    0    Debug   {^vmod_directors shard:.*point =  a25a43b, host =  6}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = 2b20d9a2, host =  1}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = c9803f17, host =  5}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = d51dafe6, host =  0}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = eb74a7d5, host =  4}
+	expect 0    0    Debug   {^vmod_directors shard:.*point = f493ce58, host =  2}
 }
 
 logexpect l1 -start
diff --git a/bin/varnishtest/tests/d00017.vtc b/bin/varnishtest/tests/d00017.vtc
index 36793a386..eeabcde5f 100644
--- a/bin/varnishtest/tests/d00017.vtc
+++ b/bin/varnishtest/tests/d00017.vtc
@@ -56,91 +56,91 @@ varnish v1 -vcl+backend {
 # check that the hashcircle points are decremented by one compared to vslp
 #
 # generated from vslp test output
-# perl -ne </tmp/vslp_v0.log 'if (/VSLP hashcircle/) { my @f=split; $f[9] =~ s/\]/./; $f[13] =~ s/,//; $f[13]=hex($f[13]) - 1; $f[16] =~ s/\}//; printf ("\texpect 0 =    Debug {^shard: hashcircle.* %s = .point = %8x, host = %2d.}\n", $f[9], $f[13], $f[16]); }' >/tmp/regression.logexp
+# perl -ne </tmp/vslp_v0.log 'if (/VSLP hashcircle/) { my @f=split; $f[9] =~ s/\]/./; $f[13] =~ s/,//; $f[13]=hex($f[13]) - 1; $f[16] =~ s/\}//; printf ("\texpect 0 =    Debug {^vmod_directors shard: hashcircle.* %s = .point = %8x, host = %2d.}\n", $f[9], $f[13], $f[16]); }' >/tmp/regression.logexp
 
 logexpect l1 -v v1 -g raw -d 1 {
 	expect 0 0    CLI   "^Rd vcl.load"
-	expect 0 =    Debug {^shard: hashcircle.* 0. = .point =  3b6b56a, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 1. = .point =  66986a7, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 2. = .point =  7e41e30, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 3. = .point =  b749e7b, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 4. = .point =  e543430, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 5. = .point = 10136c05, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 6. = .point = 102d847f, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 7. = .point = 1112f910, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 8. = .point = 1119a7c7, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 9. = .point = 22464ee9, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 10. = .point = 22b35675, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 11. = .point = 2363bebb, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 12. = .point = 259eeccf, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 13. = .point = 26f0c3e7, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 14. = .point = 28340f35, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 15. = .point = 285e8475, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 16. = .point = 28ec7a6f, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 17. = .point = 2da0e37b, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 18. = .point = 3392487a, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 19. = .point = 37597c4c, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 20. = .point = 4b1f5b22, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 21. = .point = 523723f2, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 22. = .point = 539234db, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 23. = .point = 564ca84f, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 24. = .point = 5d2df428, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 25. = .point = 5fa294ee, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 26. = .point = 60dded53, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 27. = .point = 6257bc27, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 28. = .point = 64014b25, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 29. = .point = 6bfd5a2d, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 30. = .point = 6e040182, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 31. = .point = 6e3819f7, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 32. = .point = 7232b381, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 33. = .point = 74c384ad, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 34. = .point = 83ce71ce, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 35. = .point = 888b6447, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 36. = .point = 8997c018, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 37. = .point = 8aa6b5b4, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 38. = .point = 8b47e6ac, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 39. = .point = 8bc8bc11, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 40. = .point = 8e2d3849, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 41. = .point = 8e7e012c, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 42. = .point = 99892987, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 43. = .point = 9a6f2f00, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 44. = .point = 9ef9125d, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 45. = .point = 9f33cd30, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 46. = .point = 9fc69b51, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 47. = .point = a19f99eb, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 48. = .point = a28b9595, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 49. = .point = a8afe9c4, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 50. = .point = ad923ad3, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 51. = .point = ae8946c6, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 52. = .point = b197e339, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 53. = .point = b3c305e6, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 54. = .point = b6bf43ea, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 55. = .point = b9004d3d, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 56. = .point = bbcc0bad, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 57. = .point = c2542a5d, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 58. = .point = c6c43fa7, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 59. = .point = c945958a, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 60. = .point = cbd9198a, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 61. = .point = d4c93105, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 62. = .point = d7de63b6, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 63. = .point = d937a7df, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 64. = .point = dac52229, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 65. = .point = db7840f0, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 66. = .point = dd5c6bef, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 67. = .point = dfd5333b, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 68. = .point = e991584c, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 69. = .point = ec8891c5, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 70. = .point = ef6b4ab5, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 71. = .point = f08ad325, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 72. = .point = f3325ba2, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 73. = .point = f6530dd1, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 74. = .point = fc28e8d2, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 0. = .point =  3b6b56a, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 1. = .point =  66986a7, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 2. = .point =  7e41e30, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 3. = .point =  b749e7b, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 4. = .point =  e543430, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 5. = .point = 10136c05, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 6. = .point = 102d847f, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 7. = .point = 1112f910, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 8. = .point = 1119a7c7, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 9. = .point = 22464ee9, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 10. = .point = 22b35675, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 11. = .point = 2363bebb, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 12. = .point = 259eeccf, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 13. = .point = 26f0c3e7, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 14. = .point = 28340f35, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 15. = .point = 285e8475, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 16. = .point = 28ec7a6f, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 17. = .point = 2da0e37b, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 18. = .point = 3392487a, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 19. = .point = 37597c4c, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 20. = .point = 4b1f5b22, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 21. = .point = 523723f2, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 22. = .point = 539234db, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 23. = .point = 564ca84f, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 24. = .point = 5d2df428, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 25. = .point = 5fa294ee, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 26. = .point = 60dded53, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 27. = .point = 6257bc27, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 28. = .point = 64014b25, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 29. = .point = 6bfd5a2d, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 30. = .point = 6e040182, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 31. = .point = 6e3819f7, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 32. = .point = 7232b381, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 33. = .point = 74c384ad, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 34. = .point = 83ce71ce, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 35. = .point = 888b6447, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 36. = .point = 8997c018, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 37. = .point = 8aa6b5b4, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 38. = .point = 8b47e6ac, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 39. = .point = 8bc8bc11, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 40. = .point = 8e2d3849, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 41. = .point = 8e7e012c, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 42. = .point = 99892987, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 43. = .point = 9a6f2f00, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 44. = .point = 9ef9125d, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 45. = .point = 9f33cd30, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 46. = .point = 9fc69b51, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 47. = .point = a19f99eb, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 48. = .point = a28b9595, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 49. = .point = a8afe9c4, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 50. = .point = ad923ad3, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 51. = .point = ae8946c6, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 52. = .point = b197e339, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 53. = .point = b3c305e6, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 54. = .point = b6bf43ea, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 55. = .point = b9004d3d, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 56. = .point = bbcc0bad, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 57. = .point = c2542a5d, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 58. = .point = c6c43fa7, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 59. = .point = c945958a, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 60. = .point = cbd9198a, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 61. = .point = d4c93105, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 62. = .point = d7de63b6, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 63. = .point = d937a7df, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 64. = .point = dac52229, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 65. = .point = db7840f0, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 66. = .point = dd5c6bef, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 67. = .point = dfd5333b, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 68. = .point = e991584c, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 69. = .point = ec8891c5, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 70. = .point = ef6b4ab5, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 71. = .point = f08ad325, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 72. = .point = f3325ba2, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 73. = .point = f6530dd1, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 74. = .point = fc28e8d2, host =  2.}
 
 	expect 0 =    CLI   Loaded
 
-	expect * =    Debug {^shard: lookup key 68b902f7 idx 29 host 0}
-	expect * =    Debug {^shard: lookup key 39dc4613 idx 20 host 1}
-	expect * =    Debug {^shard: lookup key c7793505 idx 59 host 2}
+	expect * =    Debug {^vmod_directors shard: lookup key 68b902f7 idx 29 host 0}
+	expect * =    Debug {^vmod_directors shard: lookup key 39dc4613 idx 20 host 1}
+	expect * =    Debug {^vmod_directors shard: lookup key c7793505 idx 59 host 2}
 } -start
 
 client c1 {
diff --git a/bin/varnishtest/tests/d00030.vtc b/bin/varnishtest/tests/d00030.vtc
index 912314b03..c83ba5db9 100644
--- a/bin/varnishtest/tests/d00030.vtc
+++ b/bin/varnishtest/tests/d00030.vtc
@@ -24,14 +24,14 @@ varnish v1 -vcl {
 
 logexpect l1 -v v1 -g raw -d 1 {
     expect 0 0    CLI       {^Rd vcl.load}
-    expect 0 0    Error     {by=BLOB but no or empty key_blob - using key 0}
+    expect 0 0    Error     {vmod_directors shard p: shard_param.set.. by=BLOB but no or empty key_blob - using key 0}
 } -start -wait
 
 logexpect l2 -v v1 -g raw {
-    expect * 1001 VCL_Error {shard .backend param invalid}
+    expect * 1001 VCL_Error {vmod_directors shard shard: .backend.key_blob. param invalid}
 } -start
 logexpect l3 -v v1 -g raw {
-    expect * 1003 VCL_Error {shard_param.set.. may only be used in vcl_init and in backend/pipe context}
+    expect * 1003 VCL_Error {vmod_directors shard p: shard_param.set.. may only be used in vcl_init and in backend/pipe context}
 } -start
 
 client c1 {
@@ -159,7 +159,7 @@ varnish v1 -errvcl {invalid warmup argument 1.1} {
     }
 }
 
-varnish v1 -errvcl {resolve=LAZY with other parameters can only be used in backend/pipe context} {
+varnish v1 -errvcl {vmod_directors shard shard: .backend(resolve=LAZY) with other parameters can only be used in backend/pipe context} {
     import directors;
     import blob;
 
@@ -172,7 +172,7 @@ varnish v1 -errvcl {resolve=LAZY with other parameters can only be used in backe
     }
 }
 
-varnish v1 -errvcl {resolve=NOW can not be used in vcl_init} {
+varnish v1 -errvcl {vmod_directors shard shard: .backend(resolve=NOW) can not be used in vcl_init{}/vcl_fini{}} {
     import directors;
     import blob;
 
diff --git a/bin/varnishtest/tests/d00041.vtc b/bin/varnishtest/tests/d00041.vtc
index 0f7d5b058..5d80e0c19 100644
--- a/bin/varnishtest/tests/d00041.vtc
+++ b/bin/varnishtest/tests/d00041.vtc
@@ -49,162 +49,162 @@ varnish v1 -vcl+backend {
 logexpect l1 -v v1 -g raw -d 1 {
 	expect 0 0    CLI   "^Rd vcl.load"
 
-	expect 0 =    Debug {^shard: hashcircle.* 0. = .point = *238d0ef, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 1. = .point = *321c598, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 2. = .point = *3b6b56a, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 3. = .point = *408ec1e, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 4. = .point = *66986a7, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 5. = .point = *7e41e30, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 6. = .point = *b749e7b, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 7. = .point = *e543430, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 8. = .point = *10136c05, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 9. = .point = *102d847f, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 10. = .point = *1112f910, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 11. = .point = *1119a7c7, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 12. = .point = *14d95c44, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 13. = .point = *150fea1f, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 14. = .point = *1643ecb6, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 15. = .point = *189ff2f2, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 16. = .point = *19cfe9f3, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 17. = .point = *1e1c78c3, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 18. = .point = *1fe0dea0, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 19. = .point = *22464ee9, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 20. = .point = *22b35675, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 21. = .point = *2363bebb, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 22. = .point = *24f827bb, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 23. = .point = *259eeccf, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 24. = .point = *26f0c3e7, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 25. = .point = *271874d4, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 26. = .point = *28340f35, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 27. = .point = *285e8475, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 28. = .point = *28ec7a6f, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 29. = .point = *299c6298, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 30. = .point = *2aedc3f7, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 31. = .point = *2b031742, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 32. = .point = *2da0e37b, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 33. = .point = *310bd2ca, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 34. = .point = *31e5f2df, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 35. = .point = *32d6b3ed, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 36. = .point = *33047373, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 37. = .point = *3392487a, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 38. = .point = *37597c4c, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 39. = .point = *3f6b2b89, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 40. = .point = *43cf6426, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 41. = .point = *46a58f28, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 42. = .point = *4b1f5b22, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 43. = .point = *523723f2, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 44. = .point = *539234db, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 45. = .point = *564ca84f, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 46. = .point = *58501380, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 47. = .point = *58704432, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 48. = .point = *5b1bcbbe, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 49. = .point = *5d2df428, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 50. = .point = *5fa294ee, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 51. = .point = *606fd878, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 52. = .point = *60dded53, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 53. = .point = *616cdb68, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 54. = .point = *6257bc27, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 55. = .point = *64014b25, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 56. = .point = *6918f467, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 57. = .point = *6a08c380, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 58. = .point = *6bfd5a2d, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 59. = .point = *6c0b607a, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 60. = .point = *6c74d296, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 61. = .point = *6e040182, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 62. = .point = *6e3819f7, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 63. = .point = *720ec1a4, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 64. = .point = *7232b381, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 65. = .point = *74c384ad, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 66. = .point = *76d47350, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 67. = .point = *791eb3a3, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 68. = .point = *7a048f20, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 69. = .point = *7f874929, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 70. = .point = *83ce71ce, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 71. = .point = *888b6447, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 72. = .point = *8997c018, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 73. = .point = *89b7d09c, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 74. = .point = *8aa6b5b4, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 75. = .point = *8ae34bde, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 76. = .point = *8b382e03, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 77. = .point = *8b47e6ac, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 78. = .point = *8bc76115, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 79. = .point = *8bc8bc11, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 80. = .point = *8e2d3849, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 81. = .point = *8e7e012c, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 82. = .point = *8f5b4c63, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 83. = .point = *94a94162, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 84. = .point = *99892987, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 85. = .point = *9a6f2f00, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 86. = .point = *9b970b49, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 87. = .point = *9e09a3a7, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 88. = .point = *9ef9125d, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 89. = .point = *9f33cd30, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 90. = .point = *9fc69b51, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 91. = .point = *a19f99eb, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 92. = .point = *a28b9595, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 93. = .point = *a3582038, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 94. = .point = *a4b6a3b9, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 95. = .point = *a66da9cb, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 96. = .point = *a8657c76, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 97. = .point = *a8afe9c4, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 98. = .point = *aa488703, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 99. = .point = *ac7b4454, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 100. = .point = *ad923ad3, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 101. = .point = *ae8946c6, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 102. = .point = *b197e339, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 103. = .point = *b3c305e6, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 104. = .point = *b4dab004, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 105. = .point = *b6bf43ea, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 106. = .point = *b9004d3d, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 107. = .point = *b96b6455, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 108. = .point = *b9a0edb9, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 109. = .point = *b9ec6465, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 110. = .point = *bb8eed4d, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 111. = .point = *bbcc0bad, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 112. = .point = *bcfea141, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 113. = .point = *be300622, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 114. = .point = *bf514d68, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 115. = .point = *c1afc7d2, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 116. = .point = *c2542a5d, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 117. = .point = *c6c43fa7, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 118. = .point = *c945958a, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 119. = .point = *c9f304a4, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 120. = .point = *cb896aa8, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 121. = .point = *cbd9198a, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 122. = .point = *ccd61dad, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 123. = .point = *d07e4431, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 124. = .point = *d21fe35f, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 125. = .point = *d4c93105, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 126. = .point = *d570b815, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 127. = .point = *d7de63b6, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 128. = .point = *d8634aef, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 129. = .point = *d92d916d, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 130. = .point = *d937a7df, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 131. = .point = *dac52229, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 132. = .point = *db7840f0, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 133. = .point = *dd5c6bef, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 134. = .point = *dded5798, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 135. = .point = *dfd5333b, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 136. = .point = *e183345a, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 137. = .point = *e2c71c27, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 138. = .point = *e49bf9d8, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 139. = .point = *e72bc224, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 140. = .point = *e8b27f41, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 141. = .point = *e991584c, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 142. = .point = *ea201c5e, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 143. = .point = *ec8891c5, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 144. = .point = *edcc8dd9, host =  1.}
-	expect 0 =    Debug {^shard: hashcircle.* 145. = .point = *ef6b4ab5, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 146. = .point = *f08ad325, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 147. = .point = *f3325ba2, host =  2.}
-	expect 0 =    Debug {^shard: hashcircle.* 148. = .point = *f6530dd1, host =  0.}
-	expect 0 =    Debug {^shard: hashcircle.* 149. = .point = *fc28e8d2, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 0. = .point = *238d0ef, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 1. = .point = *321c598, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 2. = .point = *3b6b56a, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 3. = .point = *408ec1e, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 4. = .point = *66986a7, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 5. = .point = *7e41e30, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 6. = .point = *b749e7b, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 7. = .point = *e543430, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 8. = .point = *10136c05, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 9. = .point = *102d847f, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 10. = .point = *1112f910, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 11. = .point = *1119a7c7, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 12. = .point = *14d95c44, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 13. = .point = *150fea1f, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 14. = .point = *1643ecb6, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 15. = .point = *189ff2f2, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 16. = .point = *19cfe9f3, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 17. = .point = *1e1c78c3, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 18. = .point = *1fe0dea0, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 19. = .point = *22464ee9, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 20. = .point = *22b35675, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 21. = .point = *2363bebb, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 22. = .point = *24f827bb, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 23. = .point = *259eeccf, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 24. = .point = *26f0c3e7, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 25. = .point = *271874d4, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 26. = .point = *28340f35, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 27. = .point = *285e8475, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 28. = .point = *28ec7a6f, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 29. = .point = *299c6298, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 30. = .point = *2aedc3f7, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 31. = .point = *2b031742, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 32. = .point = *2da0e37b, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 33. = .point = *310bd2ca, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 34. = .point = *31e5f2df, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 35. = .point = *32d6b3ed, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 36. = .point = *33047373, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 37. = .point = *3392487a, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 38. = .point = *37597c4c, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 39. = .point = *3f6b2b89, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 40. = .point = *43cf6426, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 41. = .point = *46a58f28, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 42. = .point = *4b1f5b22, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 43. = .point = *523723f2, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 44. = .point = *539234db, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 45. = .point = *564ca84f, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 46. = .point = *58501380, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 47. = .point = *58704432, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 48. = .point = *5b1bcbbe, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 49. = .point = *5d2df428, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 50. = .point = *5fa294ee, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 51. = .point = *606fd878, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 52. = .point = *60dded53, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 53. = .point = *616cdb68, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 54. = .point = *6257bc27, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 55. = .point = *64014b25, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 56. = .point = *6918f467, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 57. = .point = *6a08c380, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 58. = .point = *6bfd5a2d, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 59. = .point = *6c0b607a, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 60. = .point = *6c74d296, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 61. = .point = *6e040182, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 62. = .point = *6e3819f7, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 63. = .point = *720ec1a4, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 64. = .point = *7232b381, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 65. = .point = *74c384ad, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 66. = .point = *76d47350, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 67. = .point = *791eb3a3, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 68. = .point = *7a048f20, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 69. = .point = *7f874929, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 70. = .point = *83ce71ce, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 71. = .point = *888b6447, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 72. = .point = *8997c018, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 73. = .point = *89b7d09c, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 74. = .point = *8aa6b5b4, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 75. = .point = *8ae34bde, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 76. = .point = *8b382e03, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 77. = .point = *8b47e6ac, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 78. = .point = *8bc76115, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 79. = .point = *8bc8bc11, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 80. = .point = *8e2d3849, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 81. = .point = *8e7e012c, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 82. = .point = *8f5b4c63, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 83. = .point = *94a94162, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 84. = .point = *99892987, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 85. = .point = *9a6f2f00, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 86. = .point = *9b970b49, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 87. = .point = *9e09a3a7, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 88. = .point = *9ef9125d, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 89. = .point = *9f33cd30, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 90. = .point = *9fc69b51, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 91. = .point = *a19f99eb, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 92. = .point = *a28b9595, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 93. = .point = *a3582038, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 94. = .point = *a4b6a3b9, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 95. = .point = *a66da9cb, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 96. = .point = *a8657c76, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 97. = .point = *a8afe9c4, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 98. = .point = *aa488703, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 99. = .point = *ac7b4454, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 100. = .point = *ad923ad3, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 101. = .point = *ae8946c6, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 102. = .point = *b197e339, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 103. = .point = *b3c305e6, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 104. = .point = *b4dab004, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 105. = .point = *b6bf43ea, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 106. = .point = *b9004d3d, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 107. = .point = *b96b6455, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 108. = .point = *b9a0edb9, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 109. = .point = *b9ec6465, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 110. = .point = *bb8eed4d, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 111. = .point = *bbcc0bad, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 112. = .point = *bcfea141, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 113. = .point = *be300622, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 114. = .point = *bf514d68, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 115. = .point = *c1afc7d2, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 116. = .point = *c2542a5d, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 117. = .point = *c6c43fa7, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 118. = .point = *c945958a, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 119. = .point = *c9f304a4, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 120. = .point = *cb896aa8, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 121. = .point = *cbd9198a, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 122. = .point = *ccd61dad, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 123. = .point = *d07e4431, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 124. = .point = *d21fe35f, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 125. = .point = *d4c93105, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 126. = .point = *d570b815, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 127. = .point = *d7de63b6, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 128. = .point = *d8634aef, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 129. = .point = *d92d916d, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 130. = .point = *d937a7df, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 131. = .point = *dac52229, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 132. = .point = *db7840f0, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 133. = .point = *dd5c6bef, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 134. = .point = *dded5798, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 135. = .point = *dfd5333b, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 136. = .point = *e183345a, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 137. = .point = *e2c71c27, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 138. = .point = *e49bf9d8, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 139. = .point = *e72bc224, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 140. = .point = *e8b27f41, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 141. = .point = *e991584c, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 142. = .point = *ea201c5e, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 143. = .point = *ec8891c5, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 144. = .point = *edcc8dd9, host =  1.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 145. = .point = *ef6b4ab5, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 146. = .point = *f08ad325, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 147. = .point = *f3325ba2, host =  2.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 148. = .point = *f6530dd1, host =  0.}
+	expect 0 =    Debug {^vmod_directors shard: hashcircle.* 149. = .point = *fc28e8d2, host =  2.}
 
 	expect 0 =    CLI   Loaded
 
-	expect * =    Debug {^shard: lookup key 564ca84f idx 45 host 0}
-	expect * =    Debug {^shard: lookup key 19cfe9f3 idx 16 host 1}
-	expect * =    Debug {^shard: lookup key 46a58f28 idx 41 host 2}
+	expect * =    Debug {^vmod_directors shard: lookup key 564ca84f idx 45 host 0}
+	expect * =    Debug {^vmod_directors shard: lookup key 19cfe9f3 idx 16 host 1}
+	expect * =    Debug {^vmod_directors shard: lookup key 46a58f28 idx 41 host 2}
 } -start
 
 client c1 {
diff --git a/doc/changes.rst b/doc/changes.rst
index 7c4bbba93..59a6dc52a 100644
--- a/doc/changes.rst
+++ b/doc/changes.rst
@@ -48,6 +48,9 @@ Varnish Cache Next (2021-03-15)
 * Shard director ``Error`` log messages with ``(notice)`` have been
   turned into ``Notice`` log messages.
 
+* All shard ``Error`` and ``Notice`` messages now use the unified
+  prefix ``vmod_directors shard %s``.
+
 ================================
 Varnish Cache 6.5.1 (2020-09-25)
 ================================
diff --git a/lib/libvmod_directors/shard_cfg.c b/lib/libvmod_directors/shard_cfg.c
index b61cb9392..a6e87fd5c 100644
--- a/lib/libvmod_directors/shard_cfg.c
+++ b/lib/libvmod_directors/shard_cfg.c
@@ -119,7 +119,7 @@ shard_change_get(VRT_CTX, struct sharddir * const shardd)
 
 	change = WS_Alloc(ctx->ws, sizeof(*change));
 	if (change == NULL) {
-		VRT_fail(ctx, "could not get workspace");
+		shard_fail(ctx, shardd->name, "%s", "could not get workspace");
 		return (NULL);
 	}
 
@@ -151,7 +151,8 @@ shard_change_task_add(VRT_CTX, struct shard_change *change,
 
 	task = WS_Alloc(ctx->ws, sizeof(*task));
 	if (task == NULL) {
-		VRT_fail(ctx, "could not get workspace for task");
+		shard_fail(ctx, change->shardd->name, "%s",
+		    "could not get workspace for task");
 		return (NULL);
 	}
 	INIT_OBJ(task, SHARD_CHANGE_TASK_MAGIC);
@@ -179,7 +180,8 @@ shard_change_task_backend(VRT_CTX, struct sharddir *shardd,
 
 	b = WS_Alloc(ctx->ws, sizeof(*b));
 	if (b == NULL) {
-		VRT_fail(ctx, "could not get workspace for change");
+		shard_fail(ctx, change->shardd->name, "%s",
+		    "could not get workspace for task");
 		return (NULL);
 	}
 
@@ -598,8 +600,8 @@ shardcfg_apply_change(struct vsl_log *vsl, struct sharddir *shardd,
 
 			const char * const ident = b->ident;
 
-			sharddir_err(vsl, SLT_Notice, "shard %s: backend %s%s%s "
-			    "already exists - skipping", shardd->name,
+			shard_notice(vsl, shardd->name,
+			    "backend %s%s%s already exists - skipping",
 			    VRT_BACKEND_string(b->backend),
 			    ident ? "/" : "",
 			    ident ? ident : "");
@@ -642,8 +644,8 @@ change_reconfigure(struct shard_change *change, VCL_INT replicas)
 	shardd->hashcircle = NULL;
 
 	if (shardd->n_backend == 0) {
-		sharddir_err(change->vsl, SLT_Error, "shard %s: .reconfigure() "
-		    "no backends", shardd->name);
+		shard_err0(change->vsl, shardd->name,
+		    ".reconfigure() no backends");
 		sharddir_unlock(shardd);
 		return (0);
 	}
@@ -660,9 +662,8 @@ shardcfg_reconfigure(VRT_CTX, struct sharddir *shardd, VCL_INT replicas)
 
 	CHECK_OBJ_NOTNULL(shardd, SHARDDIR_MAGIC);
 	if (replicas <= 0) {
-		sharddir_err(ctx->vsl, SLT_Error,
-		    "shard %s: .reconfigure() invalid replicas argument %ld",
-		    shardd->name, replicas);
+		shard_err(ctx->vsl, shardd->name,
+		    ".reconfigure() invalid replicas argument %ld", replicas);
 		return (0);
 	}
 
diff --git a/lib/libvmod_directors/shard_dir.c b/lib/libvmod_directors/shard_dir.c
index 1d4419b66..00b61aa98 100644
--- a/lib/libvmod_directors/shard_dir.c
+++ b/lib/libvmod_directors/shard_dir.c
@@ -78,7 +78,7 @@ sharddir_debug(struct sharddir *shardd, const uint32_t flags)
 }
 
 void
-sharddir_err(struct vsl_log *vsl, enum VSL_tag_e tag,  const char *fmt, ...)
+sharddir_log(struct vsl_log *vsl, enum VSL_tag_e tag,  const char *fmt, ...)
 {
 	va_list ap;
 
@@ -242,11 +242,11 @@ validate_alt(VRT_CTX, const struct sharddir *shardd, VCL_INT *alt)
 	const VCL_INT alt_max = shardd->n_backend - 1;
 
 	if (*alt < 0) {
-		shard_err(ctx, shardd,
+		shard_err(ctx->vsl, shardd->name,
 		    "invalid negative parameter alt=%ld, set to 0", *alt);
 		*alt = 0;
 	} else if (*alt > alt_max) {
-		shard_err(ctx, shardd,
+		shard_err(ctx->vsl, shardd->name,
 		    "parameter alt=%ld limited to %ld", *alt, alt_max);
 		*alt = alt_max;
 	}
@@ -408,7 +408,7 @@ sharddir_pick_be(VRT_CTX, struct sharddir *shardd, uint32_t key, VCL_INT alt,
 	sharddir_rdlock(shardd);
 
 	if (shardd->n_backend == 0) {
-		shard_err0(ctx, shardd, "no backends");
+		shard_err0(ctx->vsl, shardd->name, "no backends");
 		sharddir_unlock(shardd);
 		return (NULL);
 	}
diff --git a/lib/libvmod_directors/shard_dir.h b/lib/libvmod_directors/shard_dir.h
index 27c0aee60..4ec22a1d2 100644
--- a/lib/libvmod_directors/shard_dir.h
+++ b/lib/libvmod_directors/shard_dir.h
@@ -89,23 +89,25 @@ sharddir_backend(const struct sharddir *shardd, unsigned id)
 #define SHDBG(flag, shardd, ...)					\
 	do {								\
 		if ((shardd)->debug_flags & (flag))			\
-			VSL(SLT_Debug, 0, "shard: " __VA_ARGS__);	\
+			VSL(SLT_Debug, 0, "vmod_directors shard: "	\
+			    __VA_ARGS__);				\
 	} while (0)
 
-#define shard_err(ctx, shardd, fmt, ...)				\
-	do {								\
-		sharddir_err((ctx)->vsl, SLT_Error, "shard %s: " fmt,	\
-		    (shardd)->name, __VA_ARGS__);			\
-	} while (0)
+#define shard_log(vsl, tag, name, fmt, ...)				\
+	sharddir_log(vsl, tag, "vmod_directors shard %s: " fmt,		\
+	    name, __VA_ARGS__)
 
-#define shard_err0(ctx, shardd, msg)					\
-	do {								\
-		sharddir_err((ctx)->vsl, SLT_Error, "shard %s: %s",	\
-		    (shardd)->name, (msg));				\
-	} while (0)
+#define shard_fail(ctx, name, fmt, ...)				\
+	VRT_fail(ctx, "vmod_directors shard %s: " fmt, name, __VA_ARGS__)
+#define shard_err(vsl, name, fmt, ...)				\
+	shard_log(vsl, SLT_Error, name, fmt, __VA_ARGS__)
+#define shard_err0(vsl, name, msg)			\
+	shard_log(vsl, SLT_Error, name, "%s", msg)
+#define shard_notice(vsl, name, fmt, ...)		\
+	shard_log(vsl, SLT_Notice, name, fmt, __VA_ARGS__)
 
 void sharddir_debug(struct sharddir *shardd, const uint32_t flags);
-void sharddir_err(struct vsl_log *, enum VSL_tag_e tag,  const char *fmt, ...);
+void sharddir_log(struct vsl_log *, enum VSL_tag_e tag,  const char *fmt, ...);
 void sharddir_new(struct sharddir **sharddp, const char *vcl_name,
     const struct vmod_directors_shard_param *param);
 void sharddir_set_param(struct sharddir *shardd,
diff --git a/lib/libvmod_directors/vmod_directors.vcc b/lib/libvmod_directors/vmod_directors.vcc
index 161841531..ddcbf6a3a 100644
--- a/lib/libvmod_directors/vmod_directors.vcc
+++ b/lib/libvmod_directors/vmod_directors.vcc
@@ -344,12 +344,12 @@ Error Reporting
 Failing methods should report errors to VSL with the Error tag, so
 when configuring the shard director, you are advised to check::
 
-	varnishlog -I Error:^shard
+	varnishlog -I Error:^vmod_directors.shard
 
 Additional information may be provided as Notices, which can be
 checked using
 
-	varnishlog -I Notice:^shard
+	varnishlog -I Notice:^vmod_directors.shard
 
 $Method VOID .set_warmup(REAL probability=0.0)
 
diff --git a/lib/libvmod_directors/vmod_shard.c b/lib/libvmod_directors/vmod_shard.c
index 42dbcaf85..5e0137bbc 100644
--- a/lib/libvmod_directors/vmod_shard.c
+++ b/lib/libvmod_directors/vmod_shard.c
@@ -266,7 +266,7 @@ vmod_shard_set_warmup(VRT_CTX, struct vmod_directors_shard *vshard,
 {
 	CHECK_OBJ_NOTNULL(vshard, VMOD_SHARD_SHARD_MAGIC);
 	if (probability < 0 || probability >= 1) {
-		shard_err(ctx, vshard->shardd,
+		shard_notice(ctx->vsl, vshard->shardd->name,
 		    ".set_warmup(%f) ignored", probability);
 		return;
 	}
@@ -297,7 +297,8 @@ vmod_shard_associate(VRT_CTX,
 	ppt = shard_param_blob(b);
 
 	if (ppt == NULL) {
-		VRT_fail(ctx, "shard .associate param invalid");
+		shard_fail(ctx, vshard->shardd->name, "%s",
+		    "shard .associate param invalid");
 		return;
 	}
 
@@ -313,8 +314,8 @@ vmod_shard_add_backend(VRT_CTX, struct vmod_directors_shard *vshard,
 	CHECK_OBJ_NOTNULL(vshard, VMOD_SHARD_SHARD_MAGIC);
 
 	if (args->backend == NULL) {
-		VRT_fail(ctx, "%s: NULL backend cannot be added",
-			 vshard->shardd->name);
+		shard_fail(ctx, vshard->shardd->name, "%s",
+		    "NULL backend cannot be added");
 		return (0);
 	}
 
@@ -322,7 +323,7 @@ vmod_shard_add_backend(VRT_CTX, struct vmod_directors_shard *vshard,
 		if (args->weight >= 1)
 			weight = args->weight;
 		else
-			shard_err(ctx, vshard->shardd,
+			shard_notice(ctx->vsl, vshard->shardd->name,
 			    ".add_backend(weight=%f) ignored", args->weight);
 	}
 
@@ -342,9 +343,8 @@ vmod_shard_remove_backend(VRT_CTX, struct vmod_directors_shard *vshard,
 	CHECK_OBJ_NOTNULL(vshard, VMOD_SHARD_SHARD_MAGIC);
 
 	if (be == NULL && ident == NULL) {
-		VRT_fail(ctx, "%s.backend_remove(): "
-		    "either backend or ident are required",
-		    vshard->shardd->name);
+		shard_fail(ctx, vshard->shardd->name, "%s",
+		    ".backend_remove(): either backend or ident are required");
 		return (0);
 	}
 
@@ -499,7 +499,7 @@ shard_param_set_mask(const struct VARGS(shard_param_set) * const a)
  */
 static struct vmod_directors_shard_param *
 shard_param_args(VRT_CTX,
-    struct vmod_directors_shard_param *p, const char *who,
+    struct vmod_directors_shard_param *p, const char *func,
     uint32_t args, VCL_ENUM by_s, VCL_INT key_int, VCL_BLOB key_blob,
     VCL_INT alt, VCL_REAL warmup, VCL_BOOL rampup, VCL_ENUM healthy_s)
 {
@@ -516,16 +516,15 @@ shard_param_args(VRT_CTX,
 	/* by_s / key_int / key_blob */
 	if (by_s == VENUM(KEY)) {
 		if ((args & arg_key) == 0) {
-			VRT_fail(ctx, "%s %s: "
-				 "missing key argument with by=%s",
-				 who, p->vcl_name, by_s);
+			shard_fail(ctx, p->vcl_name,
+			    "%s missing key argument with by=%s",
+			    func, by_s);
 			return (NULL);
 		}
 		if (key_int < 0 || key_int > UINT32_MAX) {
-			VRT_fail(ctx, "%s %s: "
-				 "invalid key argument %jd with by=%s",
-				 who, p->vcl_name,
-				 (intmax_t)key_int, by_s);
+			shard_fail(ctx, p->vcl_name,
+			    "%s invalid key argument %jd with by=%s",
+			    func, (intmax_t)key_int, by_s);
 			return (NULL);
 		}
 		assert(key_int >= 0);
@@ -533,26 +532,24 @@ shard_param_args(VRT_CTX,
 		p->key = (uint32_t)key_int;
 	} else if (by_s == VENUM(BLOB)) {
 		if ((args & arg_key_blob) == 0) {
-			VRT_fail(ctx, "%s %s: "
-				 "missing key_blob argument with by=%s",
-				 who, p->vcl_name, by_s);
+			shard_fail(ctx, p->vcl_name,
+			    "%s missing key_blob argument with by=%s",
+			    func, by_s);
 			return (NULL);
 		}
 		if (key_blob == NULL || key_blob->len == 0 ||
 		    key_blob->blob == NULL) {
-			sharddir_err(ctx->vsl, SLT_Error, "%s %s: "
-				     "by=BLOB but no or empty key_blob "
-				     "- using key 0",
-				     who, p->vcl_name);
+			shard_err(ctx->vsl, p->vcl_name,
+			    "%s by=BLOB but no or empty key_blob - using key 0",
+			    func);
 			p->key = 0;
 		} else
 			p->key = shard_blob_key(key_blob);
 	} else if (by_s == VENUM(HASH) || by_s == VENUM(URL)) {
 		if (args & (arg_key|arg_key_blob)) {
-			VRT_fail(ctx, "%s %s: "
-				 "key and key_blob arguments are "
-				 "invalid with by=%s",
-				 who, p->vcl_name, by_s);
+			shard_fail(ctx, p->vcl_name,
+			    "%s key and key_blob arguments are "
+			    "invalid with by=%s", func, by_s);
 			return (NULL);
 		}
 	} else {
@@ -562,9 +559,9 @@ shard_param_args(VRT_CTX,
 
 	if (args & arg_alt) {
 		if (alt < 0) {
-			VRT_fail(ctx, "%s %s: "
-				 "invalid alt argument %jd",
-				 who, p->vcl_name, (intmax_t)alt);
+			shard_fail(ctx, p->vcl_name,
+			    "%s invalid alt argument %jd",
+			    func, (intmax_t)alt);
 			return (NULL);
 		}
 		p->alt = alt;
@@ -572,9 +569,9 @@ shard_param_args(VRT_CTX,
 
 	if (args & arg_warmup) {
 		if ((warmup < 0 && warmup != -1) || warmup > 1) {
-			VRT_fail(ctx, "%s %s: "
-				 "invalid warmup argument %f",
-				 who, p->vcl_name, warmup);
+			shard_fail(ctx, p->vcl_name,
+			    "%s invalid warmup argument %f",
+			    func, warmup);
 			return (NULL);
 		}
 		p->warmup = warmup;
@@ -618,9 +615,10 @@ vmod_shard_backend(VRT_CTX, struct vmod_directors_shard *vshard,
 		}
 
 		if ((ctx->method & SHARD_VCL_TASK_BEREQ) == 0) {
-			VRT_fail(ctx, "shard .backend resolve=LAZY with other "
-				 "parameters can only be used in backend/pipe "
-				 "context");
+			shard_fail(ctx, vshard->shardd->name, "%s",
+			    ".backend(resolve=LAZY) with other "
+			    "parameters can only be used in backend/pipe "
+			    "context");
 			return (NULL);
 		}
 
@@ -633,9 +631,9 @@ vmod_shard_backend(VRT_CTX, struct vmod_directors_shard *vshard,
 		pp->vcl_name = vshard->shardd->name;
 	} else if (resolve == VENUM(NOW)) {
 		if (ctx->method & VCL_MET_TASK_H) {
-			VRT_fail(ctx,
-				 "shard .backend resolve=NOW can not be "
-				 "used in vcl_init{}/vcl_fini{}");
+			shard_fail(ctx, vshard->shardd->name, "%s",
+			    ".backend(resolve=NOW) can not be "
+			    "used in vcl_init{}/vcl_fini{}");
 			return (NULL);
 		}
 		pp = shard_param_stack(&pstk, vshard->shardd->param,
@@ -648,7 +646,8 @@ vmod_shard_backend(VRT_CTX, struct vmod_directors_shard *vshard,
 	if (args & arg_param) {
 		ppt = shard_param_blob(a->param);
 		if (ppt == NULL) {
-			VRT_fail(ctx, "shard .backend param invalid");
+			shard_fail(ctx, vshard->shardd->name, "%s",
+			    ".backend(key_blob) param invalid");
 			return (NULL);
 		}
 		pp->defaults = ppt;
@@ -885,7 +884,7 @@ shard_param_task(VRT_CTX, const void *id,
 	task = VRT_priv_task(ctx, task_id);
 
 	if (task == NULL) {
-		VRT_fail(ctx, "no priv_task");
+		shard_fail(ctx, pa->vcl_name, "%s", "no priv_task");
 		return (NULL);
 	}
 
@@ -897,7 +896,7 @@ shard_param_task(VRT_CTX, const void *id,
 
 	p = WS_Alloc(ctx->ws, sizeof *p);
 	if (p == NULL) {
-		VRT_fail(ctx, "shard_param_task WS_Alloc failed");
+		shard_fail(ctx, pa->vcl_name, "%s", "WS_Alloc failed");
 		return (NULL);
 	}
 	task->priv = p;
@@ -921,8 +920,8 @@ shard_param_prep(VRT_CTX, struct vmod_directors_shard_param *p,
 	CHECK_OBJ_NOTNULL(p, VMOD_SHARD_SHARD_PARAM_MAGIC);
 
 	if (ctx->method & SHARD_VCL_TASK_REQ) {
-		VRT_fail(ctx, "%s may only be used "
-			 "in vcl_init and in backend/pipe context", who);
+		shard_fail(ctx, p->vcl_name, "%s may only be used "
+		    "in vcl_init and in backend/pipe context", who);
 		return (NULL);
 	} else if (ctx->method & SHARD_VCL_TASK_BEREQ)
 		p = shard_param_task(ctx, p, p);


More information about the varnish-commit mailing list