[master] 9d67fce Move (beresp.)exp from worker to busyobj

Poul-Henning Kamp phk at varnish-cache.org
Tue Nov 29 19:10:39 CET 2011


commit 9d67fcef723e583e56dbb43bf202259fe45f4b07
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Tue Nov 29 18:10:22 2011 +0000

    Move (beresp.)exp from worker to busyobj

diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 7a0167c..5196575 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -325,8 +325,6 @@ struct worker {
 	struct objcore		*objcore;
 	struct busyobj		*busyobj;
 
-	struct exp		exp;
-
 	/* This is only here so VRT can find it */
 	const char		*storage_hint;
 
@@ -503,6 +501,8 @@ struct busyobj {
 	struct vep_state	*vep;
 	unsigned		fetch_failed;
 	struct vgz		*vgz_rx;
+
+	struct exp		exp;
 };
 
 /* Object structure --------------------------------------------------*/
diff --git a/bin/varnishd/cache/cache_center.c b/bin/varnishd/cache/cache_center.c
index 27209de..86b54d0 100644
--- a/bin/varnishd/cache/cache_center.c
+++ b/bin/varnishd/cache/cache_center.c
@@ -464,7 +464,7 @@ cnt_error(struct sess *sp)
 
 	if (wrk->obj == NULL) {
 		HSH_Prealloc(sp);
-		EXP_Clr(&wrk->exp);
+		New_BusyObj(wrk);
 		wrk->obj = STV_NewObject(wrk, NULL, cache_param->http_resp_size,
 		     (uint16_t)cache_param->http_max_hdr);
 		if (wrk->obj == NULL)
@@ -613,13 +613,13 @@ cnt_fetch(struct sess *sp)
 		/*
 		 * What does RFC2616 think about TTL ?
 		 */
-		EXP_Clr(&wrk->exp);
-		wrk->exp.entered = W_TIM_real(wrk);
+		EXP_Clr(&wrk->busyobj->exp);
+		wrk->busyobj->exp.entered = W_TIM_real(wrk);
 		RFC2616_Ttl(sp);
 
 		/* pass from vclrecv{} has negative TTL */
 		if (wrk->objcore == NULL)
-			wrk->exp.ttl = -1.;
+			wrk->busyobj->exp.ttl = -1.;
 
 		AZ(wrk->do_esi);
 
@@ -715,7 +715,7 @@ cnt_fetchbody(struct sess *sp)
 		/* This is a pass from vcl_recv */
 		pass = 1;
 		/* VCL may have fiddled this, but that doesn't help */
-		wrk->exp.ttl = -1.;
+		wrk->busyobj->exp.ttl = -1.;
 	} else if (sp->handling == VCL_RET_HIT_FOR_PASS) {
 		/* pass from vcl_fetch{} -> hit-for-pass */
 		/* XXX: the bereq was not filtered pass... */
@@ -806,7 +806,8 @@ cnt_fetchbody(struct sess *sp)
 	 */
 	l += strlen("Content-Length: XxxXxxXxxXxxXxxXxx") + sizeof(void *);
 
-	if (wrk->exp.ttl < cache_param->shortlived || wrk->objcore == NULL)
+	if (wrk->busyobj->exp.ttl < cache_param->shortlived ||
+	    wrk->objcore == NULL)
 		wrk->storage_hint = TRANSIENT_STORAGE;
 
 	wrk->obj = STV_NewObject(wrk, wrk->storage_hint, l, nhttp);
@@ -816,10 +817,10 @@ cnt_fetchbody(struct sess *sp)
 		 * shortlived object on Transient storage.
 		 */
 		wrk->obj = STV_NewObject(wrk, TRANSIENT_STORAGE, l, nhttp);
-		if (wrk->exp.ttl > cache_param->shortlived)
-			wrk->exp.ttl = cache_param->shortlived;
-		wrk->exp.grace = 0.0;
-		wrk->exp.keep = 0.0;
+		if (wrk->busyobj->exp.ttl > cache_param->shortlived)
+			wrk->busyobj->exp.ttl = cache_param->shortlived;
+		wrk->busyobj->exp.grace = 0.0;
+		wrk->busyobj->exp.keep = 0.0;
 	}
 	if (wrk->obj == NULL) {
 		sp->err_code = 503;
@@ -859,7 +860,7 @@ cnt_fetchbody(struct sess *sp)
 	if (http_GetHdr(hp, H_Last_Modified, &b))
 		wrk->obj->last_modified = VTIM_parse(b);
 	else
-		wrk->obj->last_modified = floor(wrk->exp.entered);
+		wrk->obj->last_modified = floor(wrk->busyobj->exp.entered);
 
 	assert(WRW_IsReleased(wrk));
 
diff --git a/bin/varnishd/cache/cache_rfc2616.c b/bin/varnishd/cache/cache_rfc2616.c
index e22da50..ae9614d 100644
--- a/bin/varnishd/cache/cache_rfc2616.c
+++ b/bin/varnishd/cache/cache_rfc2616.c
@@ -69,12 +69,15 @@ RFC2616_Ttl(const struct sess *sp)
 	double h_date, h_expires;
 	char *p;
 	const struct http *hp;
+	struct exp *expp;
+
+	expp = &sp->wrk->busyobj->exp;
 
 	hp = sp->wrk->beresp;
 
-	assert(sp->wrk->exp.entered != 0.0 && !isnan(sp->wrk->exp.entered));
+	assert(expp->entered != 0.0 && !isnan(expp->entered));
 	/* If all else fails, cache using default ttl */
-	sp->wrk->exp.ttl = cache_param->default_ttl;
+	expp->ttl = cache_param->default_ttl;
 
 	max_age = age = 0;
 	h_expires = 0;
@@ -87,7 +90,7 @@ RFC2616_Ttl(const struct sess *sp)
 
 	if (http_GetHdr(hp, H_Age, &p)) {
 		age = strtoul(p, NULL, 0);
-		sp->wrk->exp.age = age;
+		expp->age = age;
 	}
 	if (http_GetHdr(hp, H_Expires, &p))
 		h_expires = VTIM_parse(p);
@@ -97,7 +100,7 @@ RFC2616_Ttl(const struct sess *sp)
 
 	switch (sp->err_code) {
 	default:
-		sp->wrk->exp.ttl = -1.;
+		expp->ttl = -1.;
 		break;
 	case 200: /* OK */
 	case 203: /* Non-Authoritative Information */
@@ -122,9 +125,9 @@ RFC2616_Ttl(const struct sess *sp)
 				max_age = strtoul(p, NULL, 0);
 
 			if (age > max_age)
-				sp->wrk->exp.ttl = 0;
+				expp->ttl = 0;
 			else
-				sp->wrk->exp.ttl = max_age - age;
+				expp->ttl = max_age - age;
 			break;
 		}
 
@@ -135,22 +138,22 @@ RFC2616_Ttl(const struct sess *sp)
 
 		/* If backend told us it is expired already, don't cache. */
 		if (h_expires < h_date) {
-			sp->wrk->exp.ttl = 0;
+			expp->ttl = 0;
 			break;
 		}
 
 		if (h_date == 0 ||
-		    fabs(h_date - sp->wrk->exp.entered) < cache_param->clock_skew) {
+		    fabs(h_date - expp->entered) < cache_param->clock_skew) {
 			/*
 			 * If we have no Date: header or if it is
 			 * sufficiently close to our clock we will
 			 * trust Expires: relative to our own clock.
 			 */
-			if (h_expires < sp->wrk->exp.entered)
-				sp->wrk->exp.ttl = 0;
+			if (h_expires < expp->entered)
+				expp->ttl = 0;
 			else
-				sp->wrk->exp.ttl = h_expires -
-				    sp->wrk->exp.entered;
+				expp->ttl = h_expires -
+				    expp->entered;
 			break;
 		} else {
 			/*
@@ -158,7 +161,7 @@ RFC2616_Ttl(const struct sess *sp)
 			 * derive a relative time from the two headers.
 			 * (the negative ttl case is caught above)
 			 */
-			sp->wrk->exp.ttl = (int)(h_expires - h_date);
+			expp->ttl = (int)(h_expires - h_date);
 		}
 
 	}
@@ -166,8 +169,8 @@ RFC2616_Ttl(const struct sess *sp)
 	/* calculated TTL, Our time, Date, Expires, max-age, age */
 	WSP(sp, SLT_TTL,
 	    "%u RFC %.0f %.0f %.0f %.0f %.0f %.0f %.0f %u",
-	    sp->xid, sp->wrk->exp.ttl, -1., -1., sp->wrk->exp.entered,
-	    sp->wrk->exp.age, h_date, h_expires, max_age);
+	    sp->xid, expp->ttl, -1., -1., expp->entered,
+	    expp->age, h_date, h_expires, max_age);
 }
 
 /*--------------------------------------------------------------------
diff --git a/bin/varnishd/cache/cache_vrt_var.c b/bin/varnishd/cache/cache_vrt_var.c
index 5951b9c..b889d69 100644
--- a/bin/varnishd/cache/cache_vrt_var.c
+++ b/bin/varnishd/cache/cache_vrt_var.c
@@ -411,12 +411,12 @@ VRT_DO_EXP(obj, sp->wrk->obj->exp, keep, 0,
    EXP_Rearm(sp->wrk->obj);
    vrt_wsp_exp(sp, sp->wrk->obj->xid, &sp->wrk->obj->exp);)
 
-VRT_DO_EXP(beresp, sp->wrk->exp, grace, 0,
-   vrt_wsp_exp(sp, sp->xid, &sp->wrk->exp);)
-VRT_DO_EXP(beresp, sp->wrk->exp, ttl, 0,
-   vrt_wsp_exp(sp, sp->xid, &sp->wrk->exp);)
-VRT_DO_EXP(beresp, sp->wrk->exp, keep, 0,
-   vrt_wsp_exp(sp, sp->xid, &sp->wrk->exp);)
+VRT_DO_EXP(beresp, sp->wrk->busyobj->exp, grace, 0,
+   vrt_wsp_exp(sp, sp->xid, &sp->wrk->busyobj->exp);)
+VRT_DO_EXP(beresp, sp->wrk->busyobj->exp, ttl, 0,
+   vrt_wsp_exp(sp, sp->xid, &sp->wrk->busyobj->exp);)
+VRT_DO_EXP(beresp, sp->wrk->busyobj->exp, keep, 0,
+   vrt_wsp_exp(sp, sp->xid, &sp->wrk->busyobj->exp);)
 
 /*--------------------------------------------------------------------
  * req.xid
diff --git a/bin/varnishd/storage/stevedore.c b/bin/varnishd/storage/stevedore.c
index 1a4b8ac..7c364c0 100644
--- a/bin/varnishd/storage/stevedore.c
+++ b/bin/varnishd/storage/stevedore.c
@@ -242,7 +242,7 @@ STV_MkObject(struct worker *wrk, void *ptr, unsigned ltot,
 
 	http_Setup(o->http, o->ws_o);
 	o->http->magic = HTTP_MAGIC;
-	o->exp = wrk->exp;
+	o->exp = wrk->busyobj->exp;
 	VTAILQ_INIT(&o->store);
 	wrk->stats.n_object++;
 
diff --git a/bin/varnishd/storage/storage_persistent.c b/bin/varnishd/storage/storage_persistent.c
index 15087b3..0791941 100644
--- a/bin/varnishd/storage/storage_persistent.c
+++ b/bin/varnishd/storage/storage_persistent.c
@@ -478,7 +478,7 @@ smp_allocobj(struct stevedore *stv, struct worker *wrk, unsigned ltot,
 		return (NULL);		/* from cnt_error */
 	CAST_OBJ_NOTNULL(sc, stv->priv, SMP_SC_MAGIC);
 	AN(wrk->objcore);
-	AN(wrk->exp.ttl > 0.);
+	AN(wrk->busyobj->exp.ttl > 0.);
 
 	ltot = IRNUP(sc, ltot);
 



More information about the varnish-commit mailing list