[4.0] a0e68b3 Change vcl_error{} to do a direct response without going the detour over a bogo-object.
Poul-Henning Kamp
phk at FreeBSD.org
Thu Mar 13 10:24:31 CET 2014
commit a0e68b31df6eeba8634e1a436cccb176e889a33f
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Tue Mar 11 10:48:53 2014 +0000
Change vcl_error{} to do a direct response without going the detour
over a bogo-object.
This means that vcl_error{} looses access to obj.* variables, but
gains access to resp.* vaiables instead.
A couple of now obsolute test-cases retired.
diff --git a/bin/varnishd/builtin.vcl b/bin/varnishd/builtin.vcl
index 96d74ea..da30346 100644
--- a/bin/varnishd/builtin.vcl
+++ b/bin/varnishd/builtin.vcl
@@ -135,19 +135,19 @@ sub vcl_deliver {
* We can come here "invisibly" with the following errors: 413, 417 & 503
*/
sub vcl_error {
- set obj.http.Content-Type = "text/html; charset=utf-8";
- set obj.http.Retry-After = "5";
+ set resp.http.Content-Type = "text/html; charset=utf-8";
+ set resp.http.Retry-After = "5";
synthetic( {"
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
- <title>"} + obj.status + " " + obj.reason + {"</title>
+ <title>"} + resp.status + " " + resp.reason + {"</title>
</head>
<body>
- <h1>Error "} + obj.status + " " + obj.reason + {"</h1>
- <p>"} + obj.reason + {"</p>
+ <h1>Error "} + resp.status + " " + resp.reason + {"</h1>
+ <p>"} + resp.reason + {"</p>
<h3>Guru Meditation:</h3>
<p>XID: "} + req.xid + {"</p>
<hr>
diff --git a/bin/varnishd/cache/cache_fetch.c b/bin/varnishd/cache/cache_fetch.c
index c3cefac..3aabd8d 100644
--- a/bin/varnishd/cache/cache_fetch.c
+++ b/bin/varnishd/cache/cache_fetch.c
@@ -669,9 +669,8 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo)
if (wrk->handling == VCL_RET_RETRY) {
VSB_delete(bo->synth_body);
bo->synth_body = NULL;
- if (bo->retries++ < cache_param->max_retries) {
+ if (bo->retries++ < cache_param->max_retries)
return (F_STP_RETRY);
- }
bo->synth_body = NULL;
HSH_Fail(bo->fetch_objcore);
VBO_setstate(bo, BOS_FAILED);
diff --git a/bin/varnishd/cache/cache_req_fsm.c b/bin/varnishd/cache/cache_req_fsm.c
index f5ae189..467ea8d 100644
--- a/bin/varnishd/cache/cache_req_fsm.c
+++ b/bin/varnishd/cache/cache_req_fsm.c
@@ -187,56 +187,29 @@ DOT }
static enum req_fsm_nxt
cnt_error(struct worker *wrk, struct req *req)
{
- struct http *h;
- struct busyobj *bo;
char date[40];
- ssize_t l;
- struct storage *st;
+ struct http *h;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
- AZ(req->objcore);
- AZ(req->obj);
req->acct_req.error++;
- bo = VBO_GetBusyObj(wrk, req);
- AZ(bo->stats);
- bo->stats = &wrk->stats;
- bo->fetch_objcore = HSH_Private(wrk);
- bo->fetch_obj = STV_NewObject(bo,
- TRANSIENT_STORAGE, cache_param->http_resp_size,
- (uint16_t)cache_param->http_max_hdr);
- req->obj = bo->fetch_obj;
- if (req->obj == NULL) {
- req->doclose = SC_OVERLOAD;
- req->director_hint = NULL;
- AZ(HSH_DerefObjCore(&wrk->stats, &bo->fetch_objcore));
- bo->fetch_objcore = NULL;
- http_Teardown(bo->beresp);
- http_Teardown(bo->bereq);
- bo->stats = NULL;
- VBO_DerefBusyObj(wrk, &bo);
- return (REQ_FSM_DONE);
- }
- CHECK_OBJ_NOTNULL(req->obj, OBJECT_MAGIC);
- AZ(req->objcore);
- req->obj->vxid = bo->vsl->wid;
- req->obj->exp.t_origin = req->t_req;
- h = req->obj->http;
+ HTTP_Setup(req->resp, req->ws, req->vsl, SLT_RespMethod);
+ h = req->resp;
+ req->t_resp = VTIM_real();
if (req->err_code < 100 || req->err_code > 999)
req->err_code = 501;
+ http_ClrHeader(h);
http_PutProtocol(h, "HTTP/1.1");
http_PutStatus(h, req->err_code);
- VTIM_format(W_TIM_real(wrk), date);
+ VTIM_format(req->t_resp, date);
http_PrintfHeader(h, "Date: %s", date);
http_SetHeader(h, "Server: Varnish");
-
- CHECK_OBJ_NOTNULL(req->obj, OBJECT_MAGIC);
- HSH_Ref(req->obj->objcore);
-
+ http_PrintfHeader(req->resp,
+ "X-Varnish: %u", req->vsl->wid & VSL_IDENTMASK);
if (req->err_reason != NULL)
http_PutResponse(h, req->err_reason);
else
@@ -248,56 +221,27 @@ cnt_error(struct worker *wrk, struct req *req)
VCL_error_method(req->vcl, wrk, req, NULL, req->http->ws);
- http_Unset(req->obj->http, H_Content_Length);
+ http_Unset(h, H_Content_Length);
AZ(VSB_finish(req->synth_body));
- /* Stop the insanity before it turns "Hotel California" on us */
- if (req->restarts >= cache_param->max_restarts)
- wrk->handling = VCL_RET_DELIVER;
-
if (wrk->handling == VCL_RET_RESTART) {
+ http_ClrHeader(h);
VSB_delete(req->synth_body);
req->synth_body = NULL;
- bo->stats = NULL;
- VBO_DerefBusyObj(wrk, &bo);
- HSH_Drop(wrk, &req->obj);
req->req_step = R_STP_RESTART;
return (REQ_FSM_MORE);
}
- CHECK_OBJ_NOTNULL(req->obj, OBJECT_MAGIC);
-
- /* We always close when we take this path */
- req->doclose = SC_TX_ERROR;
- req->wantbody = 1;
-
assert(wrk->handling == VCL_RET_DELIVER);
- l = VSB_len(req->synth_body);
- if (l > 0) {
- st = STV_alloc(bo, l);
- if (st != NULL) {
- VTAILQ_INSERT_TAIL(&req->obj->store, st, list);
- if (st->space >= l) {
- memcpy(st->ptr, VSB_data(req->synth_body), l);
- st->len = l;
- req->obj->len = l;
- }
- }
- }
+ V1D_Deliver_Synth(req);
VSB_delete(req->synth_body);
req->synth_body = NULL;
req->err_code = 0;
req->err_reason = NULL;
- http_Teardown(bo->bereq);
- CHECK_OBJ_NOTNULL(req->obj, OBJECT_MAGIC);
- bo->stats = NULL;
- VBO_DerefBusyObj(wrk, &bo);
- req->req_step = R_STP_DELIVER;
- CHECK_OBJ_NOTNULL(req->obj, OBJECT_MAGIC);
- return (REQ_FSM_MORE);
+ return (REQ_FSM_DONE);
}
/*--------------------------------------------------------------------
diff --git a/bin/varnishd/cache/cache_vrt_var.c b/bin/varnishd/cache/cache_vrt_var.c
index b6e2835..8a999c9 100644
--- a/bin/varnishd/cache/cache_vrt_var.c
+++ b/bin/varnishd/cache/cache_vrt_var.c
@@ -62,7 +62,7 @@ vrt_do_string(const struct http *hp, int fld,
va_end(ap);
}
-#define VRT_DO_HDR(obj, hdr, fld) \
+#define VRT_HDR_L(obj, hdr, fld) \
void \
VRT_l_##obj##_##hdr(const struct vrt_ctx *ctx, const char *p, ...) \
{ \
@@ -72,8 +72,9 @@ VRT_l_##obj##_##hdr(const struct vrt_ctx *ctx, const char *p, ...) \
va_start(ap, p); \
vrt_do_string(ctx->http_##obj, fld, #obj "." #hdr, p, ap); \
va_end(ap); \
-} \
- \
+}
+
+#define VRT_HDR_R(obj, hdr, fld) \
const char * \
VRT_r_##obj##_##hdr(const struct vrt_ctx *ctx) \
{ \
@@ -82,7 +83,11 @@ VRT_r_##obj##_##hdr(const struct vrt_ctx *ctx) \
return (ctx->http_##obj->hd[fld].b); \
}
-#define VRT_DO_STATUS(obj) \
+#define VRT_HDR_LR(obj, hdr, fld) \
+ VRT_HDR_L(obj, hdr, fld) \
+ VRT_HDR_R(obj, hdr, fld)
+
+#define VRT_STATUS_L(obj) \
void \
VRT_l_##obj##_status(const struct vrt_ctx *ctx, long num) \
{ \
@@ -91,8 +96,9 @@ VRT_l_##obj##_status(const struct vrt_ctx *ctx, long num) \
CHECK_OBJ_NOTNULL(ctx->http_##obj, HTTP_MAGIC); \
assert(num >= 100 && num <= 999); \
ctx->http_##obj->status = (uint16_t)num; \
-} \
- \
+}
+
+#define VRT_STATUS_R(obj) \
long \
VRT_r_##obj##_status(const struct vrt_ctx *ctx) \
{ \
@@ -102,22 +108,26 @@ VRT_r_##obj##_status(const struct vrt_ctx *ctx) \
return(ctx->http_##obj->status); \
}
-VRT_DO_HDR(req, method, HTTP_HDR_METHOD)
-VRT_DO_HDR(req, url, HTTP_HDR_URL)
-VRT_DO_HDR(req, proto, HTTP_HDR_PROTO)
-VRT_DO_HDR(obj, proto, HTTP_HDR_PROTO)
-VRT_DO_HDR(obj, reason, HTTP_HDR_RESPONSE)
-VRT_DO_STATUS(obj)
-VRT_DO_HDR(resp, proto, HTTP_HDR_PROTO)
-VRT_DO_HDR(resp, reason, HTTP_HDR_RESPONSE)
-VRT_DO_STATUS(resp)
-
-VRT_DO_HDR(bereq, method, HTTP_HDR_METHOD)
-VRT_DO_HDR(bereq, url, HTTP_HDR_URL)
-VRT_DO_HDR(bereq, proto, HTTP_HDR_PROTO)
-VRT_DO_HDR(beresp, proto, HTTP_HDR_PROTO)
-VRT_DO_HDR(beresp, reason, HTTP_HDR_RESPONSE)
-VRT_DO_STATUS(beresp)
+VRT_HDR_LR(req, method, HTTP_HDR_METHOD)
+VRT_HDR_LR(req, url, HTTP_HDR_URL)
+VRT_HDR_LR(req, proto, HTTP_HDR_PROTO)
+
+VRT_HDR_R(obj, proto, HTTP_HDR_PROTO)
+VRT_HDR_R(obj, reason, HTTP_HDR_RESPONSE)
+VRT_STATUS_R(obj)
+
+VRT_HDR_LR(resp, proto, HTTP_HDR_PROTO)
+VRT_HDR_LR(resp, reason, HTTP_HDR_RESPONSE)
+VRT_STATUS_L(resp)
+VRT_STATUS_R(resp)
+
+VRT_HDR_LR(bereq, method, HTTP_HDR_METHOD)
+VRT_HDR_LR(bereq, url, HTTP_HDR_URL)
+VRT_HDR_LR(bereq, proto, HTTP_HDR_PROTO)
+VRT_HDR_LR(beresp, proto, HTTP_HDR_PROTO)
+VRT_HDR_LR(beresp, reason, HTTP_HDR_RESPONSE)
+VRT_STATUS_L(beresp)
+VRT_STATUS_R(beresp)
/*--------------------------------------------------------------------*/
diff --git a/bin/varnishtest/tests/b00017.vtc b/bin/varnishtest/tests/b00017.vtc
index faac1e8..dbe673b 100644
--- a/bin/varnishtest/tests/b00017.vtc
+++ b/bin/varnishtest/tests/b00017.vtc
@@ -1,4 +1,4 @@
-varnishtest "Check that we close one error"
+varnishtest "Check that we do not close one error"
varnish v1 -vcl {
backend foo {
@@ -19,7 +19,7 @@ client c1 {
rxresp
expect resp.status == 888
expect resp.bodylen == 31
- expect resp.http.connection == close
+ expect resp.http.connection != close
} -run
varnish v1 -expect s_error == 1
diff --git a/bin/varnishtest/tests/b00019.vtc b/bin/varnishtest/tests/b00019.vtc
index 597e8b9..59ceb61 100644
--- a/bin/varnishtest/tests/b00019.vtc
+++ b/bin/varnishtest/tests/b00019.vtc
@@ -27,14 +27,14 @@ varnish v1 -vcl+backend {
sub vcl_error {
if (req.restarts == 2) {
- set obj.status = 200;
- set obj.reason = "restart=2";
+ set resp.status = 200;
+ set resp.reason = "restart=2";
} elsif (req.restarts > 2) {
- set obj.status = 501;
- set obj.reason = "restart>2";
+ set resp.status = 501;
+ set resp.reason = "restart>2";
} elsif (req.restarts < 2) {
- set obj.status = 500;
- set obj.reason = "restart<2";
+ set resp.status = 500;
+ set resp.reason = "restart<2";
}
}
} -start
diff --git a/bin/varnishtest/tests/b00030.vtc b/bin/varnishtest/tests/b00030.vtc
index 8b945e1..a7b6c57 100644
--- a/bin/varnishtest/tests/b00030.vtc
+++ b/bin/varnishtest/tests/b00030.vtc
@@ -13,7 +13,7 @@ varnish v1 -vcl+backend {
return (error(200,req.ttl));
}
sub vcl_error {
- set obj.http.x-timestamp = now;
+ set resp.http.x-timestamp = now;
}
} -start
diff --git a/bin/varnishtest/tests/c00024.vtc b/bin/varnishtest/tests/c00024.vtc
index 2a1e542..6167914 100644
--- a/bin/varnishtest/tests/c00024.vtc
+++ b/bin/varnishtest/tests/c00024.vtc
@@ -15,7 +15,7 @@ varnish v1 -vcl+backend {
if (req.restarts < 1) {
return (restart);
} else {
- set obj.status = 201;
+ set resp.status = 201;
}
}
} -start
diff --git a/bin/varnishtest/tests/c00061.vtc b/bin/varnishtest/tests/c00061.vtc
index ecb01a4..c99f324 100644
--- a/bin/varnishtest/tests/c00061.vtc
+++ b/bin/varnishtest/tests/c00061.vtc
@@ -9,7 +9,7 @@ varnish v1 -vcl {
}
sub vcl_error {
- set obj.status = 504;
+ set resp.status = 504;
}
} -start
diff --git a/bin/varnishtest/tests/r00310.vtc b/bin/varnishtest/tests/r00310.vtc
index 38c8a32..9d0c431 100644
--- a/bin/varnishtest/tests/r00310.vtc
+++ b/bin/varnishtest/tests/r00310.vtc
@@ -1,6 +1,6 @@
varnishtest "Test obj.http.x-cache in vcl_hit"
-varnish v1 -errvcl {'obj.http.x-cache': cannot be set in method 'vcl_hit'.} {
+varnish v1 -errvcl {Variable 'obj.http.x-cache' is read only.} {
backend foo { .host = "127.0.0.1"; }
sub vcl_hit {
diff --git a/bin/varnishtest/tests/r00769.vtc b/bin/varnishtest/tests/r00769.vtc
index 838ef17..451029c 100644
--- a/bin/varnishtest/tests/r00769.vtc
+++ b/bin/varnishtest/tests/r00769.vtc
@@ -17,9 +17,9 @@ varnish v1 -vcl+backend {
return (deliver);
}
sub vcl_error {
- if (obj.status == 700) {
- set obj.status=404;
- set obj.http.X-status = obj.status;
+ if (resp.status == 700) {
+ set resp.status=404;
+ set resp.http.X-status = resp.status;
return (deliver);
}
}
diff --git a/bin/varnishtest/tests/r00965.vtc b/bin/varnishtest/tests/r00965.vtc
index ccd01b5..d9cbdba 100644
--- a/bin/varnishtest/tests/r00965.vtc
+++ b/bin/varnishtest/tests/r00965.vtc
@@ -28,7 +28,7 @@ varnish v1 -vcl+backend {
}
sub vcl_error {
- if (obj.status == 988) { return (restart); }
+ if (resp.status == 988) { return (restart); }
}
sub vcl_miss {
diff --git a/bin/varnishtest/tests/r01031.vtc b/bin/varnishtest/tests/r01031.vtc
deleted file mode 100644
index 27bbab2..0000000
--- a/bin/varnishtest/tests/r01031.vtc
+++ /dev/null
@@ -1,30 +0,0 @@
-varnishtest "Test overflowing the response through sp->err_reason"
-
-varnish v1 -vcl {
- backend blatti {
- .host = "127.0.0.1";
- }
-
- sub vcl_recv {
- return (error(200,"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
- }
- sub vcl_error {
- return(deliver);
- }
-} -start
-
-client c1 {
- txreq -req GET
- rxresp
- expect resp.status == 200
- expect resp.msg == "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-} -run
-
-varnish v1 -cliok "param.set http_resp_size 256"
-
-client c2 {
- txreq -req GET
- rxresp
- expect resp.status == 200
- expect resp.msg == "Lost Response"
-} -run
diff --git a/bin/varnishtest/tests/r01283.vtc b/bin/varnishtest/tests/r01283.vtc
deleted file mode 100644
index 9b843ce..0000000
--- a/bin/varnishtest/tests/r01283.vtc
+++ /dev/null
@@ -1,48 +0,0 @@
-varnishtest "#1283 - Test failure to allocate object for error (transient full)"
-
-server s1 {
- rxreq
- txresp -bodylen 1048198
-} -start
-
-varnish v1 \
- -arg "-p nuke_limit=0" \
- -arg "-sTransient=malloc,1m" \
- -vcl+backend {
- sub vcl_recv {
- if (req.http.x-do-error) {
- return (error(500));
- }
- }
- sub vcl_backend_response {
- set beresp.do_stream = false;
- set beresp.storage_hint = "Transient";
- }
-} -start
-
-client c1 {
- # Fill transient
- txreq
- rxresp
- expect resp.status == 200
-} -run
-
-varnish v1 -expect SMA.Transient.g_bytes > 1048000
-varnish v1 -expect SMA.Transient.g_space < 200
-varnish v1 -expect SMA.Transient.c_fail == 0
-
-client c1 {
- # Trigger vcl_error. Don't wait for reply as Varnish will not send one
- # due to Transient full
- txreq -hdr "X-Do-Error: true"
- delay 1
-} -run
-
-varnish v1 -expect SMA.Transient.c_fail == 1
-
-client c1 {
- # Check that Varnish is still alive
- txreq
- rxresp
- expect resp.status == 200
-} -run
diff --git a/bin/varnishtest/tests/r01284.vtc b/bin/varnishtest/tests/r01284.vtc
index 123ddb2..f89b579 100644
--- a/bin/varnishtest/tests/r01284.vtc
+++ b/bin/varnishtest/tests/r01284.vtc
@@ -42,8 +42,8 @@ client c1 {
delay 1
} -run
-# Three failures, one for obj2, one for vcl_backend_error{} and for vcl_error{}
-varnish v1 -expect SMA.Transient.c_fail == 3
+# Three failures, one for obj2, one for vcl_backend_error{}
+varnish v1 -expect SMA.Transient.c_fail == 2
client c1 {
# Check that Varnish is still alive
diff --git a/bin/varnishtest/tests/r01287.vtc b/bin/varnishtest/tests/r01287.vtc
index fc1ebd2..7e329ac 100644
--- a/bin/varnishtest/tests/r01287.vtc
+++ b/bin/varnishtest/tests/r01287.vtc
@@ -8,7 +8,7 @@ varnish v1 -vcl+backend {
return (error(200, "OK"));
}
sub vcl_error {
- synthetic(obj.http.blank);
+ synthetic(resp.http.blank);
return (deliver);
}
} -start
diff --git a/bin/varnishtest/tests/v00011.vtc b/bin/varnishtest/tests/v00011.vtc
index 162c66a..3a3d842 100644
--- a/bin/varnishtest/tests/v00011.vtc
+++ b/bin/varnishtest/tests/v00011.vtc
@@ -52,6 +52,5 @@ logexpect l1 -wait
client c1 {
txreq
rxresp
- expect resp.http.X-Varnish == "1007"
-
+ expect resp.http.X-Varnish == "1006"
} -run
diff --git a/lib/libvcc/generate.py b/lib/libvcc/generate.py
index c3f26ff..48b0175 100755
--- a/lib/libvcc/generate.py
+++ b/lib/libvcc/generate.py
@@ -490,8 +490,8 @@ The client's IP address.
),
('obj.proto',
'STRING',
- ( 'hit', 'error',),
- ( 'hit', 'error',), """
+ ( 'hit', ),
+ ( 'hit', ), """
The HTTP protocol version used when the object was retrieved.
"""
),
@@ -520,30 +520,30 @@ The client's IP address.
),
('obj.http.',
'HEADER',
- ( 'hit', 'error',),
- ( 'error',), """
+ ( 'hit', ),
+ ( ), """
The corresponding HTTP header.
"""
),
('obj.ttl',
'DURATION',
- ( 'hit', 'error',),
- ( 'hit', 'error',), """
+ ( 'hit', ),
+ ( 'hit', ), """
The object's remaining time to live, in seconds.
obj.ttl is writable.
"""
),
('obj.grace',
'DURATION',
- ( 'hit', 'error',),
- ( 'hit', 'error',), """
+ ( 'hit', ),
+ ( 'hit', ), """
The object's grace period in seconds. obj.grace is writable.
"""
),
('obj.keep',
'DURATION',
- ( 'hit', 'error',),
- ( 'hit', 'error',), """
+ ( 'hit', ),
+ ( 'hit', ), """
"""
),
('obj.last_use',
@@ -557,35 +557,35 @@ The client's IP address.
),
('obj.uncacheable',
'BOOL',
- ( 'hit', 'deliver', 'error',),
+ ( 'hit', ),
( ), """
"""
),
('resp.proto',
'STRING',
- ( 'deliver',),
- ( 'deliver',), """
+ ( 'deliver', 'error', ),
+ ( 'deliver', 'error', ), """
The HTTP protocol version to use for the response.
"""
),
('resp.status',
'INT',
- ( 'deliver',),
- ( 'deliver',), """
+ ( 'deliver', 'error', ),
+ ( 'deliver', 'error', ), """
The HTTP status code that will be returned.
"""
),
('resp.reason',
'STRING',
- ( 'deliver',),
- ( 'deliver',), """
+ ( 'deliver', 'error', ),
+ ( 'deliver', 'error', ), """
The HTTP status message that will be returned.
"""
),
('resp.http.',
'HEADER',
- ( 'deliver',),
- ( 'deliver',), """
+ ( 'deliver', 'error', ),
+ ( 'deliver', 'error', ), """
The corresponding HTTP header.
"""
),
More information about the varnish-commit
mailing list