]> err.no Git - varnish/commitdiff
Move the ttl from object up to the objcore
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Tue, 17 Feb 2009 10:06:19 +0000 (10:06 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Tue, 17 Feb 2009 10:06:19 +0000 (10:06 +0000)
git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@3779 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/cache.h
varnish-cache/bin/varnishd/cache_ban.c
varnish-cache/bin/varnishd/cache_center.c
varnish-cache/bin/varnishd/cache_expire.c
varnish-cache/bin/varnishd/cache_hash.c
varnish-cache/bin/varnishd/cache_vrt.c
varnish-cache/bin/varnishd/rfc2616.c

index 8c185119f78f793efee2c39057fd7331ffddb8ff..637aac6076af37e2e94129d358a15fbecc0ee80f 100644 (file)
@@ -262,6 +262,7 @@ struct objcore {
 #define OBJCORE_MAGIC          0x4d301302
        struct object           *obj;
        double                  timer_when;
+       double                  ttl;
        unsigned char           timer_what;
 #define OC_T_TTL               1
 #define OC_T_PREFETCH          2
@@ -298,7 +299,6 @@ struct object {
 
        double                  age;
        double                  entered;
-       double                  ttl;
        double                  grace;
        double                  prefetch;
 
index a67401e34247ccdaf9397e4a7ace1f11967d8231..7f922a7bc36354615227cbcdd92ea4482647ef9d 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2006 Verdens Gang AS
- * Copyright (c) 2006-2008 Linpro AS
+ * Copyright (c) 2006-2009 Linpro AS
  * All rights reserved.
  *
  * Author: Poul-Henning Kamp <phk@phk.freebsd.dk>
@@ -528,7 +528,7 @@ BAN_CheckObject(struct object *o, const struct sess *sp)
                o->ban = b0;
                return (0);
        } else {
-               o->ttl = 0;
+               o->objcore->ttl = 0;
                WSP(sp, SLT_ExpBan, "%u was banned", o->xid);
                EXP_Rearm(o);
                o->ban = NULL;
index 6bd98ca0bc7b971f9d7219eb3542386f15131edc..9df0783efce147976ef7c8fa0e32aeff5a2ba50b 100644 (file)
@@ -378,6 +378,7 @@ static int
 cnt_fetch(struct sess *sp)
 {
        int i;
+       struct objcore *oc;
 
        CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
        CHECK_OBJ_NOTNULL(sp->vcl, VCL_CONF_MAGIC);
@@ -414,10 +415,12 @@ cnt_fetch(struct sess *sp)
                sp->step = STP_RECV;
                return (0);
        case VCL_RET_PASS:
-               if (sp->obj->objcore != NULL)
-                       sp->obj->objcore->flags |= OC_F_PASS;
-               if (sp->obj->ttl - sp->t_req < params->default_ttl)
-                       sp->obj->ttl = sp->t_req + params->default_ttl;
+               if (sp->obj->objcore != NULL) {
+                       oc = sp->obj->objcore;
+                       oc->flags |= OC_F_PASS;
+                       if (oc->ttl - sp->t_req < params->default_ttl)
+                               oc->ttl = sp->t_req + params->default_ttl;
+               }
                break;
        case VCL_RET_DELIVER:
                break;
index 27eca861819e52f13e23cedf15df1a32d1f14b47..e6f20e973f658f670c98cfcbd6d493291f2ab864 100644 (file)
@@ -97,14 +97,14 @@ update_object_when(const struct object *o)
        Lck_AssertHeld(&exp_mtx);
 
        if (o->prefetch < 0.0) {
-               when = o->ttl + o->prefetch;
+               when = oc->ttl + o->prefetch;
                what = OC_T_PREFETCH;
        } else if (o->prefetch > 0.0) {
-               assert(o->prefetch <= o->ttl);
+               assert(o->prefetch <= oc->ttl);
                when = o->prefetch;
                what = OC_T_PREFETCH;
        } else {
-               when = o->ttl + HSH_Grace(o->grace);
+               when = oc->ttl + HSH_Grace(o->grace);
                what = OC_T_TTL;
        }
        assert(!isnan(when));
@@ -304,7 +304,7 @@ exp_timer(void *arg)
 
                        assert(sp->handling == VCL_RET_DISCARD);
                        WSL(&ww, SLT_ExpKill, 0,
-                           "%u %d", o->xid, (int)(o->ttl - t));
+                           "%u %d", o->xid, (int)(o->objcore->ttl - t));
                        Lck_Lock(&exp_mtx);
                        assert(oc->timer_idx == BINHEAP_NOIDX);
                        VTAILQ_REMOVE(&lru, o->objcore, lru_list);
index f5efca2658c079bc29418b08d9f4a81a37a6c632..92f5de59caf4aca03ae4b44a6dd28076ba92f62d 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2006 Verdens Gang AS
- * Copyright (c) 2006-2008 Linpro AS
+ * Copyright (c) 2006-2009 Linpro AS
  * All rights reserved.
  *
  * Author: Poul-Henning Kamp <phk@phk.freebsd.dk>
@@ -275,7 +275,7 @@ HSH_Lookup(struct sess *sp)
                }
                if (!o->cacheable)
                        continue;
-               if (o->ttl == 0)
+               if (oc->ttl == 0)
                        continue;
                if (BAN_CheckObject(o, sp)) 
                        continue;
@@ -283,11 +283,11 @@ HSH_Lookup(struct sess *sp)
                        continue;
 
                /* If still valid, use it */
-               if (o->ttl >= sp->t_req)
+               if (oc->ttl >= sp->t_req)
                        break;
 
                /* Remember any matching objects inside their grace period */
-               if (o->ttl + HSH_Grace(o->grace) >= sp->t_req)
+               if (oc->ttl + HSH_Grace(o->grace) >= sp->t_req)
                        grace_o = o;
        }
        if (oc == NULL)
@@ -301,7 +301,7 @@ HSH_Lookup(struct sess *sp)
         */
        if (o == NULL && grace_o != NULL &&
            grace_o->child != NULL &&
-           grace_o->ttl + HSH_Grace(sp->grace) >= sp->t_req)
+           grace_o->objcore->ttl + HSH_Grace(sp->grace) >= sp->t_req)
                o = grace_o;
 
        if (o != NULL) {
@@ -377,10 +377,11 @@ HSH_Drop(struct sess *sp)
        CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
        o = sp->obj;
        CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
-       if (o->objcore != NULL)         /* Pass has no objcore */
-               AN(ObjIsBusy(o));
        assert(o->refcnt > 0);
-       o->ttl = 0;
+       if (o->objcore != NULL) {       /* Pass has no objcore */
+               AN(ObjIsBusy(o));
+               o->objcore->ttl = 0;
+       }
        o->cacheable = 0;
        if (o->objcore != NULL)         /* Pass has no objcore */
                HSH_Unbusy(sp);
index f9db47ae8cf9968a93e40d7a6f4ea36e41ebec7b..86621b286d01cd2f9043bc479f4521908c37a83e 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2006 Verdens Gang AS
- * Copyright (c) 2006-2008 Linpro AS
+ * Copyright (c) 2006-2009 Linpro AS
  * All rights reserved.
  *
  * Author: Poul-Henning Kamp <phk@phk.freebsd.dk>
@@ -369,6 +369,8 @@ VRT_l_obj_ttl(const struct sess *sp, double a)
 
        CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
        CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC);       /* XXX */
