Commit ae09f859 authored by Geoff Simmons's avatar Geoff Simmons

Evaluate Ingress rules in vcl_backend_fetch.

This is possible now that we are using Varnish versions that support
return(error(404)) from the backend side. It eliminates unnecessary
computation when a request leads to a cache hit or synthetic response.

It also simplifies the generated VCL code, since the evaluation
happens in one place, rather than in each of hit, miss, pass and
pipe.
parent d601a8d3
......@@ -146,39 +146,17 @@ sub vcl_init {
vk8s_cafe_example_com_url.compile();
}
sub vk8s_set_backend {
set req.backend_hint = vk8s_notfound;
if (vk8s_hosts.match(req.http.Host)) {
if (0 != 0) {
#
}
elsif (vk8s_hosts.which(select=FIRST) == 1) {
if (vk8s_cafe_example_com_url.match(req.url)) {
set req.backend_hint = vk8s_cafe_example_com_url.backend(select=FIRST);
sub vcl_backend_fetch {
set bereq.backend = vk8s_notfound;
if (vk8s_hosts.match(bereq.http.Host)) {
if (vk8s_hosts.which(select=FIRST) == 1) {
if (vk8s_cafe_example_com_url.match(bereq.url)) {
set bereq.backend = vk8s_cafe_example_com_url.backend(select=FIRST);
}
}
}
if (req.backend_hint == vk8s_notfound) {
return (synth(404));
}
}
sub vcl_miss {
call vk8s_set_backend;
}
sub vcl_pass {
call vk8s_set_backend;
}
sub vcl_pipe {
call vk8s_set_backend;
}
sub vcl_hit {
if (obj.ttl < 0s) {
# Set a backend for a background fetch.
call vk8s_set_backend;
if (bereq.backend == vk8s_notfound) {
return (error(404));
}
}
......@@ -56,40 +56,18 @@ sub vcl_init {
vk8s_cafe_example_com_url.compile();
}
sub vk8s_set_backend {
set req.backend_hint = vk8s_notfound;
if (vk8s_hosts.match(req.http.Host)) {
if (0 != 0) {
#
}
elsif (vk8s_hosts.which(select=FIRST) == 1) {
if (vk8s_cafe_example_com_url.match(req.url)) {
set req.backend_hint = vk8s_cafe_example_com_url.backend(select=FIRST);
sub vcl_backend_fetch {
set bereq.backend = vk8s_notfound;
if (vk8s_hosts.match(bereq.http.Host)) {
if (vk8s_hosts.which(select=FIRST) == 1) {
if (vk8s_cafe_example_com_url.match(bereq.url)) {
set bereq.backend = vk8s_cafe_example_com_url.backend(select=FIRST);
}
}
}
if (req.backend_hint == vk8s_notfound) {
return (synth(404));
}
}
sub vcl_miss {
call vk8s_set_backend;
}
sub vcl_pass {
call vk8s_set_backend;
}
sub vcl_pipe {
call vk8s_set_backend;
}
sub vcl_hit {
if (obj.ttl < 0s) {
# Set a backend for a background fetch.
call vk8s_set_backend;
if (bereq.backend == vk8s_notfound) {
return (error(404));
}
}
sub vcl_deliver {
......
......@@ -86,49 +86,27 @@ sub vcl_init {
vk8s_vodka_example_com_url.compile();
}
sub vk8s_set_backend {
set req.backend_hint = vk8s_notfound;
if (vk8s_hosts.match(req.http.Host)) {
if (0 != 0) {
#
}
elsif (vk8s_hosts.which(select=FIRST) == 1) {
if (vk8s_cafe_example_com_url.match(req.url)) {
set req.backend_hint = vk8s_cafe_example_com_url.backend(select=FIRST);
sub vcl_backend_fetch {
set bereq.backend = vk8s_notfound;
if (vk8s_hosts.match(bereq.http.Host)) {
if (vk8s_hosts.which(select=FIRST) == 1) {
if (vk8s_cafe_example_com_url.match(bereq.url)) {
set bereq.backend = vk8s_cafe_example_com_url.backend(select=FIRST);
}
}
elsif (vk8s_hosts.which(select=FIRST) == 2) {
if (vk8s_whiskey_example_com_url.match(req.url)) {
set req.backend_hint = vk8s_whiskey_example_com_url.backend(select=FIRST);
if (vk8s_whiskey_example_com_url.match(bereq.url)) {
set bereq.backend = vk8s_whiskey_example_com_url.backend(select=FIRST);
}
}
elsif (vk8s_hosts.which(select=FIRST) == 3) {
if (vk8s_vodka_example_com_url.match(req.url)) {
set req.backend_hint = vk8s_vodka_example_com_url.backend(select=FIRST);
if (vk8s_vodka_example_com_url.match(bereq.url)) {
set bereq.backend = vk8s_vodka_example_com_url.backend(select=FIRST);
}
}
}
if (req.backend_hint == vk8s_notfound) {
return (synth(404));
}
}
sub vcl_miss {
call vk8s_set_backend;
}
sub vcl_pass {
call vk8s_set_backend;
}
sub vcl_pipe {
call vk8s_set_backend;
}
sub vcl_hit {
if (obj.ttl < 0s) {
# Set a backend for a background fetch.
call vk8s_set_backend;
if (bereq.backend == vk8s_notfound) {
return (error(404));
}
}
......@@ -81,44 +81,22 @@ sub vcl_init {
vk8s_metaxa_example_edu_url.compile();
}
sub vk8s_set_backend {
set req.backend_hint = vk8s_notfound;
if (vk8s_hosts.match(req.http.Host)) {
if (0 != 0) {
#
}
elsif (vk8s_hosts.which(select=FIRST) == 1) {
if (vk8s_tequila_example_edu_url.match(req.url)) {
set req.backend_hint = vk8s_tequila_example_edu_url.backend(select=FIRST);
sub vcl_backend_fetch {
set bereq.backend = vk8s_notfound;
if (vk8s_hosts.match(bereq.http.Host)) {
if (vk8s_hosts.which(select=FIRST) == 1) {
if (vk8s_tequila_example_edu_url.match(bereq.url)) {
set bereq.backend = vk8s_tequila_example_edu_url.backend(select=FIRST);
}
}
elsif (vk8s_hosts.which(select=FIRST) == 2) {
if (vk8s_metaxa_example_edu_url.match(req.url)) {
set req.backend_hint = vk8s_metaxa_example_edu_url.backend(select=FIRST);
if (vk8s_metaxa_example_edu_url.match(bereq.url)) {
set bereq.backend = vk8s_metaxa_example_edu_url.backend(select=FIRST);
}
}
}
if (req.backend_hint == vk8s_notfound) {
return (synth(404));
}
}
sub vcl_miss {
call vk8s_set_backend;
}
sub vcl_pass {
call vk8s_set_backend;
}
sub vcl_pipe {
call vk8s_set_backend;
}
sub vcl_hit {
if (obj.ttl < 0s) {
# Set a backend for a background fetch.
call vk8s_set_backend;
if (bereq.backend == vk8s_notfound) {
return (error(404));
}
}
......@@ -65,29 +65,10 @@ sub vcl_init {
vk8s_tea-svc_director.reconfigure();
}
sub vk8s_set_backend {
set req.backend_hint = vk8s_notfound;
sub vcl_backend_fetch {
set bereq.backend = vk8s_notfound;
if (req.backend_hint == vk8s_notfound) {
set req.backend_hint = vk8s_tea-svc_director.backend();
}
}
sub vcl_miss {
call vk8s_set_backend;
}
sub vcl_pass {
call vk8s_set_backend;
}
sub vcl_pipe {
call vk8s_set_backend;
}
sub vcl_hit {
if (obj.ttl < 0s) {
# Set a backend for a background fetch.
call vk8s_set_backend;
if (bereq.backend == vk8s_notfound) {
set bereq.backend = vk8s_tea-svc_director.backend();
}
}
......@@ -213,49 +213,27 @@ sub vcl_init {
vk8s_metaxa_example_edu_url.compile();
}
sub vk8s_set_backend {
set req.backend_hint = vk8s_notfound;
if (vk8s_hosts.match(req.http.Host)) {
if (0 != 0) {
#
}
elsif (vk8s_hosts.which(select=FIRST) == 1) {
if (vk8s_cafe_example_com_url.match(req.url)) {
set req.backend_hint = vk8s_cafe_example_com_url.backend(select=FIRST);
sub vcl_backend_fetch {
set bereq.backend = vk8s_notfound;
if (vk8s_hosts.match(bereq.http.Host)) {
if (vk8s_hosts.which(select=FIRST) == 1) {
if (vk8s_cafe_example_com_url.match(bereq.url)) {
set bereq.backend = vk8s_cafe_example_com_url.backend(select=FIRST);
}
}
elsif (vk8s_hosts.which(select=FIRST) == 2) {
if (vk8s_tequila_example_edu_url.match(req.url)) {
set req.backend_hint = vk8s_tequila_example_edu_url.backend(select=FIRST);
if (vk8s_tequila_example_edu_url.match(bereq.url)) {
set bereq.backend = vk8s_tequila_example_edu_url.backend(select=FIRST);
}
}
elsif (vk8s_hosts.which(select=FIRST) == 3) {
if (vk8s_metaxa_example_edu_url.match(req.url)) {
set req.backend_hint = vk8s_metaxa_example_edu_url.backend(select=FIRST);
if (vk8s_metaxa_example_edu_url.match(bereq.url)) {
set bereq.backend = vk8s_metaxa_example_edu_url.backend(select=FIRST);
}
}
}
if (req.backend_hint == vk8s_notfound) {
set req.backend_hint = vk8s_tequila-svc_director.backend();
}
}
sub vcl_miss {
call vk8s_set_backend;
}
sub vcl_pass {
call vk8s_set_backend;
}
sub vcl_pipe {
call vk8s_set_backend;
}
sub vcl_hit {
if (obj.ttl < 0s) {
# Set a backend for a background fetch.
call vk8s_set_backend;
if (bereq.backend == vk8s_notfound) {
set bereq.backend = vk8s_tequila-svc_director.backend();
}
}
......@@ -62,44 +62,22 @@ sub vcl_init {
vk8s_any_host.compile();
}
sub vk8s_set_backend {
set req.backend_hint = vk8s_notfound;
if (vk8s_hosts.match(req.http.Host)) {
if (0 != 0) {
#
}
elsif (vk8s_hosts.which(select=FIRST) == 1) {
if (vk8s_tea_example_com_url.match(req.url)) {
set req.backend_hint = vk8s_tea_example_com_url.backend(select=FIRST);
sub vcl_backend_fetch {
set bereq.backend = vk8s_notfound;
if (vk8s_hosts.match(bereq.http.Host)) {
if (vk8s_hosts.which(select=FIRST) == 1) {
if (vk8s_tea_example_com_url.match(bereq.url)) {
set bereq.backend = vk8s_tea_example_com_url.backend(select=FIRST);
}
}
elsif (vk8s_hosts.which(select=FIRST) == 2) {
if (vk8s_any_host.match(req.url)) {
set req.backend_hint = vk8s_any_host.backend(select=FIRST);
if (vk8s_any_host.match(bereq.url)) {
set bereq.backend = vk8s_any_host.backend(select=FIRST);
}
}
}
if (req.backend_hint == vk8s_notfound) {
return (synth(404));
}
}
sub vcl_miss {
call vk8s_set_backend;
}
sub vcl_pass {
call vk8s_set_backend;
}
sub vcl_pipe {
call vk8s_set_backend;
}
sub vcl_hit {
if (obj.ttl < 0s) {
# Set a backend for a background fetch.
call vk8s_set_backend;
if (bereq.backend == vk8s_notfound) {
return (error(404));
}
}
......@@ -56,40 +56,18 @@ sub vcl_init {
vk8s_cafe_example_com_url.compile();
}
sub vk8s_set_backend {
set req.backend_hint = vk8s_notfound;
if (vk8s_hosts.match(req.http.Host)) {
if (0 != 0) {
#
}
elsif (vk8s_hosts.which(select=FIRST) == 1) {
if (vk8s_cafe_example_com_url.match(req.url)) {
set req.backend_hint = vk8s_cafe_example_com_url.backend(select=FIRST);
sub vcl_backend_fetch {
set bereq.backend = vk8s_notfound;
if (vk8s_hosts.match(bereq.http.Host)) {
if (vk8s_hosts.which(select=FIRST) == 1) {
if (vk8s_cafe_example_com_url.match(bereq.url)) {
set bereq.backend = vk8s_cafe_example_com_url.backend(select=FIRST);
}
}
}
if (req.backend_hint == vk8s_notfound) {
return (synth(404));
}
}
sub vcl_miss {
call vk8s_set_backend;
}
sub vcl_pass {
call vk8s_set_backend;
}
sub vcl_pipe {
call vk8s_set_backend;
}
sub vcl_hit {
if (obj.ttl < 0s) {
# Set a backend for a background fetch.
call vk8s_set_backend;
if (bereq.backend == vk8s_notfound) {
return (error(404));
}
}
......
......@@ -31,29 +31,10 @@ sub vcl_init {
);
}
sub vk8s_set_backend {
set req.backend_hint = vk8s_notfound;
sub vcl_backend_fetch {
set bereq.backend = vk8s_notfound;
if (req.backend_hint == vk8s_notfound) {
set req.backend_hint = vk8s_tea-svc_director.backend();
}
}
sub vcl_miss {
call vk8s_set_backend;
}
sub vcl_pass {
call vk8s_set_backend;
}
sub vcl_pipe {
call vk8s_set_backend;
}
sub vcl_hit {
if (obj.ttl < 0s) {
# Set a backend for a background fetch.
call vk8s_set_backend;
if (bereq.backend == vk8s_notfound) {
set bereq.backend = vk8s_tea-svc_director.backend();
}
}
......@@ -86,49 +86,27 @@ sub vcl_init {
vk8s_any_host.compile();
}
sub vk8s_set_backend {
set req.backend_hint = vk8s_notfound;
if (vk8s_hosts.match(req.http.Host)) {
if (0 != 0) {
#
}
elsif (vk8s_hosts.which(select=FIRST) == 1) {
if (vk8s_tea_example_com_url.match(req.url)) {
set req.backend_hint = vk8s_tea_example_com_url.backend(select=FIRST);
sub vcl_backend_fetch {
set bereq.backend = vk8s_notfound;
if (vk8s_hosts.match(bereq.http.Host)) {
if (vk8s_hosts.which(select=FIRST) == 1) {
if (vk8s_tea_example_com_url.match(bereq.url)) {
set bereq.backend = vk8s_tea_example_com_url.backend(select=FIRST);
}
}
elsif (vk8s_hosts.which(select=FIRST) == 2) {
if (vk8s_coffee_example_com_url.match(req.url)) {
set req.backend_hint = vk8s_coffee_example_com_url.backend(select=FIRST);
if (vk8s_coffee_example_com_url.match(bereq.url)) {
set bereq.backend = vk8s_coffee_example_com_url.backend(select=FIRST);
}
}
elsif (vk8s_hosts.which(select=FIRST) == 3) {
if (vk8s_any_host.match(req.url)) {
set req.backend_hint = vk8s_any_host.backend(select=FIRST);
if (vk8s_any_host.match(bereq.url)) {
set bereq.backend = vk8s_any_host.backend(select=FIRST);
}
}
}
if (req.backend_hint == vk8s_notfound) {
return (synth(404));
}
}
sub vcl_miss {
call vk8s_set_backend;
}
sub vcl_pass {
call vk8s_set_backend;
}
sub vcl_pipe {
call vk8s_set_backend;
}
sub vcl_hit {
if (obj.ttl < 0s) {
# Set a backend for a background fetch.
call vk8s_set_backend;
if (bereq.backend == vk8s_notfound) {
return (error(404));
}
}
......@@ -56,39 +56,17 @@ sub vcl_init {
vk8s_cafe_example_com_url.compile();
}
sub vk8s_set_backend {
set req.backend_hint = vk8s_notfound;
if (vk8s_hosts.match(req.http.Host)) {
if (0 != 0) {
#
}
elsif (vk8s_hosts.which(select=FIRST) == 1) {
if (vk8s_cafe_example_com_url.match(req.url)) {
set req.backend_hint = vk8s_cafe_example_com_url.backend(select=FIRST);
sub vcl_backend_fetch {
set bereq.backend = vk8s_notfound;
if (vk8s_hosts.match(bereq.http.Host)) {
if (vk8s_hosts.which(select=FIRST) == 1) {
if (vk8s_cafe_example_com_url.match(bereq.url)) {
set bereq.backend = vk8s_cafe_example_com_url.backend(select=FIRST);
}
}
}
if (req.backend_hint == vk8s_notfound) {
return (synth(404));
}
}
sub vcl_miss {
call vk8s_set_backend;
}
sub vcl_pass {
call vk8s_set_backend;
}
sub vcl_pipe {
call vk8s_set_backend;
}
sub vcl_hit {
if (obj.ttl < 0s) {
# Set a backend for a background fetch.
call vk8s_set_backend;
if (bereq.backend == vk8s_notfound) {
return (error(404));
}
}
......@@ -11,30 +11,11 @@ include "bogo_backend.vcl";
sub vcl_init {}
sub vk8s_set_backend {
set req.backend_hint = vk8s_notfound;
sub vcl_backend_fetch {
set bereq.backend = vk8s_notfound;
if (req.backend_hint == vk8s_notfound) {
return (synth(404));
}
}
sub vcl_miss {
call vk8s_set_backend;
}
sub vcl_pass {
call vk8s_set_backend;
}
sub vcl_pipe {
call vk8s_set_backend;
}
sub vcl_hit {
if (obj.ttl < 0s) {
# Set a backend for a background fetch.
call vk8s_set_backend;
if (bereq.backend == vk8s_notfound) {
return (error(404));
}
}
......
......@@ -210,50 +210,28 @@ sub vcl_init {
{{end -}}
}
sub vk8s_set_backend {
set req.backend_hint = vk8s_notfound;
sub vcl_backend_fetch {
set bereq.backend = vk8s_notfound;
{{- if .Rules}}
if (vk8s_hosts.match(req.http.Host)) {
if (0 != 0) {
#
}
if (vk8s_hosts.match(bereq.http.Host)) {
{{- range $i, $rule := .Rules}}
elsif (vk8s_hosts.which(select=FIRST) == {{plusOne $i}}) {
if ({{urlMatcher $rule}}.match(req.url)) {
set req.backend_hint = {{urlMatcher $rule}}.backend(select=FIRST);
{{ifelse $i}} (vk8s_hosts.which(select=FIRST) == {{plusOne $i}}) {
if ({{urlMatcher $rule}}.match(bereq.url)) {
set bereq.backend = {{urlMatcher $rule}}.backend(select=FIRST);
}
}
{{- end}}
}
{{- end}}
if (req.backend_hint == vk8s_notfound) {
if (bereq.backend == vk8s_notfound) {
{{- if .DefaultService.Name}}
set req.backend_hint = {{dirName .DefaultService}}.backend();
set bereq.backend = {{dirName .DefaultService}}.backend();
{{- else}}
return (synth(404));
return (error(404));
{{- end}}
}
}
sub vcl_miss {
call vk8s_set_backend;
}
sub vcl_pass {
call vk8s_set_backend;
}
sub vcl_pipe {
call vk8s_set_backend;
}
sub vcl_hit {
if (obj.ttl < 0s) {
# Set a backend for a background fetch.
call vk8s_set_backend;
}
}
`
const ingTmplName = "vcl"
......@@ -302,6 +280,12 @@ var vclFuncs = template.FuncMap{
"urlMatcher": func(rule Rule) string {
return urlMatcher(rule)
},
"ifelse": func(i int) string {
if i == 0 {
return "if"
}
return "elsif"
},
}
var ingressTmpl = template.Must(template.New(ingTmplName).
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment