From 136dde5f9f218fb7edefd3c4cab4df10b21672c1 Mon Sep 17 00:00:00 2001 From: Nils Goroll Date: Wed, 13 May 2020 18:16:59 +0200 Subject: [PATCH] Diffentiate "no backend" from "none resolved" in VDI_Resolve() recover a minor improvement from #2680: This commit is to emit slightly different error messages to differentiate between the cases "no backend set in vcl" and "none returned from the director". Includes minor polishing Ref #2860 #3311 --- bin/varnishd/cache/cache_director.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/bin/varnishd/cache/cache_director.c b/bin/varnishd/cache/cache_director.c index 3e6902031b..1aa4388d53 100644 --- a/bin/varnishd/cache/cache_director.c +++ b/bin/varnishd/cache/cache_director.c @@ -103,24 +103,26 @@ VRT_VDI_Resolve(VRT_CTX, VCL_BACKEND d) static VCL_BACKEND VDI_Resolve(VRT_CTX) { - const struct director *d; + 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); - d = VRT_VDI_Resolve(ctx, bo->director_req); - CHECK_OBJ_ORNULL(d, DIRECTOR_MAGIC); - if (d == NULL) { - VSLb(bo->vsl, SLT_FetchError, "No backend"); - } else { - AN(d->vdir); - if (d->vdir->admin_health->health == 0) - d = NULL; + if (bo->director_req == NULL) { + VSLb(bo->vsl, SLT_FetchError, "No backend"); + return (NULL); } - return (d); + CHECK_OBJ(bo->director_req, DIRECTOR_MAGIC); + d = VRT_VDI_Resolve(ctx, bo->director_req); + if (d != NULL) + return (d); + + VSLb(bo->vsl, SLT_FetchError, + "Director %s returned no backend", bo->director_req->vcl_name); + return (NULL); } /* Get a set of response headers -------------------------------------*/