Commit 4cff3b99 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Rename cache_response.c to cache_http1_deliver.c and make it responsible

for all deliveries, streaming or non-streaming
parent b115ccfd
...@@ -39,7 +39,7 @@ varnishd_SOURCES = \ ...@@ -39,7 +39,7 @@ varnishd_SOURCES = \
cache/cache_pipe.c \ cache/cache_pipe.c \
cache/cache_pool.c \ cache/cache_pool.c \
cache/cache_req_fsm.c \ cache/cache_req_fsm.c \
cache/cache_response.c \ cache/cache_http1_deliver.c \
cache/cache_rfc2616.c \ cache/cache_rfc2616.c \
cache/cache_session.c \ cache/cache_session.c \
cache/cache_shmlog.c \ cache/cache_shmlog.c \
......
...@@ -815,6 +815,9 @@ int HTTP1_DiscardReqBody(struct req *req); ...@@ -815,6 +815,9 @@ int HTTP1_DiscardReqBody(struct req *req);
int HTTP1_CacheReqBody(struct req *req, ssize_t maxsize); int HTTP1_CacheReqBody(struct req *req, ssize_t maxsize);
int HTTP1_IterateReqBody(struct req *req, req_body_iter_f *func, void *priv); int HTTP1_IterateReqBody(struct req *req, req_body_iter_f *func, void *priv);
/* cache_http1_deliver.c */
void V1D_Deliver(struct req *);
/* cache_req_fsm.c [CNT] */ /* cache_req_fsm.c [CNT] */
enum req_fsm_nxt CNT_Request(struct worker *, struct req *); enum req_fsm_nxt CNT_Request(struct worker *, struct req *);
...@@ -1052,10 +1055,6 @@ void VSL_Flush(struct vsl_log *, int overflow); ...@@ -1052,10 +1055,6 @@ void VSL_Flush(struct vsl_log *, int overflow);
#endif #endif
/* cache_response.c */
void RES_BuildHttp(struct req *);
void RES_WriteObj(struct req *);
/* cache_vary.c */ /* cache_vary.c */
int VRY_Create(struct busyobj *bo, struct vsb **psb); int VRY_Create(struct busyobj *bo, struct vsb **psb);
int VRY_Match(struct req *, const uint8_t *vary); int VRY_Match(struct req *, const uint8_t *vary);
......
...@@ -101,7 +101,7 @@ res_dorange(const struct req *req, const char *r, ssize_t *plow, ssize_t *phigh) ...@@ -101,7 +101,7 @@ res_dorange(const struct req *req, const char *r, ssize_t *plow, ssize_t *phigh)
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
void static void
RES_BuildHttp(struct req *req) RES_BuildHttp(struct req *req)
{ {
...@@ -262,7 +262,7 @@ res_WriteDirObj(struct req *req, ssize_t low, ssize_t high) ...@@ -262,7 +262,7 @@ res_WriteDirObj(struct req *req, ssize_t low, ssize_t high)
* Attempt optimizations like 304 and 206 here. * Attempt optimizations like 304 and 206 here.
*/ */
void static void
RES_WriteObj(struct req *req) RES_WriteObj(struct req *req)
{ {
char *r; char *r;
...@@ -323,3 +323,13 @@ RES_WriteObj(struct req *req) ...@@ -323,3 +323,13 @@ RES_WriteObj(struct req *req)
if (WRW_FlushRelease(req->wrk) && req->sp->fd >= 0) if (WRW_FlushRelease(req->wrk) && req->sp->fd >= 0)
SES_Close(req->sp, SC_REM_CLOSE); SES_Close(req->sp, SC_REM_CLOSE);
} }
void
V1D_Deliver(struct req *req)
{
while (req->obj->objcore->busyobj)
(void)usleep(10000);
RES_BuildHttp(req);
RES_WriteObj(req);
}
...@@ -75,72 +75,6 @@ DOT acceptor -> recv [style=bold,color=green] ...@@ -75,72 +75,6 @@ DOT acceptor -> recv [style=bold,color=green]
#include "compat/srandomdev.h" #include "compat/srandomdev.h"
#endif #endif
/*--------------------------------------------------------------------
* We have a refcounted object on the session, and possibly the busyobj
* which is fetching it, prepare a response.
*
DOT stream [
DOT shape=record
DOT label="{cnt_stream:}"
DOT ]
DOT stream:deliver:s -> DONE [style=bold,color=red]
DOT stream:deliver:s -> DONE [style=bold,color=blue]
*
*/
static enum req_fsm_nxt
cnt_stream(struct worker *wrk, struct req *req)
{
struct busyobj *bo;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
bo = req->obj->objcore->busyobj;
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
AN(bo->do_stream);
CHECK_OBJ_NOTNULL(req->obj, OBJECT_MAGIC);
CHECK_OBJ_NOTNULL(req->vcl, VCL_CONF_MAGIC);
AZ(bo->do_esi);
if (wrk->handling == VCL_RET_RESTART) {
assert(req->obj == bo->fetch_obj);
req->obj = NULL;
VBO_DerefBusyObj(wrk, &bo);
AZ(req->obj);
http_Teardown(req->resp);
req->req_step = R_STP_RESTART;
return (REQ_FSM_MORE);
}
assert(wrk->handling == VCL_RET_DELIVER);
VBO_waitstate(bo, BOS_FINISHED);
assert(bo->state >= BOS_FINISHED);
if (bo->state == BOS_FAILED) {
(void)HSH_DerefObj(&wrk->stats, &req->obj);
VBO_DerefBusyObj(wrk, &bo);
req->err_code = 503;
req->req_step = R_STP_ERROR;
return (REQ_FSM_MORE);
}
VBO_DerefBusyObj(wrk, &bo);
AZ(bo);
RES_WriteObj(req);
/* No point in saving the body if it is hit-for-pass */
if (req->obj->objcore->flags & OC_F_PASS)
STV_Freestore(req->obj);
assert(WRW_IsReleased(wrk));
(void)HSH_DerefObj(&wrk->stats, &req->obj);
http_Teardown(req->resp);
return (REQ_FSM_DONE);
}
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
* Deliver an already stored object * Deliver an already stored object
* *
...@@ -202,13 +136,6 @@ cnt_deliver(struct worker *wrk, struct req *req) ...@@ -202,13 +136,6 @@ cnt_deliver(struct worker *wrk, struct req *req)
VCL_deliver_method(req->vcl, wrk, req, NULL, req->http->ws); VCL_deliver_method(req->vcl, wrk, req, NULL, req->http->ws);
while (req->obj->objcore->busyobj) {
VSLb(req->vsl, SLT_Debug, "HERE %s %d", __func__, __LINE__);
(void)usleep(10000);
}
RES_BuildHttp(req);
/* Stop the insanity before it turns "Hotel California" on us */ /* Stop the insanity before it turns "Hotel California" on us */
if (req->restarts >= cache_param->max_restarts) if (req->restarts >= cache_param->max_restarts)
wrk->handling = VCL_RET_DELIVER; wrk->handling = VCL_RET_DELIVER;
...@@ -220,9 +147,10 @@ cnt_deliver(struct worker *wrk, struct req *req) ...@@ -220,9 +147,10 @@ cnt_deliver(struct worker *wrk, struct req *req)
req->req_step = R_STP_RESTART; req->req_step = R_STP_RESTART;
return (REQ_FSM_MORE); return (REQ_FSM_MORE);
} }
assert(wrk->handling == VCL_RET_DELIVER); assert(wrk->handling == VCL_RET_DELIVER);
RES_WriteObj(req); V1D_Deliver(req);
/* No point in saving the body if it is hit-for-pass */ /* No point in saving the body if it is hit-for-pass */
if (req->obj->objcore->flags & OC_F_PASS) if (req->obj->objcore->flags & OC_F_PASS)
......
...@@ -44,7 +44,6 @@ REQ_STEP(lookup, LOOKUP, (wrk, req)) ...@@ -44,7 +44,6 @@ REQ_STEP(lookup, LOOKUP, (wrk, req))
REQ_STEP(purge, PURGE, (wrk, req)) REQ_STEP(purge, PURGE, (wrk, req))
REQ_STEP(miss, MISS, (wrk, req)) REQ_STEP(miss, MISS, (wrk, req))
REQ_STEP(fetch, FETCH, (wrk, req)) REQ_STEP(fetch, FETCH, (wrk, req))
REQ_STEP(stream, STREAM, (wrk, req))
REQ_STEP(deliver, DELIVER, (wrk, req)) REQ_STEP(deliver, DELIVER, (wrk, req))
REQ_STEP(error, ERROR, (wrk, req)) REQ_STEP(error, ERROR, (wrk, req))
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment