]> err.no Git - varnish/commitdiff
Introduce obj.grace variable:
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Mon, 28 Jan 2008 09:28:47 +0000 (09:28 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Mon, 28 Jan 2008 09:28:47 +0000 (09:28 +0000)
The amount of time after obj.ttl this object can be served, provided
we are already trying to fetch a new copy.

Nothing inspects this variable yet.

git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@2391 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/cache.h
varnish-cache/bin/varnishd/cache_vrt.c
varnish-cache/include/vrt_obj.h
varnish-cache/lib/libvcl/vcc_fixed_token.c
varnish-cache/lib/libvcl/vcc_gen_obj.tcl
varnish-cache/lib/libvcl/vcc_obj.c

index 594b3e7bb33fb6e73f3df63e1560123c792b266a..9e0c854e27ca422c7c553fc754e49de95addc3bb 100644 (file)
@@ -256,6 +256,7 @@ struct object {
        double                  age;
        double                  entered;
        double                  ttl;
+       double                  grace;
        double                  prefetch;
 
        double                  last_modified;
index 9e042fcdfff4b68d2b45cabac0048c99d4b0139d..d2e873f7b8fb0965396212aacad1695e88fb19e5 100644 (file)
@@ -304,6 +304,29 @@ VRT_r_obj_ttl(const struct sess *sp)
        return (sp->obj->ttl - sp->t_req);
 }
 
+/*--------------------------------------------------------------------
+ * obj.grace is relative to obj.ttl, so no special magic is necessary.
+ */
+
+void
+VRT_l_obj_grace(const struct sess *sp, double a)
+{
+
+       CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
+       CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC);       /* XXX */
+       if (a < 0)
+               a = 0;
+       sp->obj->grace = a;
+}
+
+double
+VRT_r_obj_grace(const struct sess *sp)
+{
+       CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
+       CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC);       /* XXX */
+       return (sp->obj->grace);
+}
+
 /*--------------------------------------------------------------------*/
 
 /* XXX: the VCL_info messages has unexpected fractions on the ttl */
index ca2d87370bd19e20b9e2eb324105495adac202e6..8594d7754d99565628b75453daf03371cab75784 100644 (file)
@@ -40,6 +40,8 @@ unsigned VRT_r_obj_cacheable(const struct sess *);
 void VRT_l_obj_cacheable(const struct sess *, unsigned);
 double VRT_r_obj_ttl(const struct sess *);
 void VRT_l_obj_ttl(const struct sess *, double);
+double VRT_r_obj_grace(const struct sess *);
+void VRT_l_obj_grace(const struct sess *, double);
 double VRT_r_obj_prefetch(const struct sess *);
 void VRT_l_obj_prefetch(const struct sess *, double);
 double VRT_r_obj_lastuse(const struct sess *);
index 70244946e5a6e3ba2dd920b6deaf16790955a724..62ae6638c394fdf995951cf359647dd4c5ab67c7 100644 (file)
@@ -539,6 +539,8 @@ vcl_output_lang_h(struct vsb *sb)
        vsb_cat(sb, "void VRT_l_obj_cacheable(const struct sess *, unsigned);\n");
        vsb_cat(sb, "double VRT_r_obj_ttl(const struct sess *);\n");
        vsb_cat(sb, "void VRT_l_obj_ttl(const struct sess *, double);\n");
+       vsb_cat(sb, "double VRT_r_obj_grace(const struct sess *);\n");
+       vsb_cat(sb, "void VRT_l_obj_grace(const struct sess *, double);\n");
        vsb_cat(sb, "double VRT_r_obj_prefetch(const struct sess *);\n");
        vsb_cat(sb, "void VRT_l_obj_prefetch(const struct sess *, double);\n");
        vsb_cat(sb, "double VRT_r_obj_lastuse(const struct sess *);\n");
index 1e88b93f8d7389720c838f7c2f65316dd0c17edd..ebc8b1d2745eea622d1dc037386e395549db83f1 100755 (executable)
@@ -157,6 +157,11 @@ set spobj {
                {                         hit fetch         discard timeout}
                "const struct sess *"
        }
+       { obj.grace
+               RW TIME
+               {                         hit fetch         discard timeout}
+               "const struct sess *"
+       }
        { obj.prefetch
                RW RTIME
                { fetch prefetch }
index a89e6853f072753a4bcc346ebd6b7967d6107ca2..4f0067976c9056ac241564444d815a2cb149d897 100644 (file)
@@ -182,6 +182,13 @@ struct var vcc_vars[] = {
            0,
            VCL_MET_HIT | VCL_MET_FETCH | VCL_MET_DISCARD | VCL_MET_TIMEOUT
        },
+       { "obj.grace", TIME, 9,
+           "VRT_r_obj_grace(sp)",
+           "VRT_l_obj_grace(sp, ",
+           V_RW,
+           0,
+           VCL_MET_HIT | VCL_MET_FETCH | VCL_MET_DISCARD | VCL_MET_TIMEOUT
+       },
        { "obj.prefetch", RTIME, 12,
            "VRT_r_obj_prefetch(sp)",
            "VRT_l_obj_prefetch(sp, ",