Created
November 5, 2019 00:08
-
-
Save rezan/b1f40d26f7fee5488d408c088a74965b to your computer and use it in GitHub Desktop.
Test how accurately a shard reconfiguration will remap
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Shard reconfiguration accuracy | |
# Create two different shard configurations, s1 and s2 | |
# See what percentage of URLs map the same (200) vs different (500) | |
vcl 4.0; | |
import crypto; | |
import directors; | |
backend b01 { .host = "0"; } | |
backend b02 { .host = "0"; } | |
backend b03 { .host = "0"; } | |
backend b04 { .host = "0"; } | |
backend b05 { .host = "0"; } | |
backend b06 { .host = "0"; } | |
#backend b07 { .host = "0"; } | |
#backend b08 { .host = "0"; } | |
#backend b09 { .host = "0"; } | |
#backend b10 { .host = "0"; } | |
#backend b11 { .host = "0"; } | |
#backend b12 { .host = "0"; } | |
#backend b13 { .host = "0"; } | |
sub vcl_init | |
{ | |
new s1 = directors.shard(); | |
s1.add_backend(b01); | |
s1.add_backend(b02); | |
s1.add_backend(b03); | |
s1.add_backend(b04); | |
#s1.add_backend(b05); | |
#s1.add_backend(b06); | |
#s1.add_backend(b07); | |
#s1.add_backend(b08); | |
#s1.add_backend(b09); | |
#s1.add_backend(b10); | |
#s1.add_backend(b11); | |
#s1.add_backend(b12); | |
s1.reconfigure(); | |
new s2 = directors.shard(); | |
s2.add_backend(b01); | |
s2.add_backend(b02); | |
s2.add_backend(b03); | |
s2.add_backend(b04); | |
s2.add_backend(b05); | |
s2.add_backend(b06); | |
#s2.add_backend(b07); | |
#s2.add_backend(b08); | |
#s2.add_backend(b09); | |
#s2.add_backend(b10); | |
#s2.add_backend(b11); | |
#s2.add_backend(b12); | |
#s2.add_backend(b13); | |
s2.reconfigure(); | |
} | |
sub vcl_recv | |
{ | |
set req.url = "/" + crypto.hex_encode(crypto.urandom(32)); | |
set req.backend_hint = s1.backend(URL); | |
set req.http.s1 = req.backend_hint; | |
set req.backend_hint = s2.backend(URL); | |
set req.http.s2 = req.backend_hint; | |
# Shard mapping matches | |
if (req.http.s1 == req.http.s2) { | |
return (synth(200)); | |
} | |
return (synth(500)); | |
} | |
sub vcl_synth { | |
set resp.http.url = req.url; | |
set resp.http.s1 = req.http.s1; | |
set resp.http.s2 = req.http.s2; | |
return (deliver); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment