[master] 0a14644 Hang backends from a list off the VCL that created them.
Poul-Henning Kamp
phk at FreeBSD.org
Mon Jun 22 12:55:04 CEST 2015
commit 0a14644f9709af2153db0e841dab908d0c81ea7c
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Mon Jun 22 10:51:54 2015 +0000
Hang backends from a list off the VCL that created them.
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 2b025ef..ab3cd4d 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -102,6 +102,7 @@ enum {
struct VSC_C_lck;
struct ban;
+struct backend;
struct busyobj;
struct cli;
struct cli_proto;
@@ -1077,6 +1078,8 @@ void VCL_Poll(void);
void VCL_Ref(struct vcl *);
void VCL_Refresh(struct vcl **);
void VCL_Rel(struct vcl **);
+void VCL_AddBackend(struct vcl *, struct backend *);
+void VCL_DelBackend(struct vcl *, const struct backend *);
const char *VCL_Return_Name(unsigned);
#define VCL_MET_MAC(l,u,b) \
diff --git a/bin/varnishd/cache/cache_backend.h b/bin/varnishd/cache/cache_backend.h
index c3b9152..697b77a 100644
--- a/bin/varnishd/cache/cache_backend.h
+++ b/bin/varnishd/cache/cache_backend.h
@@ -59,6 +59,7 @@ struct backend {
#define BACKEND_MAGIC 0x64c4c7c6
VTAILQ_ENTRY(backend) list;
+ VTAILQ_ENTRY(backend) vcl_list;
int refcount;
struct lock mtx;
diff --git a/bin/varnishd/cache/cache_backend_cfg.c b/bin/varnishd/cache/cache_backend_cfg.c
index e2350e2..3e07591 100644
--- a/bin/varnishd/cache/cache_backend_cfg.c
+++ b/bin/varnishd/cache/cache_backend_cfg.c
@@ -105,6 +105,8 @@ VRT_new_backend(VRT_CTX, const struct vrt_backend *vrt)
if (vrt->probe != NULL)
VBP_Insert(b, vrt->probe, vrt->hosthdr);
+ VCL_AddBackend(ctx->vcl, b);
+
return (b->director);
}
@@ -149,13 +151,13 @@ VRT_delete_backend(VRT_CTX, struct director **dp)
ASSERT_CLI();
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
AN(dp);
- AN(*dp);
-
d = *dp;
*dp = NULL;
CHECK_OBJ_NOTNULL(d, DIRECTOR_MAGIC);
CAST_OBJ_NOTNULL(be, d->priv, BACKEND_MAGIC);
+ VCL_DelBackend(ctx->vcl, be);
+
if (be->probe != NULL)
VBP_Remove(be);
diff --git a/bin/varnishd/cache/cache_vcl.c b/bin/varnishd/cache/cache_vcl.c
index a6d7e80..865daac 100644
--- a/bin/varnishd/cache/cache_vcl.c
+++ b/bin/varnishd/cache/cache_vcl.c
@@ -39,6 +39,8 @@
#include "cache.h"
+#include "cache_director.h"
+#include "cache_backend.h"
#include "vcl.h"
#include "vrt.h"
#include "vcli.h"
@@ -59,6 +61,7 @@ struct vcl {
unsigned busy;
unsigned discard;
const char *temp;
+ VTAILQ_HEAD(,backend) backend_list;
};
/*
@@ -182,6 +185,29 @@ VCL_Rel(struct vcl **vcc)
/*--------------------------------------------------------------------*/
+void
+VCL_AddBackend(struct vcl *vcl, struct backend *be)
+{
+
+ CHECK_OBJ_NOTNULL(vcl, VCL_MAGIC);
+ CHECK_OBJ_NOTNULL(be, BACKEND_MAGIC);
+ Lck_Lock(&vcl_mtx);
+ VTAILQ_INSERT_TAIL(&vcl->backend_list, be, vcl_list);
+ Lck_Unlock(&vcl_mtx);
+}
+
+void
+VCL_DelBackend(struct vcl *vcl, const struct backend *be)
+{
+ CHECK_OBJ_NOTNULL(vcl, VCL_MAGIC);
+ CHECK_OBJ_NOTNULL(be, BACKEND_MAGIC);
+ Lck_Lock(&vcl_mtx);
+ VTAILQ_REMOVE(&vcl->backend_list, be, vcl_list);
+ Lck_Unlock(&vcl_mtx);
+}
+
+/*--------------------------------------------------------------------*/
+
static struct vcl *
VCL_Open(const char *fn, struct vsb *msg)
{
@@ -367,6 +393,7 @@ VCL_Load(struct cli *cli, const char *name, const char *fn, const char *state)
vcl->loaded_name = strdup(name);
XXXAN(vcl->loaded_name);
+ VTAILQ_INIT(&vcl->backend_list);
vcl->temp = vcl_temp_cold;
More information about the varnish-commit
mailing list