VCL changes from 2.0 to 2.1

Alex F alex at acasa.ro
Mon Jun 7 10:43:46 CEST 2010


Hello,
I just upgraded from varnish 2.0.5 to 2.1.2 and realized that the old 
VCL is not working anymore.
My VCL looks like this:

     backend default {
         .host = "0.0.0.0";
         .port = "80";
}
     acl purge {
         "localhost";
         "192.168.100.0"/24;
}
     sub vcl_recv {
         if (req.request == "PURGE") {
                 if(!client.ip ~ purge) {
                         error 405 "Not Allowed";
                 }
                 purge("req.url == " req.url);
}
     if (req.request != "GET" && req.request != "HEAD" && req.request != 
"PUT" && req.request != "POST" && req.request != "TRACE" && req.request 
!= "OPTIONS" && req.request != "DELETE") {
                 return(pipe);
}
     if (req.http.Expect) {
                 return(pipe);
}
     if (req.request != "GET" && req.request != "HEAD") {
                 return(pipe);
}
     if (req.http.Authorization) {
                 return(pass);
}
     if (req.http.Accept-Encoding) {
                 if (req.http.Accept-Encoding ~ "gzip") {
                 set req.http.Accept-Encoding = "gzip";
                 } elsif (req.http.Accept-Encoding ~ "deflate") {
                 set req.http.Accept-Encoding = "deflate";
                 } else {
                 remove req.http.Accept-Encoding;
}
}
     set req.grace = 30s;
     if (req.url ~ "^/(uploads|images|img|css|js)/" || req.url ~ 
"\.(txt|ico|png|jpeg|jpg|gif|tiff|js|css)$") {
         return(lookup);
}
         if (req.http.Cookie) {
         return(pass);
}
         return(lookup);
}
     sub vcl_hit {
         if (!obj.cacheable) {
                 return(pass);
}
         return(deliver);
}
     sub vcl_miss {
                 return (fetch);
}
     sub vcl_fetch {
     if (!obj.cacheable) {
                 return(pass);
}
     if (obj.http.Set-Cookie) {
                 return(pass);
}
     if (obj.http.Pragma ~ "no-cache" || obj.http.Cache-Control ~ 
"no-cache" || obj.http.Cache-Control ~ "private") {
                 return(pass);
}
     if (obj.status !=200) {
         return (pass);
}
     set obj.grace=10080m;
     if (obj.ttl < 180s) {
     set obj.ttl = 1d;
}
}
     sub vcl_deliver {
     if (obj.hits > 0) {
                 set resp.http.X-Cache = "HIT";
                 set resp.http.X-Cache-Hits = obj.hits;
         } else {
                 set resp.http.X-Cache = "MISS";
         }
}

And upon compiling this VCL I receive:
     Message from VCC-compiler:
     Variable 'obj.cacheable' not accessible in method 'vcl_fetch'.
     At: (input Line 92 Pos 14)
         if (!obj.cacheable) {
     -------------#############---
     Running VCC-compiler failed, exit 1
     VCL compilation failed
Can you please point me in the right direction? Also, any advices for 
the current VCL are welcome.
Thank you.





More information about the varnish-misc mailing list