Commit 1113031f authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Shuffle code from backend to director level

parent c8576564
......@@ -485,12 +485,17 @@ VRT_new_backend_clustered(VRT_CTX, struct vsmw_cluster *vc,
d = be->director;
INIT_OBJ(d, DIRECTOR_MAGIC);
d->priv = be;
d->vcl_name = be->vcl_name;
d->methods = vbe_methods;
d->health = 1;
d->health_changed = VTIM_real();
d->admin_health = VDI_AH_PROBE;
be->vsc = VSC_vbe_New(vc, &be->vsc_seg,
"%s.%s", VCL_Name(ctx->vcl), vrt->vcl_name);
AN(be->vsc);
retval = VRT_AddDirector(ctx, d, "%s", vrt->vcl_name);
if (retval) {
VRT_delete_backend(ctx, &d);
return (NULL);
}
vbp = vrt->probe;
if (vbp == NULL)
......@@ -508,18 +513,7 @@ VRT_new_backend_clustered(VRT_CTX, struct vsmw_cluster *vc,
VBP_Insert(be, vbp, be->tcp_pool);
}
be->vsc = VSC_vbe_New(vc, &be->vsc_seg,
"%s.%s", VCL_Name(ctx->vcl), vrt->vcl_name);
AN(be->vsc);
retval = VRT_AddDirector(ctx, d, vrt->vcl_name);
if (retval == 0)
return (d);
VRT_delete_backend(ctx, &d);
AZ(d);
return (NULL);
return (d);
}
struct director * v_matchproto_()
......
......@@ -98,7 +98,9 @@ struct director {
/* cache_vcl.c */
int VRT_AddDirector(VRT_CTX, struct director *, const char *);
int VRT_AddDirector(VRT_CTX, struct director *, const char *, ...)
v_printflike_(3, 4);
void VRT_DelDirector(VRT_CTX, struct director *);
/* cache_director.c */
......
......@@ -38,6 +38,7 @@
#include "vcl.h"
#include "vct.h"
#include "vtim.h"
#include "cache_director.h"
#include "cache_vcl.h"
......@@ -126,11 +127,13 @@ VCL_Rel(struct vcl **vcc)
/*--------------------------------------------------------------------*/
int
VRT_AddDirector(VRT_CTX, struct director *d, const char *vcl_name)
VRT_AddDirector(VRT_CTX, struct director *d, const char *fmt, ...)
{
struct vsb *vsb;
struct vcl *vcl;
struct vcldir *vdir;
va_list ap;
int i;
CHECK_OBJ_NOTNULL(d, DIRECTOR_MAGIC);
vcl = ctx->vcl;
......@@ -147,16 +150,24 @@ VRT_AddDirector(VRT_CTX, struct director *d, const char *vcl_name)
d->admin_health = VDI_AH_PROBE;
vsb = VSB_new_auto();
AN(vsb);
VSB_printf(vsb, "%s.%s", VCL_Name(vcl), vcl_name);
VSB_printf(vsb, "%s.", VCL_Name(vcl));
i = VSB_len(vsb);
va_start(ap, fmt);
VSB_vprintf(vsb, fmt, ap);
va_end(ap);
AZ(VSB_finish(vsb));
REPLACE((d->cli_name), VSB_data(vsb));
VSB_destroy(&vsb);
d->vcl_name = d->cli_name + i;
ALLOC_OBJ(vdir, VCLDIR_MAGIC);
AN(vdir);
vdir->dir = d;
vdir->vcl = vcl;
d->vdir = vdir;
d->health = 1;
d->admin_health = VDI_AH_PROBE;
d->health_changed = VTIM_real();
Lck_Lock(&vcl_mtx);
VTAILQ_INSERT_TAIL(&vcl->director_list, vdir, list);
......
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