[master] 9cb9ba6 Move vbc from worker to busyobj

Poul-Henning Kamp phk at varnish-cache.org
Mon Dec 5 14:43:53 CET 2011


commit 9cb9ba6f6dbf4a3f9136f8b145c80be0d26418a9
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Mon Dec 5 13:43:38 2011 +0000

    Move vbc from worker to busyobj

diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 4cc356e..46af4dd 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -330,7 +330,6 @@ struct worker {
 	/* Fetch stuff.  Here because pipe has no busyobj */
 	struct http		*bereq;
 	struct http		*beresp;
-	struct vbc		*vbc;
 
 	/* Stream state */
 	struct stream_ctx	*sctx;
@@ -494,6 +493,7 @@ struct busyobj {
 	unsigned		fetch_failed;
 	struct vgz		*vgz_rx;
 
+	struct vbc		*vbc;
 	struct object		*fetch_obj;
 	struct exp		exp;
 	struct http_conn	htc;
@@ -652,7 +652,7 @@ struct vbc *VDI_GetFd(const struct director *, struct sess *sp);
 int VDI_Healthy(const struct director *, const struct sess *sp);
 void VDI_CloseFd(struct worker *wrk, struct vbc **vbp);
 void VDI_RecycleFd(struct worker *wrk, struct vbc **vbp);
-void VDI_AddHostHeader(const struct sess *sp);
+void VDI_AddHostHeader(struct worker *wrk, const struct vbc *vbc);
 void VBE_Poll(void);
 
 /* cache_backend_cfg.c */
diff --git a/bin/varnishd/cache/cache_backend.c b/bin/varnishd/cache/cache_backend.c
index a435c1c..b661640 100644
--- a/bin/varnishd/cache/cache_backend.c
+++ b/bin/varnishd/cache/cache_backend.c
@@ -59,15 +59,15 @@ struct vdi_simple {
  * Create default Host: header for backend request
  */
 void
-VDI_AddHostHeader(const struct sess *sp)
+VDI_AddHostHeader(struct worker *wrk, const struct vbc *vbc)
 {
 
-	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
-	CHECK_OBJ_NOTNULL(sp->wrk->bereq, HTTP_MAGIC);
-	CHECK_OBJ_NOTNULL(sp->wrk->vbc, VBC_MAGIC);
-	CHECK_OBJ_NOTNULL(sp->wrk->vbc->vdis, VDI_SIMPLE_MAGIC);
-	http_PrintfHeader(sp->wrk, sp->wrk->vbc->vsl_id, sp->wrk->bereq,
-	    "Host: %s", sp->wrk->vbc->vdis->vrt->hosthdr);
+	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
+	CHECK_OBJ_NOTNULL(wrk->bereq, HTTP_MAGIC);
+	CHECK_OBJ_NOTNULL(vbc, VBC_MAGIC);
+	CHECK_OBJ_NOTNULL(vbc->vdis, VDI_SIMPLE_MAGIC);
+	http_PrintfHeader(wrk, vbc->vsl_id, wrk->bereq,
+	    "Host: %s", vbc->vdis->vrt->hosthdr);
 }
 
 /*--------------------------------------------------------------------*/
diff --git a/bin/varnishd/cache/cache_center.c b/bin/varnishd/cache/cache_center.c
index d2126ba..079df44 100644
--- a/bin/varnishd/cache/cache_center.c
+++ b/bin/varnishd/cache/cache_center.c
@@ -249,7 +249,7 @@ cnt_prepresp(struct sess *sp)
 		if (sp->restarts >= cache_param->max_restarts)
 			break;
 		if (wrk->busyobj->do_stream) {
-			VDI_CloseFd(wrk, &wrk->vbc);
+			VDI_CloseFd(wrk, &wrk->busyobj->vbc);
 			HSH_Drop(wrk);
 		} else {
 			(void)HSH_Deref(wrk, NULL, &wrk->obj);
@@ -338,7 +338,6 @@ cnt_done(struct sess *sp)
 	CHECK_OBJ_ORNULL(sp->vcl, VCL_CONF_MAGIC);
 
 	AZ(wrk->obj);
-	AZ(wrk->vbc);
 	sp->director = NULL;
 	sp->restarts = 0;
 
@@ -565,7 +564,7 @@ cnt_fetch(struct sess *sp)
 	CHECK_OBJ_NOTNULL(wrk->busyobj, BUSYOBJ_MAGIC);
 
 	AN(sp->director);
-	AZ(wrk->vbc);
+	AZ(wrk->busyobj->vbc);
 	AZ(wrk->busyobj->should_close);
 	AZ(wrk->storage_hint);
 
@@ -635,11 +634,11 @@ cnt_fetch(struct sess *sp)
 		}
 
 		/* We are not going to fetch the body, Close the connection */
-		VDI_CloseFd(wrk, &wrk->vbc);
+		VDI_CloseFd(wrk, &wrk->busyobj->vbc);
 	}
 
 	/* Clean up partial fetch */
-	AZ(wrk->vbc);
+	AZ(wrk->busyobj->vbc);
 
 	if (wrk->objcore != NULL) {
 		CHECK_OBJ_NOTNULL(wrk->objcore, OBJCORE_MAGIC);
@@ -819,7 +818,7 @@ cnt_fetchbody(struct sess *sp)
 	if (wrk->obj == NULL) {
 		sp->err_code = 503;
 		sp->step = STP_ERROR;
-		VDI_CloseFd(wrk, &wrk->vbc);
+		VDI_CloseFd(wrk, &wrk->busyobj->vbc);
 		return (0);
 	}
 	CHECK_OBJ_NOTNULL(wrk->obj, OBJECT_MAGIC);
@@ -883,7 +882,7 @@ cnt_fetchbody(struct sess *sp)
 	http_Setup(wrk->beresp, NULL);
 	wrk->busyobj->vfp = NULL;
 	assert(WRW_IsReleased(wrk));
-	AZ(wrk->vbc);
+	AZ(wrk->busyobj->vbc);
 	AN(sp->director);
 
 	if (i) {
@@ -950,7 +949,7 @@ cnt_streambody(struct sess *sp)
 	http_Setup(wrk->bereq, NULL);
 	http_Setup(wrk->beresp, NULL);
 	wrk->busyobj->vfp = NULL;
-	AZ(wrk->vbc);
+	AZ(wrk->busyobj->vbc);
 	AN(sp->director);
 
 	if (!i && wrk->obj->objcore != NULL) {
diff --git a/bin/varnishd/cache/cache_fetch.c b/bin/varnishd/cache/cache_fetch.c
index d321d7a..6483a99 100644
--- a/bin/varnishd/cache/cache_fetch.c
+++ b/bin/varnishd/cache/cache_fetch.c
@@ -400,12 +400,12 @@ FetchHdr(struct sess *sp, int need_host_hdr)
 
 	hp = w->bereq;
 
-	sp->wrk->vbc = VDI_GetFd(NULL, sp);
-	if (sp->wrk->vbc == NULL) {
+	sp->wrk->busyobj->vbc = VDI_GetFd(NULL, sp);
+	if (sp->wrk->busyobj->vbc == NULL) {
 		WSP(sp, SLT_FetchError, "no backend connection");
 		return (-1);
 	}
-	vc = sp->wrk->vbc;
+	vc = sp->wrk->busyobj->vbc;
 	if (vc->recycled)
 		retry = 1;
 
@@ -415,7 +415,7 @@ FetchHdr(struct sess *sp, int need_host_hdr)
 	 * because the backend may be chosen by a director.
 	 */
 	if (need_host_hdr)
-		VDI_AddHostHeader(sp);
+		VDI_AddHostHeader(sp->wrk, vc);
 
 	(void)VTCP_blocking(vc->fd);	/* XXX: we should timeout instead */
 	WRW_Reserve(w, &vc->fd);
@@ -426,7 +426,7 @@ FetchHdr(struct sess *sp, int need_host_hdr)
 	if (WRW_FlushRelease(w) || i > 0) {
 		WSP(sp, SLT_FetchError, "backend write error: %d (%s)",
 		    errno, strerror(errno));
-		VDI_CloseFd(sp->wrk, &sp->wrk->vbc);
+		VDI_CloseFd(sp->wrk, &sp->wrk->busyobj->vbc);
 		/* XXX: other cleanup ? */
 		return (retry);
 	}
@@ -450,7 +450,7 @@ FetchHdr(struct sess *sp, int need_host_hdr)
 	if (i < 0) {
 		WSP(sp, SLT_FetchError, "http first read error: %d %d (%s)",
 		    i, errno, strerror(errno));
-		VDI_CloseFd(sp->wrk, &sp->wrk->vbc);
+		VDI_CloseFd(sp->wrk, &sp->wrk->busyobj->vbc);
 		/* XXX: other cleanup ? */
 		/* Retryable if we never received anything */
 		return (i == -1 ? retry : -1);
@@ -464,7 +464,7 @@ FetchHdr(struct sess *sp, int need_host_hdr)
 			WSP(sp, SLT_FetchError,
 			    "http first read error: %d %d (%s)",
 			    i, errno, strerror(errno));
-			VDI_CloseFd(sp->wrk, &sp->wrk->vbc);
+			VDI_CloseFd(sp->wrk, &sp->wrk->busyobj->vbc);
 			/* XXX: other cleanup ? */
 			return (-1);
 		}
@@ -474,7 +474,7 @@ FetchHdr(struct sess *sp, int need_host_hdr)
 
 	if (http_DissectResponse(w, htc, hp)) {
 		WSP(sp, SLT_FetchError, "http format error");
-		VDI_CloseFd(sp->wrk, &sp->wrk->vbc);
+		VDI_CloseFd(sp->wrk, &sp->wrk->busyobj->vbc);
 		/* XXX: other cleanup ? */
 		return (-1);
 	}
@@ -495,7 +495,7 @@ FetchBody(struct worker *w, struct object *obj)
 	CHECK_OBJ_NOTNULL(w, WORKER_MAGIC);
 	CHECK_OBJ_NOTNULL(w->busyobj, BUSYOBJ_MAGIC);
 	AZ(w->busyobj->fetch_obj);
-	CHECK_OBJ_NOTNULL(w->vbc, VBC_MAGIC);
+	CHECK_OBJ_NOTNULL(w->busyobj->vbc, VBC_MAGIC);
 	CHECK_OBJ_NOTNULL(obj, OBJECT_MAGIC);
 	CHECK_OBJ_NOTNULL(obj->http, HTTP_MAGIC);
 
@@ -570,7 +570,7 @@ FetchBody(struct worker *w, struct object *obj)
 	    cls, mklen);
 
 	if (w->busyobj->body_status == BS_ERROR) {
-		VDI_CloseFd(w, &w->vbc);
+		VDI_CloseFd(w, &w->busyobj->vbc);
 		return (__LINE__);
 	}
 
@@ -582,7 +582,7 @@ FetchBody(struct worker *w, struct object *obj)
 			VTAILQ_REMOVE(&obj->store, st, list);
 			STV_free(st);
 		}
-		VDI_CloseFd(w, &w->vbc);
+		VDI_CloseFd(w, &w->busyobj->vbc);
 		obj->len = 0;
 		return (__LINE__);
 	}
@@ -610,14 +610,14 @@ FetchBody(struct worker *w, struct object *obj)
 
 	if (mklen > 0) {
 		http_Unset(obj->http, H_Content_Length);
-		http_PrintfHeader(w, w->vbc->vsl_id, obj->http,
+		http_PrintfHeader(w, w->busyobj->vbc->vsl_id, obj->http,
 		    "Content-Length: %jd", (intmax_t)obj->len);
 	}
 
 	if (cls)
-		VDI_CloseFd(w, &w->vbc);
+		VDI_CloseFd(w, &w->busyobj->vbc);
 	else
-		VDI_RecycleFd(w, &w->vbc);
+		VDI_RecycleFd(w, &w->busyobj->vbc);
 
 	return (0);
 }
diff --git a/bin/varnishd/cache/cache_panic.c b/bin/varnishd/cache/cache_panic.c
index 798ba53..923abbd 100644
--- a/bin/varnishd/cache/cache_panic.c
+++ b/bin/varnishd/cache/cache_panic.c
@@ -220,6 +220,9 @@ pan_busyobj(const struct busyobj *bo)
 	if (bo->should_close)	VSB_printf(pan_vsp, "    should_close\n");
 	VSB_printf(pan_vsp, "    bodystatus = %d,\n", bo->body_status);
 	VSB_printf(pan_vsp, "    },\n");
+	if (VALID_OBJ(bo->vbc, BACKEND_MAGIC))
+		pan_vbc(bo->vbc);
+
 }
 
 /*--------------------------------------------------------------------*/
@@ -271,9 +274,6 @@ pan_sess(const struct sess *sp)
 	if (VALID_OBJ(sp->vcl, VCL_CONF_MAGIC))
 		pan_vcl(sp->vcl);
 
-	if (VALID_OBJ(sp->wrk->vbc, BACKEND_MAGIC))
-		pan_vbc(sp->wrk->vbc);
-
 	if (VALID_OBJ(sp->wrk->obj, OBJECT_MAGIC))
 		pan_object(sp->wrk->obj);
 
diff --git a/bin/varnishd/cache/cache_shmlog.c b/bin/varnishd/cache/cache_shmlog.c
index 3cfd451..b7c43a1 100644
--- a/bin/varnishd/cache/cache_shmlog.c
+++ b/bin/varnishd/cache/cache_shmlog.c
@@ -291,10 +291,11 @@ WSLB(struct worker *w, enum VSL_tag_e tag, const char *fmt, ...)
 	va_list ap;
 
 	CHECK_OBJ_NOTNULL(w, WORKER_MAGIC);
-	CHECK_OBJ_NOTNULL(w->vbc, VBC_MAGIC);
+	CHECK_OBJ_NOTNULL(w->busyobj, BUSYOBJ_MAGIC);
+	CHECK_OBJ_NOTNULL(w->busyobj->vbc, VBC_MAGIC);
 	AN(fmt);
 	va_start(ap, fmt);
-	wsl(w, tag, w->vbc->vsl_id, fmt, ap);
+	wsl(w, tag, w->busyobj->vbc->vsl_id, fmt, ap);
 	va_end(ap);
 }
 
diff --git a/bin/varnishd/cache/cache_vrt_var.c b/bin/varnishd/cache/cache_vrt_var.c
index 0342de8..fea5c70 100644
--- a/bin/varnishd/cache/cache_vrt_var.c
+++ b/bin/varnishd/cache/cache_vrt_var.c
@@ -132,15 +132,19 @@ VRT_l_beresp_saintmode(const struct sess *sp, double a)
 	struct trouble *tr;
 	struct trouble *tr2;
 	struct worker *wrk;
+	struct vbc *vbc;
 
 	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
+	CHECK_OBJ_NOTNULL(sp->wrk, WORKER_MAGIC);
 	wrk = sp->wrk;
-	if (!wrk->vbc)
+	CHECK_OBJ_NOTNULL(wrk->busyobj, BUSYOBJ_MAGIC);
+	vbc = wrk->busyobj->vbc;
+	if (!vbc)
 		return;
-	CHECK_OBJ_NOTNULL(wrk->vbc, VBC_MAGIC);
-	if (!wrk->vbc->backend)
+	CHECK_OBJ_NOTNULL(vbc, VBC_MAGIC);
+	if (!vbc->backend)
 		return;
-	CHECK_OBJ_NOTNULL(wrk->vbc->backend, BACKEND_MAGIC);
+	CHECK_OBJ_NOTNULL(vbc->backend, BACKEND_MAGIC);
 	if (!sp->wrk->objcore)
 		return;
 	CHECK_OBJ_NOTNULL(sp->wrk->objcore, OBJCORE_MAGIC);
@@ -159,8 +163,8 @@ VRT_l_beresp_saintmode(const struct sess *sp, double a)
 	 * timeout at a later date (ie: sort by which entry will time out
 	 * from the list
 	 */
-	Lck_Lock(&wrk->vbc->backend->mtx);
-	VTAILQ_FOREACH_SAFE(tr, &wrk->vbc->backend->troublelist, list, tr2) {
+	Lck_Lock(&vbc->backend->mtx);
+	VTAILQ_FOREACH_SAFE(tr, &vbc->backend->troublelist, list, tr2) {
 		if (tr->timeout < new->timeout) {
 			VTAILQ_INSERT_BEFORE(tr, new, list);
 			new = NULL;
@@ -172,9 +176,9 @@ VRT_l_beresp_saintmode(const struct sess *sp, double a)
 	 * items have a longer timeout.
 	 */
 	if (new)
-		VTAILQ_INSERT_TAIL(&wrk->vbc->backend->troublelist, new, list);
+		VTAILQ_INSERT_TAIL(&vbc->backend->troublelist, new, list);
 
-	Lck_Unlock(&wrk->vbc->backend->mtx);
+	Lck_Unlock(&vbc->backend->mtx);
 }
 
 /*--------------------------------------------------------------------*/
@@ -253,8 +257,8 @@ VRT_r_beresp_backend_name(const struct sess *sp)
 {
 
 	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
-	CHECK_OBJ_NOTNULL(sp->wrk->vbc, VBC_MAGIC);
-	return(sp->wrk->vbc->backend->vcl_name);
+	CHECK_OBJ_NOTNULL(sp->wrk->busyobj->vbc, VBC_MAGIC);
+	return(sp->wrk->busyobj->vbc->backend->vcl_name);
 }
 
 struct sockaddr_storage *
@@ -262,8 +266,8 @@ VRT_r_beresp_backend_ip(const struct sess *sp)
 {
 
 	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
-	CHECK_OBJ_NOTNULL(sp->wrk->vbc, VBC_MAGIC);
-	return(sp->wrk->vbc->addr);
+	CHECK_OBJ_NOTNULL(sp->wrk->busyobj->vbc, VBC_MAGIC);
+	return(sp->wrk->busyobj->vbc->addr);
 }
 
 int
@@ -271,8 +275,8 @@ VRT_r_beresp_backend_port(const struct sess *sp)
 {
 
 	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
-	CHECK_OBJ_NOTNULL(sp->wrk->vbc, VBC_MAGIC);
-	return (VTCP_port(sp->wrk->vbc->addr));
+	CHECK_OBJ_NOTNULL(sp->wrk->busyobj->vbc, VBC_MAGIC);
+	return (VTCP_port(sp->wrk->busyobj->vbc->addr));
 }
 
 const char * __match_proto__()
diff --git a/bin/varnishd/storage/stevedore.c b/bin/varnishd/storage/stevedore.c
index 2748999..5de0e27 100644
--- a/bin/varnishd/storage/stevedore.c
+++ b/bin/varnishd/storage/stevedore.c
@@ -131,7 +131,7 @@ stv_pick_stevedore(struct worker *wrk, const char **hint)
 			return (stv_transient);
 
 		/* Hint was not valid, nuke it */
-		WSL(wrk, SLT_Debug, 0, 			/* XXX VSL_id ?? */
+		WSL(wrk, SLT_Debug, 0,			/* XXX VSL_id ?? */
 		    "Storage hint not usable");
 		*hint = NULL;
 	}



More information about the varnish-commit mailing list