[master] 27422d8 Unify code path for abandoning a fetch.
Poul-Henning Kamp
phk at varnish-cache.org
Fri Mar 25 10:54:28 CET 2011
commit 27422d81987612e113cf4cbb234d8945d77d9806
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Fri Mar 25 09:54:01 2011 +0000
Unify code path for abandoning a fetch.
diff --git a/bin/varnishd/cache_center.c b/bin/varnishd/cache_center.c
index 84e6004..45470f6 100644
--- a/bin/varnishd/cache_center.c
+++ b/bin/varnishd/cache_center.c
@@ -470,6 +470,7 @@ cnt_fetch(struct sess *sp)
AZ(sp->vbc);
AZ(sp->wrk->h_content_length);
AZ(sp->wrk->do_close);
+ AZ(sp->wrk->storage_hint);
http_Setup(sp->wrk->beresp, sp->wrk->ws);
@@ -485,77 +486,62 @@ cnt_fetch(struct sess *sp)
}
if (i) {
- if (sp->objcore != NULL) {
- CHECK_OBJ_NOTNULL(sp->objcore, OBJCORE_MAGIC);
- AZ(HSH_Deref(sp->wrk, sp->objcore, NULL));
- sp->objcore = NULL;
- }
- AZ(sp->obj);
- sp->wrk->do_close = 0;
- sp->wrk->h_content_length = NULL;
- http_Setup(sp->wrk->bereq, NULL);
- http_Setup(sp->wrk->beresp, NULL);
+ sp->handling = VCL_RET_ERROR;
sp->err_code = 503;
- sp->step = STP_ERROR;
- return (0);
- }
-
- /*
- * These two headers can be spread over multiple actual headers
- * and we rely on their content outside of VCL, so collect them
- * into one line here.
- */
- http_CollectHdr(sp->wrk->beresp, H_Cache_Control);
- http_CollectHdr(sp->wrk->beresp, H_Vary);
-
- /*
- * Figure out how the fetch is supposed to happen, before the
- * headers are adultered by VCL
- * Also sets other sp->wrk variables
- */
- sp->wrk->body_status = RFC2616_Body(sp);
+ sp->wrk->do_close = 0;
+ } else {
+ /*
+ * These two headers can be spread over multiple actual headers
+ * and we rely on their content outside of VCL, so collect them
+ * into one line here.
+ */
+ http_CollectHdr(sp->wrk->beresp, H_Cache_Control);
+ http_CollectHdr(sp->wrk->beresp, H_Vary);
+ /*
+ * Figure out how the fetch is supposed to happen, before the
+ * headers are adultered by VCL
+ * NB: Also sets other sp->wrk variables
+ */
+ sp->wrk->body_status = RFC2616_Body(sp);
- sp->err_code = http_GetStatus(sp->wrk->beresp);
+ sp->err_code = http_GetStatus(sp->wrk->beresp);
- /*
- * What does RFC2616 think about TTL ?
- */
- sp->wrk->entered = TIM_real();
- sp->wrk->age = 0;
- EXP_Clr(&sp->wrk->exp);
- sp->wrk->exp.ttl = RFC2616_Ttl(sp);
-
- /* pass from vclrecv{} has negative TTL */
- if (sp->objcore == NULL)
- sp->wrk->exp.ttl = -1.;
+ /*
+ * What does RFC2616 think about TTL ?
+ */
+ sp->wrk->entered = TIM_real();
+ sp->wrk->age = 0;
+ EXP_Clr(&sp->wrk->exp);
+ sp->wrk->exp.ttl = RFC2616_Ttl(sp);
- sp->wrk->do_esi = 0;
+ /* pass from vclrecv{} has negative TTL */
+ if (sp->objcore == NULL)
+ sp->wrk->exp.ttl = -1.;
+ sp->wrk->do_esi = 0;
- AZ(sp->wrk->storage_hint);
+ VCL_fetch_method(sp);
- VCL_fetch_method(sp);
+ switch (sp->handling) {
+ case VCL_RET_HIT_FOR_PASS:
+ if (sp->objcore != NULL)
+ sp->objcore->flags |= OC_F_PASS;
+ sp->step = STP_FETCHBODY;
+ return (0);
+ case VCL_RET_DELIVER:
+ sp->step = STP_FETCHBODY;
+ return (0);
+ default:
+ break;
+ }
- switch (sp->handling) {
- case VCL_RET_HIT_FOR_PASS:
- if (sp->objcore != NULL)
- sp->objcore->flags |= OC_F_PASS;
- sp->step = STP_FETCHBODY;
- return (0);
- case VCL_RET_DELIVER:
- sp->step = STP_FETCHBODY;
- return (0);
- default:
- break;
+ /* We are not going to fetch the body, Close the connection */
+ VDI_CloseFd(sp);
}
- /*
- * We are not going to fetch the body
- * Close the connection and clean up...
- */
+ /* Clean up partial fetch */
- VDI_CloseFd(sp);
if (sp->objcore != NULL) {
CHECK_OBJ_NOTNULL(sp->objcore, OBJCORE_MAGIC);
AZ(HSH_Deref(sp->wrk, sp->objcore, NULL));
@@ -717,7 +703,6 @@ cnt_fetchbody(struct sess *sp)
AN(sp->obj->vary);
memcpy(sp->obj->vary, vsb_data(vary), varyl);
vsb_delete(vary);
- vary = NULL;
}
sp->obj->xid = sp->xid;
More information about the varnish-commit
mailing list