Ema has submitted this change and it was merged. Change subject: cache_upload VCL forward port to Varnish 4 ......................................................................
cache_upload VCL forward port to Varnish 4 Bug: T131502 Change-Id: I72627d1015099b8f59a05e23b14ee095be7e65e4 --- M modules/varnish/manifests/instance.pp M templates/varnish/upload-backend.inc.vcl.erb M templates/varnish/upload-common.inc.vcl.erb M templates/varnish/upload-frontend.inc.vcl.erb 4 files changed, 47 insertions(+), 25 deletions(-) Approvals: Ema: Verified; Looks good to me, approved BBlack: Looks good to me, but someone else must approve diff --git a/modules/varnish/manifests/instance.pp b/modules/varnish/manifests/instance.pp index a0612f1..279354f 100644 --- a/modules/varnish/manifests/instance.pp +++ b/modules/varnish/manifests/instance.pp @@ -49,6 +49,9 @@ # https://www.varnish-cache.org/docs/4.0/whats-new/upgrading.html#obj-in-vcl-error-replaced-by-beresp-in-vcl-backend-error $beresp_obj = 'beresp' + # storage has been renamed to storage_hint + $storage_hint_storage = 'storage_hint' + # https://www.varnish-cache.org/docs/4.0/whats-new/upgrading.html#obj-is-now-read-only $resp_obj = 'resp' @@ -73,6 +76,7 @@ $bereq_req = 'req' $beresp_obj = 'obj' + $storage_hint_storage = 'storage' $resp_obj = 'obj' $hash_lookup = 'lookup' $purge_lookup = 'lookup' diff --git a/templates/varnish/upload-backend.inc.vcl.erb b/templates/varnish/upload-backend.inc.vcl.erb index 092244d..b9452d4 100644 --- a/templates/varnish/upload-backend.inc.vcl.erb +++ b/templates/varnish/upload-backend.inc.vcl.erb @@ -3,17 +3,17 @@ sub pick_main_stevedore { if (std.random(0, 2) < 1) { - set beresp.storage = "main1"; + set beresp.<%= @storage_hint_storage %> = "main1"; } else { - set beresp.storage = "main2"; + set beresp.<%= @storage_hint_storage %> = "main2"; } } sub pick_large_object_stevedore { if (std.random(0, 2) < 1) { - set beresp.storage = "bigobj1"; + set beresp.<%= @storage_hint_storage %> = "bigobj1"; } else { - set beresp.storage = "bigobj2"; + set beresp.<%= @storage_hint_storage %> = "bigobj2"; } } @@ -21,9 +21,17 @@ sub cluster_be_recv_applayer_backend { if (req.url ~ "^/+[^/]+/[^/]+/thumb/") { + <%- if @varnish_version4 -%> + set req.backend_hint = swift_thumbs.backend(); + <%- else -%> set req.backend = swift_thumbs; + <%- end -%> } else { + <%- if @varnish_version4 -%> + set req.backend_hint = swift.backend(); + <%- else -%> set req.backend = swift; + <%- end -%> } } @@ -55,7 +63,7 @@ } if (req.http.If-Cached) { - error 412 "Entity not in cache"; + <%= error_synth(412, "Entity not in cache") -%> } } @@ -81,8 +89,8 @@ } // Derive the corresponding original URL and store it with the object - if (!beresp.http.X-MediaWiki-Original && req.url ~ "^/+[^/]+/[^/]+/thumb/[^/]+/[^/]+/[^/]+/[0-9]+px-") { - set beresp.http.X-MediaWiki-Original = regsub(req.url, "^(/+[^/]+/[^/]+/)thumb/([^/]+/[^/]+/[^/]+).*$", "\1\2"); + if (!beresp.http.X-MediaWiki-Original && <%= @bereq_req %>.url ~ "^/+[^/]+/[^/]+/thumb/[^/]+/[^/]+/[^/]+/[0-9]+px-") { + set beresp.http.X-MediaWiki-Original = regsub(<%= @bereq_req %>.url, "^(/+[^/]+/[^/]+/)thumb/([^/]+/[^/]+/[^/]+).*$", "\1\2"); } return (deliver); diff --git a/templates/varnish/upload-common.inc.vcl.erb b/templates/varnish/upload-common.inc.vcl.erb index d0b150e..11b2ad2 100644 --- a/templates/varnish/upload-common.inc.vcl.erb +++ b/templates/varnish/upload-common.inc.vcl.erb @@ -2,13 +2,13 @@ sub upload_common_recv { if (req.http.host != "<%= @vcl_config.fetch('upload_domain') %>") { - error 404 "Requested domainname does not exist on this server"; + <%= error_synth(404, "Requested domainname does not exist on this server") -%> } } sub upload_common_hit { if (req.http.If-Cached && req.http.If-Cached != obj.http.Etag) { - error 412 "Etag mismatch"; + <%= error_synth(412, "Etag mismatch") -%> } } diff --git a/templates/varnish/upload-frontend.inc.vcl.erb b/templates/varnish/upload-frontend.inc.vcl.erb index 66c252e..7ffb267 100644 --- a/templates/varnish/upload-frontend.inc.vcl.erb +++ b/templates/varnish/upload-frontend.inc.vcl.erb @@ -5,13 +5,13 @@ sub cluster_fe_recv { // CORS preflight requests - if (req.request == "OPTIONS" && req.http.Origin) { - error 667 "OK"; + if (<%= @req_method %> == "OPTIONS" && req.http.Origin) { + <%= error_synth(667, "OK") -%> } // Homepage redirect to commons if (req.url == "/") { - error 666 "Moved Permanently"; + <%= error_synth(666, "Moved Permanently") -%> } call upload_common_recv; @@ -59,7 +59,12 @@ set beresp.do_stream = true; // don't attempt to cache these in the frontend set beresp.http.X-CDIS = "pass"; + <%- if @varnish_version4 -%> + set beresp.uncacheable = true; + return (deliver); + <%- else -%> return (hit_for_pass); + <%- end -%> } } @@ -70,7 +75,12 @@ if (std.integer(beresp.http.Content-Length, 50331648) >= 50331648 || beresp.http.Content-Length ~ "^[0-9]{9}") { // don't attempt to cache these in the frontend set beresp.http.X-CDIS = "pass"; + <%- if @varnish_version4 -%> + set beresp.uncacheable = true; + return (deliver); + <%- else -%> return (hit_for_pass); + <%- end -%> } } @@ -114,26 +124,26 @@ sub cluster_fe_err_synth { // Handle CORS preflight requests - if (obj.status == 667) { - set obj.status = 200; - set obj.http.Connection = "keep-alive"; - set obj.http.Content-Length = "0"; + if (<%= @resp_obj %>.status == 667) { + set <%= @resp_obj %>.status = 200; + set <%= @resp_obj %>.http.Connection = "keep-alive"; + set <%= @resp_obj %>.http.Content-Length = "0"; // allow Range requests, used by ogv.js - set obj.http.Access-Control-Allow-Origin = "*"; - set obj.http.Access-Control-Allow-Headers = "Range"; - set obj.http.Access-Control-Allow-Methods = "GET, HEAD, OPTIONS"; - set obj.http.Access-Control-Max-Age = "86400"; + set <%= @resp_obj %>.http.Access-Control-Allow-Origin = "*"; + set <%= @resp_obj %>.http.Access-Control-Allow-Headers = "Range"; + set <%= @resp_obj %>.http.Access-Control-Allow-Methods = "GET, HEAD, OPTIONS"; + set <%= @resp_obj %>.http.Access-Control-Max-Age = "86400"; return (deliver); } // Homepage redirect to commons - if (obj.status == 666) { - set obj.status = 301; - set obj.http.Location = "https://commons.wikimedia.org/"; - set obj.http.Connection = "keep-alive"; - set obj.http.Content-Length = "0"; + if (<%= @resp_obj %>.status == 666) { + set <%= @resp_obj %>.status = 301; + set <%= @resp_obj %>.http.Location = "https://commons.wikimedia.org/"; + set <%= @resp_obj %>.http.Connection = "keep-alive"; + set <%= @resp_obj %>.http.Content-Length = "0"; return (deliver); } } -- To view, visit https://gerrit.wikimedia.org/r/298744 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I72627d1015099b8f59a05e23b14ee095be7e65e4 Gerrit-PatchSet: 5 Gerrit-Project: operations/puppet Gerrit-Branch: production Gerrit-Owner: Ema <e...@wikimedia.org> Gerrit-Reviewer: BBlack <bbl...@wikimedia.org> Gerrit-Reviewer: Ema <e...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits