Skip to content

Commit

Permalink
move logic of VDI_Resolve() to VRT as VRT_DirectorResolve()
Browse files Browse the repository at this point in the history
VDI_Resolve() remains for error handling for calls from VDI_GetHdr()
and VDI_Http1Pipe()
  • Loading branch information
nigoroll committed Jun 10, 2018
1 parent b34a132 commit 0460391
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 17 deletions.
31 changes: 14 additions & 17 deletions bin/varnishd/cache/cache_director.c
Expand Up @@ -78,28 +78,25 @@ VDI_Ahealth(const struct director *d)
static VCL_BACKEND
VDI_Resolve(VRT_CTX)
{
const struct director *d;
const struct director *d2;
VCL_BACKEND d;
struct busyobj *bo;

CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
bo = ctx->bo;
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
CHECK_OBJ_ORNULL(bo->director_req, DIRECTOR_MAGIC);

for (d = bo->director_req; d != NULL &&
d->vdir->methods->resolve != NULL; d = d2) {
CHECK_OBJ_NOTNULL(d, DIRECTOR_MAGIC);
AN(d->vdir);
d2 = d->vdir->methods->resolve(ctx, d);
if (d2 == NULL)
VSLb(bo->vsl, SLT_FetchError,
"Director %s returned no backend", d->vcl_name);
}
CHECK_OBJ_ORNULL(d, DIRECTOR_MAGIC);
if (d == NULL)

if (bo->director_req == NULL) {
VSLb(bo->vsl, SLT_FetchError, "No backend");
else
AN(d->vdir);
return (NULL);
}

d = VRT_DirectorResolve(ctx, bo->director_req);
if (d == NULL) {
VSLb(bo->vsl, SLT_FetchError,
"Director %s returned no backend",
bo->director_req->vcl_name);
return (NULL);
}
return (d);
}

Expand Down
18 changes: 18 additions & 0 deletions bin/varnishd/cache/cache_vcl_vrt.c
Expand Up @@ -247,6 +247,24 @@ VRT_DisableDirector(VCL_BACKEND d)

/*--------------------------------------------------------------------*/

VCL_BACKEND
VRT_DirectorResolve(VRT_CTX, VCL_BACKEND d)
{
VCL_BACKEND d2;

for (; d != NULL && d->vdir->methods->resolve != NULL; d = d2) {
CHECK_OBJ_NOTNULL(d, DIRECTOR_MAGIC);
AN(d->vdir);
d2 = d->vdir->methods->resolve(ctx, d);
}
CHECK_OBJ_ORNULL(d, DIRECTOR_MAGIC);
if (d != NULL)
AN(d->vdir);
return (d);
}

/*--------------------------------------------------------------------*/

VCL_BACKEND
VCL_DefaultDirector(const struct vcl *vcl)
{
Expand Down
1 change: 1 addition & 0 deletions include/vrt.h
Expand Up @@ -461,6 +461,7 @@ VCL_BACKEND VRT_AddDirector(VRT_CTX, const struct vdi_methods *,
void VRT_SetHealth(VCL_BACKEND d, int health);
void VRT_DisableDirector(VCL_BACKEND);
void VRT_DelDirector(VCL_BACKEND *);
VCL_BACKEND VRT_DirectorResolve(VRT_CTX, VCL_BACKEND);

/* Suckaddr related */
int VRT_VSA_GetPtr(const struct suckaddr *sua, const unsigned char ** dst);
Expand Down

0 comments on commit 0460391

Please sign in to comment.