2014-04-25 19 views
7

mam nową instalację Slackware 64 14bit, a pominie Varnish installation documentation mam zainstalowane wszystkie zależności i skompilowany lakier bez błędu (make check przechodzi wszystkie testy)Lakier nie rozpozna req.grace zmienną

jednak gdy próbuję uruchomić lakier stosując

varnishd -f /etc/varnish/user.vcl -s malloc,4G -T 127.0.0.1:2000 

uzyskać

Message from VCC-compiler: 
Unknown variable 'req.grace' 
At: ('input' Line 17 Pos 9) 
    set req.grace = 15s; 
--------#########------- 

Running VCC-compiler failed, exit 1 

VCL compilation failed 

My bardzo prosty /etc/varnish/ucer.vcl plik wygląda lik e:

vcl 4.0; 

# set default backend if no server cluster specified 
backend default { 
    .host = "127.0.0.1"; 
    .port = "8080"; 
    .probe = { 
     .url = "/"; 
     .timeout = 34ms; 
     .interval = 1s; 
     .window = 10; 
     .threshold = 8; 
    } 
} 

sub vcl_recv { 
    set req.grace = 15s; 
} 

sub vcl_fetch { 
    set beresp.grace = 30m; 
} 

Nazwy zmiennych są identyczne z this example.

varnishd -V powraca

varnishd (varnish-4.0.0 revision 2acedeb) 

Usuwając zarówno sub vcl_recv i sub vcl_fetch (używając tylko domyślne backend) lakier działa dobrze i widzę, że to nagłówki, ale trzeba edytować plik VCL.

Wszelkie pomysły?

Odpowiedz

9

Używasz Varnish 4.0.0, który wymaga aktualizacji z formatu 3.0, na którym opiera się twój kod VCL.

brakowało req.grace (zazwyczaj nie jest to potrzebne), a vcl_fetch nazywa się teraz vcl_backend_response.

Zobacz dokumentację upgrade: https://www.varnish-cache.org/docs/trunk/whats-new/upgrading.html

+0

Dzięki, nie mogę uwierzyć, że tęskniłem. Przeczytałem dokument o aktualizacji od 3 do 4 kilka razy, ale nie zauważyłem zmiany vlc_fetch (i nie cytuje łaski, mimo że podany przykład używa obu terminów i należy do dokumentacji 4.0). –

1

Dla porównania, jest to możliwe, aby poprawnie obsługiwać funkcję karencji, po co jest powiedziane w tym blog post:

(kopiuj/wklej kodu, więcej szczegółów odnoszą się do bloga)

sub vcl_hit { 
    if (obj.ttl >= 0s) { 
     # normal hit 
     return (deliver); 
    } 
    # We have no fresh fish. Lets look at the stale ones. 
    if (std.healthy(req.backend_hint)) { 
     # Backend is healthy. Limit age to 10s. 
     if (obj.ttl + 10s > 0s) { 
      set req.http.grace = "normal(limited)"; 
      return (deliver); 
     } else { 
      # No candidate for grace. Fetch a fresh object. 
      return(fetch); 
     } 
    } else { 
     # backend is sick - use full grace 
     if (obj.ttl + obj.grace > 0s) { 
      set req.http.grace = "full"; 
      return (deliver); 
     } else { 
      # no graced object. 
      return (fetch); 
     } 
    } 
} 

HTH

+1

Uwaga dla przyszłych czytelników: powinieneś ** zdecydowanie ** przeczytać cały wpis. – Redithion

Powiązane problemy