Commit 9da7a7bc authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Move Obj* API towards taking a struct worker as first argument.

parent faf9ba48
......@@ -729,7 +729,7 @@ struct busyobj *VBO_GetBusyObj(struct worker *, const struct req *);
void VBO_DerefBusyObj(struct worker *wrk, struct busyobj **busyobj);
void VBO_Free(struct busyobj **vbo);
void VBO_extend(struct busyobj *, ssize_t);
ssize_t VBO_waitlen(struct busyobj *, struct dstat *, ssize_t l);
ssize_t VBO_waitlen(struct worker *, struct busyobj *, ssize_t l);
void VBO_setstate(struct busyobj *bo, enum busyobj_state_e next);
void VBO_waitstate(struct busyobj *bo, enum busyobj_state_e want);
......@@ -978,14 +978,14 @@ enum objiter_status {
OIS_STREAM,
OIS_ERROR,
};
void *ObjIterBegin(struct objcore *, struct worker *);
void *ObjIterBegin(struct worker *, struct objcore *);
enum objiter_status ObjIter(struct objcore *, void *, void **, ssize_t *);
void ObjIterEnd(struct objcore *, void **);
int ObjGetSpace(struct objcore *, struct worker *, ssize_t *sz, uint8_t **ptr);
int ObjGetSpace(struct worker *, struct objcore *, ssize_t *sz, uint8_t **ptr);
void ObjExtend(struct objcore *, struct dstat *, ssize_t l);
void ObjTrimStore(struct objcore *, struct dstat *);
unsigned ObjGetXID(struct objcore *, struct dstat *);
uint64_t ObjGetLen(struct objcore *oc, struct dstat *ds);
void ObjTrimStore(struct worker *, struct objcore *);
unsigned ObjGetXID(struct worker *, struct objcore *);
uint64_t ObjGetLen(struct worker *, struct objcore *oc);
void ObjUpdateMeta(struct objcore *, struct dstat *);
void ObjFreeObj(struct objcore *, struct dstat *);
void ObjSlim(struct objcore *oc, struct dstat *ds);
......
......@@ -962,8 +962,7 @@ BAN_CheckObject(struct worker *wrk, struct objcore *oc, struct req *req)
return (0);
} else {
oc->ban = NULL;
VSLb(vsl, SLT_ExpBan, "%u banned lookup",
ObjGetXID(oc, wrk->stats));
VSLb(vsl, SLT_ExpBan, "%u banned lookup", ObjGetXID(wrk, oc));
VSC_C_main->bans_obj_killed++;
EXP_Rearm(oc, oc->exp.t_origin, 0, 0, 0); // XXX fake now
return (1);
......@@ -1096,7 +1095,7 @@ ban_lurker_test_ban(struct worker *wrk, struct vsl_log *vsl, struct ban *bt,
}
if (i) {
VSLb(vsl, SLT_ExpBan, "%u banned by lurker",
ObjGetXID(oc, wrk->stats));
ObjGetXID(wrk, oc));
EXP_Rearm(oc, oc->exp.t_origin, 0, 0, 0); // XXX fake now
VSC_C_main->bans_lurker_obj_killed++;
}
......
......@@ -230,20 +230,20 @@ VBO_extend(struct busyobj *bo, ssize_t l)
}
ssize_t
VBO_waitlen(struct busyobj *bo, struct dstat *ds, ssize_t l)
VBO_waitlen(struct worker *wrk, struct busyobj *bo, ssize_t l)
{
ssize_t rv;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
AN(ds);
Lck_Lock(&bo->mtx);
rv = ObjGetLen(bo->fetch_objcore, ds);
rv = ObjGetLen(wrk, bo->fetch_objcore);
while (1) {
assert(l <= rv || bo->state == BOS_FAILED);
if (rv > l || bo->state >= BOS_FINISHED)
break;
(void)Lck_CondWait(&bo->cond, &bo->mtx, 0);
rv = ObjGetLen(bo->fetch_objcore, ds);
rv = ObjGetLen(wrk, bo->fetch_objcore);
}
Lck_Unlock(&bo->mtx);
return (rv);
......
......@@ -309,7 +309,7 @@ ESI_Deliver(struct req *req)
AZ(dl);
}
oi = ObjIterBegin(req->objcore, req->wrk);
oi = ObjIterBegin(req->wrk, req->objcore);
ois = ObjIter(req->objcore, oi, &sp, &sl);
assert(ois != OIS_ERROR);
pp = sp;
......@@ -485,7 +485,7 @@ ESI_DeliverChild(struct req *req)
CHECK_OBJ_NOTNULL(req->objcore, OBJCORE_MAGIC);
if (!ObjCheckFlag(req->objcore, req->wrk->stats, OF_GZIPED)) {
oi = ObjIterBegin(req->objcore, req->wrk);
oi = ObjIterBegin(req->wrk, req->objcore);
do {
ois = ObjIter(req->objcore, oi, &sp, &sl);
if (sl > 0)
......@@ -506,7 +506,7 @@ ESI_DeliverChild(struct req *req)
start = vbe64dec(p);
last = vbe64dec(p + 8);
stop = vbe64dec(p + 16);
olen = ObjGetLen(req->objcore, req->wrk->stats);
olen = ObjGetLen(req->wrk, req->objcore);
assert(start > 0 && start < olen * 8);
assert(last > 0 && last < olen * 8);
assert(stop > 0 && stop < olen * 8);
......@@ -525,7 +525,7 @@ ESI_DeliverChild(struct req *req)
dbits = (void*)WS_Alloc(req->ws, 8);
AN(dbits);
ll = 0;
oi = ObjIterBegin(req->objcore, req->wrk);
oi = ObjIterBegin(req->wrk, req->objcore);
do {
ois = ObjIter(req->objcore, oi, &sp, &sl);
pp = sp;
......
......@@ -339,7 +339,7 @@ EXP_NukeOne(struct worker *wrk, struct lru *lru)
exp_mail_it(oc);
VSLb(wrk->vsl, SLT_ExpKill, "LRU x=%u", ObjGetXID(oc, wrk->stats));
VSLb(wrk->vsl, SLT_ExpKill, "LRU x=%u", ObjGetXID(wrk, oc));
(void)HSH_DerefObjCore(wrk, &oc);
return (1);
}
......@@ -463,8 +463,7 @@ exp_expire(struct exp_priv *ep, double now)
CHECK_OBJ_NOTNULL(oc->objhead, OBJHEAD_MAGIC);
VSLb(&ep->vsl, SLT_ExpKill, "EXP_Expired x=%u t=%.0f",
ObjGetXID(oc, ep->wrk->stats),
EXP_Ttl(NULL, &oc->exp) - now);
ObjGetXID(ep->wrk, oc), EXP_Ttl(NULL, &oc->exp) - now);
(void)HSH_DerefObjCore(ep->wrk, &oc);
return (0);
}
......
......@@ -497,7 +497,7 @@ vbf_fetch_body_helper(struct busyobj *bo)
VFP_Close(vfc);
if (!bo->do_stream)
ObjTrimStore(vfc->oc, bo->wrk->stats);
ObjTrimStore(bo->wrk, vfc->oc);
}
/*--------------------------------------------------------------------
......@@ -684,8 +684,8 @@ vbf_stp_condfetch(struct worker *wrk, struct busyobj *bo)
}
al = 0;
ol = ObjGetLen(bo->ims_oc, bo->wrk->stats);
oi = ObjIterBegin(bo->ims_oc, wrk);
ol = ObjGetLen(bo->wrk, bo->ims_oc);
oi = ObjIterBegin(wrk, bo->ims_oc);
do {
ois = ObjIter(bo->ims_oc, oi, &sp, &sl);
while (sl > 0) {
......@@ -709,7 +709,7 @@ vbf_stp_condfetch(struct worker *wrk, struct busyobj *bo)
HSH_Unbusy(wrk, bo->fetch_objcore);
assert(al == ol);
assert(ObjGetLen(bo->fetch_objcore, bo->wrk->stats) == al);
assert(ObjGetLen(bo->wrk, bo->fetch_objcore) == al);
EXP_Rearm(bo->ims_oc, bo->ims_oc->exp.t_origin, 0, 0, 0);
/* Recycle the backend connection before setting BOS_FINISHED to
......@@ -889,7 +889,7 @@ vbf_fetch_thread(struct worker *wrk, void *priv)
AZ(bo->fetch_objcore->flags & OC_F_FAILED);
HSH_Complete(bo->fetch_objcore);
VSLb(bo->vsl, SLT_Length, "%ju",
(uintmax_t)ObjGetLen(bo->fetch_objcore, bo->wrk->stats));
(uintmax_t)ObjGetLen(bo->wrk, bo->fetch_objcore));
}
AZ(bo->fetch_objcore->busyobj);
......
......@@ -89,7 +89,7 @@ VFP_GetStorage(struct vfp_ctx *vc, ssize_t *sz, uint8_t **ptr)
if (l == 0)
l = cache_param->fetch_chunksize;
*sz = l;
if (!ObjGetSpace(vc->oc, vc->wrk, sz, ptr)) {
if (!ObjGetSpace(vc->wrk, vc->oc, sz, ptr)) {
*sz = 0;
*ptr = NULL;
return (VFP_Error(vc, "Could not get storage"));
......
......@@ -97,9 +97,9 @@ v1d_dorange(struct req *req, struct busyobj *bo, const char *r)
/* We must snapshot the length if we're streaming from the backend */
if (bo != NULL)
len = VBO_waitlen(bo, req->wrk->stats, -1);
len = VBO_waitlen(req->wrk, bo, -1);
else
len = ObjGetLen(req->objcore, req->wrk->stats);
len = ObjGetLen(req->wrk, req->objcore);
if (strncmp(r, "bytes=", 6))
return;
......@@ -174,7 +174,7 @@ v1d_WriteDirObj(struct req *req)
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
oi = ObjIterBegin(req->objcore, req->wrk);
oi = ObjIterBegin(req->wrk, req->objcore);
XXXAN(oi);
do {
......@@ -252,11 +252,11 @@ V1D_Deliver(struct req *req, struct busyobj *bo)
/* XXX: Not happy with this convoluted test */
req->res_mode |= RES_LEN;
if (!(req->objcore->flags & OC_F_PASS) ||
ObjGetLen(req->objcore, req->wrk->stats) != 0) {
ObjGetLen(req->wrk, req->objcore) != 0) {
http_Unset(req->resp, H_Content_Length);
http_PrintfHeader(req->resp,
"Content-Length: %ju", (uintmax_t)ObjGetLen(
req->objcore, req->wrk->stats));
req->wrk, req->objcore));
}
}
......@@ -340,7 +340,7 @@ V1D_Deliver(struct req *req, struct busyobj *bo)
l = -1;
while (req->objcore->busyobj) {
assert(bo != NULL);
l = VBO_waitlen(bo, req->wrk->stats, l);
l = VBO_waitlen(req->wrk, bo, l);
}
ESI_DeliverChild(req);
} else if (req->res_mode & RES_GUNZIP ||
......
......@@ -94,14 +94,14 @@ struct objiter {
};
void *
ObjIterBegin(struct objcore *oc, struct worker *wrk)
ObjIterBegin(struct worker *wrk, struct objcore *oc)
{
struct objiter *oi;
struct object *obj;
const struct storeobj_methods *om = obj_getmethods(oc);
if (om->objiterbegin != NULL)
return (om->objiterbegin(oc, wrk));
return (om->objiterbegin(wrk, oc));
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
obj = obj_getobj(oc, wrk->stats);
......@@ -152,7 +152,7 @@ ObjIter(struct objcore *oc, void *oix, void **p, ssize_t *l)
} else {
ol = oi->len;
while (1) {
nl = VBO_waitlen(oi->bo, oi->wrk->stats, ol);
nl = VBO_waitlen(oi->wrk, oi->bo, ol);
if (nl != ol)
break;
if (oi->bo->state == BOS_FINISHED)
......@@ -251,14 +251,14 @@ objallocwithnuke(struct stevedore *stv, struct worker *wrk, size_t size)
*/
int
ObjGetSpace(struct objcore *oc, struct worker *wrk, ssize_t *sz, uint8_t **ptr)
ObjGetSpace(struct worker *wrk, struct objcore *oc, ssize_t *sz, uint8_t **ptr)
{
struct object *o;
struct storage *st;
const struct storeobj_methods *om = obj_getmethods(oc);
if (om->objgetspace != NULL)
return (om->objgetspace(oc, wrk, sz, ptr));
return (om->objgetspace(wrk, oc, sz, ptr));
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
......@@ -330,15 +330,15 @@ ObjExtend(struct objcore *oc, struct dstat *ds, ssize_t l)
*/
uint64_t
ObjGetLen(struct objcore *oc, struct dstat *ds)
ObjGetLen(struct worker *wrk, struct objcore *oc)
{
struct object *o;
const struct storeobj_methods *om = obj_getmethods(oc);
if (om->objgetlen != NULL)
return (om->objgetlen(oc, ds));
return (om->objgetlen(wrk, oc));
o = obj_getobj(oc, ds);
o = obj_getobj(oc, wrk->stats);
CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
return (o->len);
}
......@@ -352,7 +352,7 @@ ObjGetLen(struct objcore *oc, struct dstat *ds)
*/
void
ObjTrimStore(struct objcore *oc, struct dstat *ds)
ObjTrimStore(struct worker *wrk, struct objcore *oc)
{
const struct stevedore *stv;
struct storage *st;
......@@ -360,15 +360,15 @@ ObjTrimStore(struct objcore *oc, struct dstat *ds)
const struct storeobj_methods *om = obj_getmethods(oc);
if (om->objtrimstore != NULL) {
om->objtrimstore(oc, ds);
om->objtrimstore(wrk, oc);
return;
}
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
AN(ds);
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
stv = oc->stobj->stevedore;
CHECK_OBJ_NOTNULL(stv, STEVEDORE_MAGIC);
o = obj_getobj(oc, ds);
o = obj_getobj(oc, wrk->stats);
CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
st = VTAILQ_LAST(&o->list, storagehead);
if (st == NULL)
......@@ -601,11 +601,11 @@ ObjCopyAttr(const struct vfp_ctx *vc, struct objcore *ocs, enum obj_attr attr)
}
unsigned
ObjGetXID(struct objcore *oc, struct dstat *ds)
ObjGetXID(struct worker *wrk, struct objcore *oc)
{
uint32_t u;
AZ(ObjGetU32(oc, ds, OA_VXID, &u));
AZ(ObjGetU32(oc, wrk->stats, OA_VXID, &u));
return (u);
}
......
......@@ -62,7 +62,7 @@ VRB_Iterate(struct req *req, req_body_iter_f *func, void *priv)
switch(req->req_body_status) {
case REQ_BODY_CACHED:
oi = ObjIterBegin(req->body_oc, req->wrk);
oi = ObjIterBegin(req->wrk, req->body_oc);
AN(oi);
do {
ois = ObjIter(req->body_oc, oi, &p, &l);
......
......@@ -109,7 +109,7 @@ cnt_deliver(struct worker *wrk, struct req *req)
if (req->wrk->stats->cache_hit)
http_PrintfHeader(req->resp,
"X-Varnish: %u %u", VXID(req->vsl->wid),
ObjGetXID(req->objcore, wrk->stats));
ObjGetXID(wrk, req->objcore));
else
http_PrintfHeader(req->resp,
"X-Varnish: %u", VXID(req->vsl->wid));
......@@ -399,7 +399,7 @@ cnt_lookup(struct worker *wrk, struct req *req)
/* Found a hit-for-pass */
VSLb(req->vsl, SLT_Debug, "XXXX HIT-FOR-PASS");
VSLb(req->vsl, SLT_HitPass, "%u",
ObjGetXID(req->objcore, wrk->stats));
ObjGetXID(wrk, req->objcore));
AZ(boc);
(void)HSH_DerefObjCore(wrk, &req->objcore);
wrk->stats->cache_hitpass++;
......@@ -407,8 +407,7 @@ cnt_lookup(struct worker *wrk, struct req *req)
return (REQ_FSM_MORE);
}
VSLb(req->vsl, SLT_Hit, "%u",
ObjGetXID(req->objcore, wrk->stats));
VSLb(req->vsl, SLT_Hit, "%u", ObjGetXID(wrk, req->objcore));
VCL_hit_method(req->vcl, wrk, req, NULL, req->http->ws);
......
......@@ -95,20 +95,20 @@ typedef struct object *getobj_f(struct objcore *oc, struct dstat *);
* Or the can be "complex" and provide all of these methods:
* (Described in comments in cache_obj.c)
*/
typedef void *objiterbegin_f(struct objcore *oc, struct worker *wrk);
typedef void *objiterbegin_f(struct worker *, struct objcore *oc);
typedef enum objiter_status objiter_f(struct objcore *oc, void *oix,
void **p, ssize_t *l);
typedef void objiterend_f(struct objcore *oc, void **oix);
typedef int objgetspace_f(struct objcore *oc, struct worker *,
typedef void objiterend_f(struct objcore *, void **oix);
typedef int objgetspace_f(struct worker *, struct objcore *,
ssize_t *sz, uint8_t **ptr);
typedef void objextend_f(struct objcore *oc, struct dstat *ds, ssize_t l);
typedef void objtrimstore_f(struct objcore *oc, struct dstat *ds);
typedef void objslim_f(struct objcore *oc, struct dstat *ds);
typedef void *objgetattr_f(struct objcore *oc, struct dstat *ds,
typedef void objextend_f(struct objcore *, struct dstat *ds, ssize_t l);
typedef void objtrimstore_f(struct worker *, struct objcore *);
typedef void objslim_f(struct objcore *, struct dstat *ds);
typedef void *objgetattr_f(struct objcore *, struct dstat *ds,
enum obj_attr attr, ssize_t *len);
typedef void *objsetattr_f(const struct vfp_ctx *vc, enum obj_attr attr,
typedef void *objsetattr_f(const struct vfp_ctx *, enum obj_attr attr,
ssize_t len, const void *ptr);
typedef uint64_t objgetlen_f(struct objcore *oc, struct dstat *ds);
typedef uint64_t objgetlen_f(struct worker *, struct objcore *);
struct storeobj_methods {
freeobj_f *freeobj;
......
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