+       if (sp->obj->objcore == NULL)
+               return;
        WSP(sp, SLT_TTL, "%u VCL %.0f %.0f",
            sp->obj->xid, a, sp->t_req);
        /*
@@ -378,9 +380,9 @@ VRT_l_obj_ttl(const struct sess *sp, double a)
         * We special case and make sure that rounding does not surprise.
         */
        if (a <= 0)
-               sp->obj->ttl = sp->t_req - 1;
+               sp->obj->objcore->ttl = sp->t_req - 1;
        else
-               sp->obj->ttl = sp->t_req + a;
+               sp->obj->objcore->ttl = sp->t_req + a;
        EXP_Rearm(sp->obj);
 }
 
@@ -389,7 +391,9 @@ VRT_r_obj_ttl(const struct sess *sp)
 {
        CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
        CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC);       /* XXX */
-       return (sp->obj->ttl - sp->t_req);
+       if (sp->obj->objcore == NULL)
+               return (0.0);
+       return (sp->obj->objcore->ttl - sp->t_req);
 }
 
 /*--------------------------------------------------------------------
@@ -428,21 +432,23 @@ VRT_l_obj_prefetch(const struct sess *sp, double a)
 
        CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
        CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC);       /* XXX */
+       if (sp->obj->objcore == NULL)
+               return;
        sp->obj->prefetch = 0.0;
        if (a == 0.0)
                sp->obj->prefetch = a;
-       else if (a > 0.0 && a + sp->t_req <= sp->obj->ttl)
+       else if (a > 0.0 && a + sp->t_req <= sp->obj->objcore->ttl)
                sp->obj->prefetch = a + sp->t_req;
-       else if (a < 0.0 && a + sp->obj->ttl > sp->t_req)
+       else if (a < 0.0 && a + sp->obj->objcore->ttl > sp->t_req)
                sp->obj->prefetch = a;
        else if (a > 0.0)
                WSL(sp->wrk, SLT_VCL_info, sp->id,
                    "XID %u: obj.prefetch (%g) after TTL (%g), ignored.",
-                   sp->obj->xid, a, sp->obj->ttl - sp->t_req);
+                   sp->obj->xid, a, sp->obj->objcore->ttl - sp->t_req);
        else /* if (a < 0.0) */
                WSL(sp->wrk, SLT_VCL_info, sp->id,
                    "XID %u: obj.prefetch (%g) less than ttl (%g), ignored.",
-                   sp->obj->xid, a, sp->obj->ttl - sp->t_req);
+                   sp->obj->xid, a, sp->obj->objcore->ttl - sp->t_req);
        EXP_Rearm(sp->obj);
 }
 
index 5a6c46fc9415c9b117afc688dcb469de2119529a..12156ca515923b63ea97df71a44dfac0d48ad2e5 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2006 Verdens Gang AS
- * Copyright (c) 2006-2008 Linpro AS
+ * Copyright (c) 2006-2009 Linpro AS
  * All rights reserved.
  *
  * Author: Poul-Henning Kamp <phk@phk.freebsd.dk>
@@ -173,6 +173,7 @@ int
 RFC2616_cache_policy(const struct sess *sp, const struct http *hp)
 {
        int body = 0;
+       double ttl;
 
        /*
         * Initial cacheability determination per [RFC2616, 13.4]
@@ -196,8 +197,10 @@ RFC2616_cache_policy(const struct sess *sp, const struct http *hp)
                break;
        }
 
-       sp->obj->ttl = RFC2616_Ttl(sp, hp, sp->obj);
-       if (sp->obj->ttl == 0)
+       ttl = RFC2616_Ttl(sp, hp, sp->obj);
+       if (sp->obj->objcore != NULL)
+               sp->obj->objcore->ttl = ttl;
+       if (ttl == 0)
                sp->obj->cacheable = 0;
 
        return (body);