Commit 2f054422 authored by Guillaume Quintard's avatar Guillaume Quintard

Let remove_backend tell if the current dir changed

parent 9c4e8c8d
......@@ -123,7 +123,7 @@ vmod_fallback_remove_backend(VRT_CTX,
{
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(fb, VMOD_DIRECTORS_FALLBACK_MAGIC);
vdir_remove_backend(fb->vd, be);
vdir_remove_backend(fb->vd, be, NULL);
}
VCL_BACKEND __match_proto__()
......
......@@ -91,7 +91,7 @@ vmod_hash_remove_backend(VRT_CTX,
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(rr, VMOD_DIRECTORS_HASH_MAGIC);
vdir_remove_backend(rr->vd, be);
vdir_remove_backend(rr->vd, be, NULL);
}
VCL_BACKEND __match_proto__()
......
......@@ -118,7 +118,7 @@ VCL_VOID vmod_random_remove_backend(VRT_CTX,
{
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(rr, VMOD_DIRECTORS_RANDOM_MAGIC);
vdir_remove_backend(rr->vd, be);
vdir_remove_backend(rr->vd, be, NULL);
}
VCL_BACKEND __match_proto__()
......
......@@ -127,7 +127,7 @@ vmod_round_robin_remove_backend(VRT_CTX,
{
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(rr, VMOD_DIRECTORS_ROUND_ROBIN_MAGIC);
vdir_remove_backend(rr->vd, be);
vdir_remove_backend(rr->vd, be, NULL);
}
VCL_BACKEND __match_proto__()
......
......@@ -134,7 +134,7 @@ vdir_add_backend(struct vdir *vd, VCL_BACKEND be, double weight)
}
void
vdir_remove_backend(struct vdir *vd, VCL_BACKEND be)
vdir_remove_backend(struct vdir *vd, VCL_BACKEND be, unsigned *cur)
{
unsigned u, n;
......@@ -155,6 +155,15 @@ vdir_remove_backend(struct vdir *vd, VCL_BACKEND be)
memmove(&vd->backend[u], &vd->backend[u+1], n * sizeof(vd->backend[0]));
memmove(&vd->weight[u], &vd->weight[u+1], n * sizeof(vd->weight[0]));
vd->n_backend--;
if (cur) {
assert(*cur >= 0);
assert(*cur <= vd->n_backend);
if (u < *cur)
(*cur)--;
else if (*cur == vd->n_backend)
*cur = 0;
}
vdir_unlock(vd);
}
......
......@@ -48,7 +48,7 @@ void vdir_rdlock(struct vdir *vd);
void vdir_wrlock(struct vdir *vd);
void vdir_unlock(struct vdir *vd);
unsigned vdir_add_backend(struct vdir *, VCL_BACKEND be, double weight);
void vdir_remove_backend(struct vdir *, VCL_BACKEND be);
void vdir_remove_backend(struct vdir *, VCL_BACKEND be, unsigned *cur);
unsigned vdir_any_healthy(struct vdir *, const struct busyobj *,
double *changed);
VCL_BACKEND vdir_pick_be(struct vdir *, double w, const struct busyobj *);
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