From d3eddcd0e21e6ff82086dc5dc18bc3b8755bd557 Mon Sep 17 00:00:00 2001 From: des Date: Mon, 14 May 2007 09:42:16 +0000 Subject: [PATCH] Merged revisions 1394,1400-1418 via svnmerge from svn+ssh://projects.linpro.no/svn/varnish/trunk/varnish-cache ........ r1394 | phk | 2007-05-09 12:55:33 +0200 (Wed, 09 May 2007) | 8 lines After compilation of a VCL program, do a test-load into the management process to catch any implementation-discrepancies between symbols used by the compiler and those implemented in the runtime. The situation will happen from time to time and there is no need to issue a panic when we can test sensibly for it. ........ r1403 | ingvar | 2007-05-11 09:51:11 +0200 (Fri, 11 May 2007) | 5 lines * Fri May 11 2007 Ingvar Hagelund - 1.0.svn-20070511 - Threw latest changes into svn trunk - Removed the conversion of manpages into utf8. They are all utf8 in trunk ........ r1404 | ingvar | 2007-05-11 10:13:03 +0200 (Fri, 11 May 2007) | 1 line ........ r1406 | des | 2007-05-11 13:06:03 +0200 (Fri, 11 May 2007) | 2 lines Comment out comparisons which are always true (unsigned >= 0) ........ r1407 | des | 2007-05-11 13:06:38 +0200 (Fri, 11 May 2007) | 2 lines Tweak DEVELOPER_CFLAGS. ........ r1408 | des | 2007-05-11 13:14:32 +0200 (Fri, 11 May 2007) | 2 lines Pull flopen() and pidfile_*() (renamed to vpf_*()) from FreeBSD. ........ r1409 | des | 2007-05-11 13:15:46 +0200 (Fri, 11 May 2007) | 2 lines Expand tags. ........ r1410 | des | 2007-05-11 13:17:09 +0200 (Fri, 11 May 2007) | 2 lines No use expanding tags unless there *are* tags... ........ r1411 | des | 2007-05-11 13:34:42 +0200 (Fri, 11 May 2007) | 2 lines Add -D (daemonize) and -P (pid file) options. ........ r1412 | des | 2007-05-11 13:35:59 +0200 (Fri, 11 May 2007) | 2 lines Remove unused header. ........ r1413 | des | 2007-05-11 14:01:47 +0200 (Fri, 11 May 2007) | 2 lines Avoid gcc4-specific compiler options. ........ r1414 | des | 2007-05-11 14:05:02 +0200 (Fri, 11 May 2007) | 2 lines Forgotten commit: check for and daemon(3) availability. ........ r1415 | des | 2007-05-11 14:17:26 +0200 (Fri, 11 May 2007) | 2 lines Add -P (pid file) option. ........ r1416 | des | 2007-05-11 14:19:48 +0200 (Fri, 11 May 2007) | 2 lines Minor style issues. ........ r1417 | phk | 2007-05-11 15:15:16 +0200 (Fri, 11 May 2007) | 7 lines Make the sendfile threshold inifinity for now, we have evidence of sendfile not doing it's job in a number of operating system (-versions ?) This change is unlikely to cause a performance hit anywhere, because writev() is pretty effective in the first place. ........ r1418 | des | 2007-05-14 11:02:23 +0200 (Mon, 14 May 2007) | 2 lines Document the inadvisability of enabling sendfile. ........ git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@1419 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- varnish-cache/bin/varnishd/cache.h | 1 + varnish-cache/bin/varnishd/cache_backend.c | 2 + varnish-cache/bin/varnishd/cache_center.c | 25 ++--- varnish-cache/bin/varnishd/cache_response.c | 117 +++++++++++++++++++- varnish-cache/bin/varnishtop/varnishtop.c | 2 +- 5 files changed, 127 insertions(+), 20 deletions(-) diff --git a/varnish-cache/bin/varnishd/cache.h b/varnish-cache/bin/varnishd/cache.h index a26a6234..c12fad55 100644 --- a/varnish-cache/bin/varnishd/cache.h +++ b/varnish-cache/bin/varnishd/cache.h @@ -435,6 +435,7 @@ void WSL_Flush(struct worker *w); /* cache_response.c */ void RES_Error(struct sess *sp, int code, const char *reason); +int Fake(struct sess *sp, int status, const char *reason, int ttl); void RES_WriteObj(struct sess *sp); /* cache_vcl.c */ diff --git a/varnish-cache/bin/varnishd/cache_backend.c b/varnish-cache/bin/varnishd/cache_backend.c index 3570397d..ff254675 100644 --- a/varnish-cache/bin/varnishd/cache_backend.c +++ b/varnish-cache/bin/varnishd/cache_backend.c @@ -320,7 +320,9 @@ VBE_GetFd(struct sess *sp) } usleep(100000 * n); } +#if 0 RES_Error(sp, 503, "Backend did not respond."); +#endif return (NULL); } diff --git a/varnish-cache/bin/varnishd/cache_center.c b/varnish-cache/bin/varnishd/cache_center.c index 75e07701..5b428f4e 100644 --- a/varnish-cache/bin/varnishd/cache_center.c +++ b/varnish-cache/bin/varnishd/cache_center.c @@ -286,26 +286,19 @@ static int cnt_fetch(struct sess *sp) { - if (Fetch(sp)) { - sp->obj->cacheable = 0; - HSH_Unbusy(sp->obj); - HSH_Deref(sp->obj); - sp->obj = NULL; - sp->step = STP_DONE; - RES_Error(sp, 503, NULL); - return (0); - } + AZ(Fake(sp, 503, "Backend did not respond.", 30)); + } else { + RFC2616_cache_policy(sp, &sp->obj->http); /* XXX -> VCL */ - RFC2616_cache_policy(sp, &sp->obj->http); /* XXX -> VCL */ + VCL_fetch_method(sp); - VCL_fetch_method(sp); + if (sp->handling == VCL_RET_ERROR) + INCOMPL(); - if (sp->handling == VCL_RET_ERROR) - INCOMPL(); - - if (sp->handling == VCL_RET_PASS) - sp->obj->pass = 1; + if (sp->handling == VCL_RET_PASS) + sp->obj->pass = 1; + } sp->obj->cacheable = 1; if (sp->obj->objhead != NULL) { diff --git a/varnish-cache/bin/varnishd/cache_response.c b/varnish-cache/bin/varnishd/cache_response.c index 13b4fec9..fb3b79fb 100644 --- a/varnish-cache/bin/varnishd/cache_response.c +++ b/varnish-cache/bin/varnishd/cache_response.c @@ -29,11 +29,11 @@ * $Id$ */ -#include /* XXX: for NULL ?? */ -#include /* XXX: for NULL ?? */ #include #include +#include + #ifndef HAVE_CLOCK_GETTIME #include "compat/clock_gettime.h" #endif @@ -134,7 +134,7 @@ RES_Error(struct sess *sp, int code, const char *reason) vsb_cat(sb, "Server: Varnish\r\n" "Connection: close\r\n" - "Content-Type: text/html; charset=iso-8859-1\r\n" + "Content-Type: text/html; charset=utf-8\r\n" "\r\n" "\r\n" "\r\n" @@ -162,6 +162,117 @@ RES_Error(struct sess *sp, int code, const char *reason) vsb_delete(sb); } +/*--------------------------------------------------------------------*/ + +int +Fake(struct sess *sp, int status, const char *reason, int ttl) +{ + struct storage *st; + struct object *o; + struct vsb vsb; + struct http_msg *mp; + const char *msg; + char buf[40]; + time_t now; + size_t len; + + CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); + CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC); + CHECK_OBJ_NOTNULL(&sp->obj->http, HTTP_MAGIC); + assert(sp->obj->busy != 0); + o = sp->obj; + time(&now); + + assert(status >= 100 && status <= 999); + msg = "Unknown error"; + for (mp = http_msg; mp->nbr != 0 && mp->nbr <= status; mp++) { + if (mp->nbr < status) + continue; + if (mp->nbr > status) + break; + msg = mp->txt; + if (reason == NULL) + reason = mp->reason; + break; + } + if (reason == NULL) + reason = msg; + AN(reason); + AN(msg); + + o->response = status; + o->valid = 1; + o->entered = now; + o->ttl = now + ttl; + o->last_modified = now; + + /* generate body */ + st = stevedore->alloc(stevedore, 1024); + XXXAN(st->stevedore); + TAILQ_INSERT_TAIL(&sp->obj->store, st, list); + + vsb_new(&vsb, (char *)st->ptr, st->space, VSB_FIXEDLEN); + vsb_cat(&vsb, + "\r\n" + "\r\n" + " \r\n"); + vsb_printf(&vsb, + " %03d %s\r\n", status, msg); + vsb_printf(&vsb, + " \r\n" + " \r\n"); + vsb_printf(&vsb, + "

