Commit 01f0e719 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Directors are allowed to fail to pick a backend.

Fixes	#1501
parent 75802e27
...@@ -181,7 +181,6 @@ vbf_stp_mkbereq(const struct worker *wrk, struct busyobj *bo) ...@@ -181,7 +181,6 @@ vbf_stp_mkbereq(const struct worker *wrk, struct busyobj *bo)
CHECK_OBJ_NOTNULL(bo->req, REQ_MAGIC); CHECK_OBJ_NOTNULL(bo->req, REQ_MAGIC);
assert(bo->state == BOS_INVALID); assert(bo->state == BOS_INVALID);
AN(bo->director);
AZ(bo->vbc); AZ(bo->vbc);
AZ(bo->should_close); AZ(bo->should_close);
AZ(bo->storage_hint); AZ(bo->storage_hint);
...@@ -255,7 +254,6 @@ vbf_stp_startfetch(struct worker *wrk, struct busyobj *bo) ...@@ -255,7 +254,6 @@ vbf_stp_startfetch(struct worker *wrk, struct busyobj *bo)
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC); CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
AN(bo->director);
AZ(bo->vbc); AZ(bo->vbc);
AZ(bo->should_close); AZ(bo->should_close);
AZ(bo->storage_hint); AZ(bo->storage_hint);
......
...@@ -300,6 +300,10 @@ V1F_fetch_hdr(struct worker *wrk, struct busyobj *bo, struct req *req) ...@@ -300,6 +300,10 @@ V1F_fetch_hdr(struct worker *wrk, struct busyobj *bo, struct req *req)
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC); CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
htc = &bo->htc; htc = &bo->htc;
if (bo->director == NULL) {
VSLb(bo->vsl, SLT_FetchError, "No backend");
return (-1);
}
AN(bo->director); AN(bo->director);
hp = bo->bereq; hp = bo->bereq;
......
...@@ -270,9 +270,8 @@ VRT_r_beresp_backend_name(const struct vrt_ctx *ctx) ...@@ -270,9 +270,8 @@ VRT_r_beresp_backend_name(const struct vrt_ctx *ctx)
CHECK_OBJ_NOTNULL(ctx->bo->vbc, VBC_MAGIC); CHECK_OBJ_NOTNULL(ctx->bo->vbc, VBC_MAGIC);
return (ctx->bo->vbc->backend->vcl_name); return (ctx->bo->vbc->backend->vcl_name);
} }
if (ctx->bo->director != NULL) { if (ctx->bo->director != NULL)
return (ctx->bo->director->vcl_name); return (ctx->bo->director->vcl_name);
}
return (NULL); return (NULL);
} }
...@@ -350,7 +349,6 @@ VRT_l_bereq_backend(const struct vrt_ctx *ctx, struct director *be) ...@@ -350,7 +349,6 @@ VRT_l_bereq_backend(const struct vrt_ctx *ctx, struct director *be)
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(ctx->bo, BUSYOBJ_MAGIC); CHECK_OBJ_NOTNULL(ctx->bo, BUSYOBJ_MAGIC);
AN(ctx->bo->director);
ctx->bo->director = be; ctx->bo->director = be;
} }
...@@ -360,7 +358,6 @@ VRT_r_bereq_backend(const struct vrt_ctx *ctx) ...@@ -360,7 +358,6 @@ VRT_r_bereq_backend(const struct vrt_ctx *ctx)
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(ctx->bo, BUSYOBJ_MAGIC); CHECK_OBJ_NOTNULL(ctx->bo, BUSYOBJ_MAGIC);
AN(ctx->bo->director);
return (ctx->bo->director); return (ctx->bo->director);
} }
......
varnishtest "director fails to pick backend"
server s1 {
rxreq
txresp
} -start
varnish v1 -vcl+backend {
import ${vmod_debug};
sub vcl_recv {
set req.backend_hint = debug.no_backend();
}
} -start
client c1 {
txreq
rxresp
expect resp.status == 503
} -run
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