[master] 71f2b38 Remove obj->http.
Poul-Henning Kamp
phk at FreeBSD.org
Tue Aug 19 00:33:42 CEST 2014
commit 71f2b383b443d2745e92fdb6b80374f858876fb4
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Mon Aug 18 22:33:00 2014 +0000
Remove obj->http.
This shaves approx 100 bytes of stored objects, and is a major step
to avoiding storing absolute pointers in persistent stevedores.
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 44dea14..66a21d5 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -576,8 +576,6 @@ struct object {
/* VCL only variables */
char oa_lastmodified[8];
- struct http *http;
-
struct body body[1];
struct storage *esidata;
@@ -945,7 +943,7 @@ unsigned HTTP_estimate(unsigned nhttp);
void HTTP_Copy(struct http *to, const struct http * const fm);
struct http *HTTP_create(void *p, uint16_t nhttp);
const char *http_Status2Reason(unsigned);
-unsigned http_EstimateWS(const struct http *fm, unsigned how, uint16_t *nhd);
+unsigned http_EstimateWS(const struct http *fm, unsigned how);
void HTTP_Init(void);
void http_PutResponse(struct http *to, const char *proto, uint16_t status,
const char *response);
@@ -1241,8 +1239,7 @@ void RFC2616_Weaken_Etag(struct http *hp);
/* stevedore.c */
-struct object *STV_NewObject(struct busyobj *,
- const char *hint, unsigned len, uint16_t nhttp);
+struct object *STV_NewObject(struct busyobj *, const char *hint, unsigned len);
struct storage *STV_alloc(const struct vfp_ctx *, size_t size);
void STV_trim(struct storage *st, size_t size, int move_ok);
void STV_free(struct storage *st);
diff --git a/bin/varnishd/cache/cache_fetch.c b/bin/varnishd/cache/cache_fetch.c
index 5495af2..b3adfa1 100644
--- a/bin/varnishd/cache/cache_fetch.c
+++ b/bin/varnishd/cache/cache_fetch.c
@@ -47,7 +47,7 @@
*/
static struct object *
-vbf_allocobj(struct busyobj *bo, unsigned l, uint16_t nhttp)
+vbf_allocobj(struct busyobj *bo, unsigned l)
{
struct object *obj;
struct objcore *oc;
@@ -67,7 +67,7 @@ vbf_allocobj(struct busyobj *bo, unsigned l, uint16_t nhttp)
bo->storage_hint = NULL;
- obj = STV_NewObject(bo, storage_hint, l, nhttp);
+ obj = STV_NewObject(bo, storage_hint, l);
if (obj != NULL)
return (obj);
@@ -84,7 +84,7 @@ vbf_allocobj(struct busyobj *bo, unsigned l, uint16_t nhttp)
oc->exp.ttl = cache_param->shortlived;
oc->exp.grace = 0.0;
oc->exp.keep = 0.0;
- obj = STV_NewObject(bo, TRANSIENT_STORAGE, l, nhttp);
+ obj = STV_NewObject(bo, TRANSIENT_STORAGE, l);
return (obj);
}
@@ -99,7 +99,6 @@ vbf_beresp2obj(struct busyobj *bo)
char *b;
struct vsb *vary = NULL;
int varyl = 0;
- uint16_t nhttp;
struct object *obj;
l = 0;
@@ -127,12 +126,12 @@ vbf_beresp2obj(struct busyobj *bo)
}
l += http_EstimateWS(bo->beresp,
- bo->uncacheable ? HTTPH_R_PASS : HTTPH_A_INS, &nhttp);
+ bo->uncacheable ? HTTPH_R_PASS : HTTPH_A_INS);
if (bo->uncacheable)
bo->fetch_objcore->flags |= OC_F_PASS;
- obj = vbf_allocobj(bo, l, nhttp);
+ obj = vbf_allocobj(bo, l);
if (obj == NULL)
return (-1);
diff --git a/bin/varnishd/cache/cache_http.c b/bin/varnishd/cache/cache_http.c
index 75b0617..592d042 100644
--- a/bin/varnishd/cache/cache_http.c
+++ b/bin/varnishd/cache/cache_http.c
@@ -610,12 +610,11 @@ http_PutResponse(struct http *to, const char *proto, uint16_t status,
*/
unsigned
-http_EstimateWS(const struct http *fm, unsigned how, uint16_t *nhd)
+http_EstimateWS(const struct http *fm, unsigned how)
{
unsigned u, l;
l = 4;
- *nhd = 1 + HTTP_HDR_FIRST - 3;
CHECK_OBJ_NOTNULL(fm, HTTP_MAGIC);
for (u = 0; u < fm->nhd; u++) {
if (u == HTTP_HDR_METHOD || u == HTTP_HDR_URL)
@@ -630,7 +629,6 @@ http_EstimateWS(const struct http *fm, unsigned how, uint16_t *nhd)
#include "tbl/http_headers.h"
#undef HTTPH
l += Tlen(fm->hd[u]) + 1L;
- (*nhd)++;
}
return (PRNDUP(l + 1L));
}
diff --git a/bin/varnishd/cache/cache_obj.c b/bin/varnishd/cache/cache_obj.c
index 158fedb..d7312e3 100644
--- a/bin/varnishd/cache/cache_obj.c
+++ b/bin/varnishd/cache/cache_obj.c
@@ -317,7 +317,7 @@ ObjSetattr(const struct vfp_ctx *vc, enum obj_attr attr,
assert(len == sizeof o->oa_lastmodified);
return (o->oa_lastmodified);
case OA_VARY:
- o->oa_vary = (void*)WS_Alloc(o->http->ws, len);
+ o->oa_vary = (void*)WS_Alloc(vc->bo->ws_o, len);
AN(o->oa_vary);
return (o->oa_vary);
case OA_VXID:
diff --git a/bin/varnishd/storage/stevedore.c b/bin/varnishd/storage/stevedore.c
index adbe556..d11f306 100644
--- a/bin/varnishd/storage/stevedore.c
+++ b/bin/varnishd/storage/stevedore.c
@@ -229,8 +229,6 @@ stv_alloc_obj(const struct vfp_ctx *vc, size_t size)
struct stv_objsecrets {
unsigned magic;
#define STV_OBJ_SECRETES_MAGIC 0x78c87247
- uint16_t nhttp;
- unsigned lhttp;
unsigned wsl;
};
@@ -256,24 +254,20 @@ STV_MkObject(struct stevedore *stv, struct busyobj *bo,
assert(PAOK(ptr));
assert(PAOK(soc->wsl));
- assert(PAOK(soc->lhttp));
- assert(ltot >= sizeof *o + soc->lhttp + soc->wsl);
+ assert(ltot >= sizeof *o + soc->wsl);
o = ptr;
memset(o, 0, sizeof *o);
o->magic = OBJECT_MAGIC;
- l = PRNDDN(ltot - (sizeof *o + soc->lhttp));
+ l = PRNDDN(ltot - sizeof *o);
assert(l >= soc->wsl);
- o->http = HTTP_create(o + 1, soc->nhttp);
- WS_Init(bo->ws_o, "obj", (char *)(o + 1) + soc->lhttp, soc->wsl);
+ WS_Init(bo->ws_o, "obj", o + 1, l);
WS_Assert(bo->ws_o);
assert(bo->ws_o->e <= (char*)ptr + ltot);
- HTTP_Setup(o->http, bo->ws_o, bo->vsl, SLT_ObjMethod);
- o->http->magic = HTTP_MAGIC;
VTAILQ_INIT(&o->body->list);
o->objcore = bo->fetch_objcore;
@@ -323,12 +317,11 @@ stv_default_allocobj(struct stevedore *stv, struct busyobj *bo,
*/
struct object *
-STV_NewObject(struct busyobj *bo, const char *hint,
- unsigned wsl, uint16_t nhttp)
+STV_NewObject(struct busyobj *bo, const char *hint, unsigned wsl)
{
struct object *o;
struct stevedore *stv, *stv0;
- unsigned lhttp, ltot;
+ unsigned ltot;
struct stv_objsecrets soc;
int i;
@@ -337,16 +330,11 @@ STV_NewObject(struct busyobj *bo, const char *hint,
assert(wsl > 0);
wsl = PRNDUP(wsl);
- lhttp = HTTP_estimate(nhttp);
- lhttp = PRNDUP(lhttp);
-
memset(&soc, 0, sizeof soc);
soc.magic = STV_OBJ_SECRETES_MAGIC;
- soc.nhttp = nhttp;
- soc.lhttp = lhttp;
soc.wsl = wsl;
- ltot = sizeof *o + wsl + lhttp;
+ ltot = sizeof *o + wsl;
stv = stv0 = stv_pick_stevedore(bo->vsl, &hint);
AN(stv->allocobj);
diff --git a/bin/varnishtest/tests/c00044.vtc b/bin/varnishtest/tests/c00044.vtc
index 587bf38..1519ff5 100644
--- a/bin/varnishtest/tests/c00044.vtc
+++ b/bin/varnishtest/tests/c00044.vtc
@@ -2,19 +2,19 @@ varnishtest "Object/LRU/Stevedores"
server s1 {
rxreq
- txresp -bodylen 1048190
+ txresp -bodylen 1048290
rxreq
- txresp -bodylen 1048191
+ txresp -bodylen 1048291
rxreq
- txresp -bodylen 1048192
+ txresp -bodylen 1048292
rxreq
- txresp -bodylen 1047193
+ txresp -bodylen 1047293
rxreq
- txresp -bodylen 1047194
+ txresp -bodylen 1047294
} -start
varnish v1 \
@@ -35,7 +35,7 @@ client c1 {
txreq -url /foo
rxresp
expect resp.status == 200
- expect resp.bodylen == 1048190
+ expect resp.bodylen == 1048290
} -run
varnish v1 -expect SMA.Transient.g_bytes == 0
@@ -50,7 +50,7 @@ client c1 {
txreq -url /bar
rxresp
expect resp.status == 200
- expect resp.bodylen == 1048191
+ expect resp.bodylen == 1048291
} -run
varnish v1 -expect SMA.Transient.g_bytes == 0
@@ -65,7 +65,7 @@ client c1 {
txreq -url /burp
rxresp
expect resp.status == 200
- expect resp.bodylen == 1048192
+ expect resp.bodylen == 1048292
} -run
varnish v1 -expect SMA.Transient.g_bytes == 0
@@ -80,7 +80,7 @@ client c1 {
txreq -url /foo1
rxresp
expect resp.status == 200
- expect resp.bodylen == 1047193
+ expect resp.bodylen == 1047293
} -run
varnish v1 -expect n_lru_nuked == 1
@@ -89,7 +89,7 @@ client c1 {
txreq -url /foo
rxresp
expect resp.status == 200
- expect resp.bodylen == 1047194
+ expect resp.bodylen == 1047294
} -run
varnish v1 -expect n_lru_nuked == 2
diff --git a/bin/varnishtest/tests/c00045.vtc b/bin/varnishtest/tests/c00045.vtc
index 77425cb..57eef39 100644
--- a/bin/varnishtest/tests/c00045.vtc
+++ b/bin/varnishtest/tests/c00045.vtc
@@ -2,11 +2,11 @@ varnishtest "Object/LRU/Stevedores with hinting"
server s1 {
rxreq
- txresp -bodylen 1048188
+ txresp -bodylen 1048288
rxreq
- txresp -bodylen 1047189
+ txresp -bodylen 1047289
rxreq
- txresp -bodylen 1047190
+ txresp -bodylen 1047290
} -start
varnish v1 \
@@ -27,7 +27,7 @@ client c1 {
txreq -url /foo
rxresp
expect resp.status == 200
- expect resp.bodylen == 1048188
+ expect resp.bodylen == 1048288
} -run
varnish v1 -expect SMA.Transient.g_bytes == 0
@@ -42,7 +42,7 @@ client c1 {
txreq -url /bar
rxresp
expect resp.status == 200
- expect resp.bodylen == 1047189
+ expect resp.bodylen == 1047289
} -run
varnish v1 -expect n_lru_nuked == 1
@@ -58,7 +58,7 @@ client c1 {
txreq -url /foo
rxresp
expect resp.status == 200
- expect resp.bodylen == 1047190
+ expect resp.bodylen == 1047290
} -run
varnish v1 -expect n_lru_nuked == 2
diff --git a/bin/varnishtest/tests/r01140.vtc b/bin/varnishtest/tests/r01140.vtc
index 11e2a72..da71446 100644
--- a/bin/varnishtest/tests/r01140.vtc
+++ b/bin/varnishtest/tests/r01140.vtc
@@ -4,7 +4,7 @@ server s1 {
# This response should almost completely fill the storage
rxreq
expect req.url == /url1
- txresp -bodylen 1048208
+ txresp -bodylen 1048308
# The next one should not fit in the storage, ending up in transient
# with zero ttl (=shortlived)
@@ -31,7 +31,7 @@ client c1 {
txreq -url /url1
rxresp
expect resp.status == 200
- expect resp.bodylen == 1048208
+ expect resp.bodylen == 1048308
} -run
delay .1
diff --git a/bin/varnishtest/tests/r01284.vtc b/bin/varnishtest/tests/r01284.vtc
index dc6336f..d613ab8 100644
--- a/bin/varnishtest/tests/r01284.vtc
+++ b/bin/varnishtest/tests/r01284.vtc
@@ -3,7 +3,7 @@ varnishtest "#1284 - Test resource cleanup after STV_NewObject fail in fetch"
server s1 {
rxreq
expect req.url == "/obj1"
- txresp -bodylen 1048190
+ txresp -bodylen 1048290
rxreq
expect req.url == "/obj2"
txresp -hdr "Long: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" -hdr "Long2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
More information about the varnish-commit
mailing list