Commit d60d80d3 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Move responsibility for discarding backend probes.

parent 97adb56b
......@@ -101,25 +101,6 @@ VBE_UseHealth(const struct director *vdi)
VBP_Use(vs->backend, vs->vrt->probe);
}
/*--------------------------------------------------------------------
*
*/
void
VBE_DiscardHealth(const struct director *vdi)
{
struct vbe_dir *vs;
ASSERT_CLI();
if (strcmp(vdi->name, "simple"))
return;
CAST_OBJ_NOTNULL(vs, vdi->priv, VDI_SIMPLE_MAGIC);
if (vs->vrt->probe == NULL)
return;
VBP_Remove(vs->backend, vs->vrt->probe);
}
/*--------------------------------------------------------------------
* Get a connection to the backend
*/
......@@ -294,39 +275,49 @@ vbe_dir_getbody(const struct director *d, struct worker *wrk,
/*--------------------------------------------------------------------*/
static void
vbe_dir_http1pipe(const struct director *d, struct req *req, struct busyobj *bo)
{
int i;
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
i = vbe_dir_getfd(d, bo);
V1P_Process(req, bo, i);
vbe_dir_finish(d, bo->wrk, bo);
}
/*--------------------------------------------------------------------*/
void
VRT_fini_vbe(VRT_CTX, struct director *d)
VRT_fini_vbe(VRT_CTX, struct director **dp, const struct vrt_backend *vrt)
{
struct vbe_dir *vs;
struct director *d;
ASSERT_CLI();
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
AN(dp);
(void)vrt;
d = *dp;
*dp = NULL;
CHECK_OBJ_NOTNULL(d, DIRECTOR_MAGIC);
CAST_OBJ_NOTNULL(vs, d->priv, VDI_SIMPLE_MAGIC);
if (vs->vrt->probe != NULL)
VBP_Remove(vs->backend, vs->vrt->probe);
VBE_DropRefVcl(vs->backend);
free(vs->dir.vcl_name);
vs->dir.magic = 0;
FREE_OBJ(vs);
d->priv = NULL;
}
static void
vbe_dir_http1pipe(const struct director *d, struct req *req, struct busyobj *bo)
{
int i;
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
i = vbe_dir_getfd(d, bo);
V1P_Process(req, bo, i);
vbe_dir_finish(d, bo->wrk, bo);
}
void
VRT_init_vbe(VRT_CTX, struct director **bp, int idx,
const struct vrt_backend *vrt)
VRT_init_vbe(VRT_CTX, struct director **bp, const struct vrt_backend *vrt)
{
struct vbe_dir *vs;
......@@ -351,5 +342,5 @@ VRT_init_vbe(VRT_CTX, struct director **bp, int idx,
if (vs->vrt->probe != NULL)
VBP_Insert(vs->backend, vs->vrt->probe, vs->vrt->hosthdr);
bp[idx] = &vs->dir;
* bp = &vs->dir;
}
......@@ -98,7 +98,6 @@ struct vbc {
/* cache_backend.c */
void VBE_UseHealth(const struct director *vdi);
void VBE_DiscardHealth(const struct director *vdi);
/* cache_backend_cfg.c */
void VBE_DropRefConn(struct backend *, const struct acct_bereq *);
......
......@@ -330,7 +330,6 @@ static void
ccf_config_discard(struct cli *cli, const char * const *av, void *priv)
{
struct vcls *vcl;
int i;
ASSERT_CLI();
AZ(priv);
......@@ -353,10 +352,6 @@ ccf_config_discard(struct cli *cli, const char * const *av, void *priv)
vcl->conf->discard = 1;
Lck_Unlock(&vcl_mtx);
/* Tickle this VCL's backends to give up health polling */
for(i = 1; i < vcl->conf->ndirector; i++)
VBE_DiscardHealth(vcl->conf->director[i]);
if (vcl->conf->busy == 0)
VCL_Nuke(vcl);
}
......
......@@ -225,8 +225,8 @@ void VRT_Rollback(VRT_CTX, const struct http *);
void VRT_synth_page(VRT_CTX, const char *, ...);
/* Backend related */
void VRT_init_vbe(VRT_CTX, struct director **, int idx, const struct vrt_backend *);
void VRT_fini_vbe(VRT_CTX, struct director *);
void VRT_init_vbe(VRT_CTX, struct director **, const struct vrt_backend *);
void VRT_fini_vbe(VRT_CTX, struct director **, const struct vrt_backend *);
/* Suckaddr related */
int VRT_VSA_GetPtr(const struct suckaddr *sua, const unsigned char ** dst);
......
......@@ -423,9 +423,11 @@ vcc_ParseHostDef(struct vcc *tl, const struct token *t_be)
ifp = New_IniFin(tl);
VSB_printf(ifp->ini,
"\tVRT_init_vbe(ctx, VCL_conf.director,\n"
"\t VGC_backend_%s, &vgc_dir_priv_%s);", vgcname, vgcname);
VSB_printf(ifp->fin, "\tVRT_fini_vbe(ctx, VGCDIR(%s));", vgcname);
"\tVRT_init_vbe(ctx, &VGCDIR(%s), &vgc_dir_priv_%s);",
vgcname, vgcname);
VSB_printf(ifp->fin,
"\tVRT_fini_vbe(ctx, &VGCDIR(%s), &vgc_dir_priv_%s);",
vgcname, vgcname);
tl->ndirector++;
}
......
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