Error %03d %s

\r\n", status, msg); + vsb_printf(&vsb, + "

%s

\r\n", reason); + vsb_printf(&vsb, + "

Guru Meditation:

\r\n"); + vsb_printf(&vsb, + "

XID: %u

\r\n", sp->xid); + vsb_printf(&vsb, + " Varnish\r\n" + " \r\n" + "\r\n"); + vsb_finish(&vsb); + vsb_finish(&vsb); + o->len = st->len = vsb_len(&vsb); + vsb_delete(&vsb); + + /* generate header */ + o->http.s = calloc(len = 1024, 1); + XXXAN(o->http.s); + o->http.e = o->http.s + len; + + /* XXX we could use a little less magic here */ + vsb_new(&vsb, o->http.s, len, VSB_FIXEDLEN); + vsb_printf(&vsb, "\n"); + vsb_printf(&vsb, "\n"); + vsb_printf(&vsb, "HTTP/1.1\r\n"); + vsb_printf(&vsb, "%d\n", status); + vsb_printf(&vsb, "%s\n", reason); + TIM_format(now, buf); + vsb_printf(&vsb, "Date: %s\n", buf); + vsb_printf(&vsb, "Server: Varnish\n"); + vsb_printf(&vsb, "Retry-After: %ju\n", (uintmax_t)ttl); + vsb_printf(&vsb, "Content-Type: text/html; charset=utf-8\n"); + vsb_printf(&vsb, "Content-Length: %ud\n", o->len); + vsb_finish(&vsb); + vsb_delete(&vsb); + + /* XXX and here */ + o->http.f = o->http.s; + o->http.nhd = 0; + do { + o->http.hd[o->http.nhd].b = o->http.f; + while (*o->http.f != '\n') + ++o->http.f; + o->http.hd[o->http.nhd].e = o->http.f; + ++o->http.nhd; + ++o->http.f; + } while (*o->http.f); + + return (0); +} /*--------------------------------------------------------------------*/ diff --git a/varnish-cache/bin/varnishtop/varnishtop.c b/varnish-cache/bin/varnishtop/varnishtop.c index f9ea9ba3..b470ddbe 100644 --- a/varnish-cache/bin/varnishtop/varnishtop.c +++ b/varnish-cache/bin/varnishtop/varnishtop.c @@ -199,5 +199,5 @@ main(int argc, char **argv) TAILQ_INSERT_BEFORE(tp, tp2, list); } } - return (0); + exit(0); } -- 2.39.5