[master] cc70c58 Rearrange the backend code a bit.

Poul-Henning Kamp phk at FreeBSD.org
Wed Jun 17 14:44:52 CEST 2015


commit cc70c5807df0d5548a39148dc672755375853db9
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Wed Jun 17 12:44:37 2015 +0000

    Rearrange the backend code a bit.

diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 49bf6ba..2b025ef 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -678,6 +678,9 @@ void VCA_Shutdown(void);
 /* cache_backend_cfg.c */
 void VBE_InitCfg(void);
 
+/* cache_backend_poll.c */
+void VBP_Init(void);
+
 /* cache_ban.c */
 struct ban *BAN_New(void);
 int BAN_AddTest(struct ban *, const char *, const char *, const char *);
diff --git a/bin/varnishd/cache/cache_backend.c b/bin/varnishd/cache/cache_backend.c
index 24b1e07..930598e 100644
--- a/bin/varnishd/cache/cache_backend.c
+++ b/bin/varnishd/cache/cache_backend.c
@@ -36,9 +36,8 @@
 
 #include "cache.h"
 
-#include "cache_backend.h"
 #include "cache_director.h"
-#include "vcl.h"
+#include "cache_backend.h"
 #include "vrt.h"
 #include "vtcp.h"
 
@@ -297,21 +296,16 @@ vbe_dir_http1pipe(const struct director *d, struct req *req, struct busyobj *bo)
 
 /*--------------------------------------------------------------------*/
 
-struct director *
-VRT_new_backend(VRT_CTX, const struct vrt_backend *vrt)
+void
+VBE_fill_director(struct backend *be, const struct vrt_backend *vrt)
 {
 	struct director *d;
-	struct backend *be;
 
-	ASSERT_CLI();
-	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+	CHECK_OBJ_NOTNULL(be, BACKEND_MAGIC);
 	CHECK_OBJ_NOTNULL(vrt, VRT_BACKEND_MAGIC);
-	AN(ctx->vcl);
 
-	be = VBE_AddBackend(ctx, vrt);
-	AN(be);
-	ALLOC_OBJ(d, DIRECTOR_MAGIC);
-	XXXAN(d);
+	INIT_OBJ(be->director, DIRECTOR_MAGIC);
+	d = be->director;
 	d->priv = be;
 	d->priv2 = vrt;
 	d->name = "backend";
@@ -322,65 +316,4 @@ VRT_new_backend(VRT_CTX, const struct vrt_backend *vrt)
 	d->getbody = vbe_dir_getbody;
 	d->getip = vbe_dir_getip;
 	d->finish = vbe_dir_finish;
-
-	if (vrt->probe != NULL)
-		VBP_Insert(be, vrt->probe, vrt->hosthdr);
-
-	return (d);
-}
-
-void
-VRT_event_vbe(VRT_CTX, enum vcl_event_e ev, const struct director *d,
-    const struct vrt_backend *vrt)
-{
-	struct backend *be;
-
-	ASSERT_CLI();
-	(void)ev;
-	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
-	CHECK_OBJ_NOTNULL(d, DIRECTOR_MAGIC);
-	CHECK_OBJ_NOTNULL(vrt, VRT_BACKEND_MAGIC);
-	assert(d->priv2 == vrt);
-
-	CAST_OBJ_NOTNULL(be, d->priv, BACKEND_MAGIC);
-	if (ev == VCL_EVENT_WARM) {
-		be->vsc = VSM_Alloc(sizeof *be->vsc,
-		    VSC_CLASS, VSC_type_vbe, be->display_name);
-		AN(be->vsc);
-	}
-
-	if (be->probe != NULL && ev == VCL_EVENT_WARM)
-		VBP_Control(be, 1);
-
-	if (be->probe != NULL && ev == VCL_EVENT_COLD)
-		VBP_Control(be, 0);
-
-	if (ev == VCL_EVENT_COLD) {
-		VSM_Free(be->vsc);
-		be->vsc = NULL;
-	}
-}
-
-void
-VRT_delete_backend(VRT_CTX, struct director **dp)
-{
-	struct director *d;
-	struct backend *be;
-
-	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);
-
-	if (be->probe != NULL)
-		VBP_Remove(be);
-
-	VBE_DeleteBackend(be);
-	free(d->vcl_name);
-	FREE_OBJ(d);
 }
diff --git a/bin/varnishd/cache/cache_backend.h b/bin/varnishd/cache/cache_backend.h
index b586d22..c3b9152 100644
--- a/bin/varnishd/cache/cache_backend.h
+++ b/bin/varnishd/cache/cache_backend.h
@@ -82,6 +82,8 @@ struct backend {
 	struct VSC_C_vbe	*vsc;
 
 	struct tcp_pool		*tcp_pool;
+
+	struct director		director[1];
 };
 
 /* -------------------------------------------------------------------*/
@@ -105,11 +107,11 @@ struct vbc {
 	struct worker		*wrk;
 };
 
+/* cache_backend.c */
+void VBE_fill_director(struct backend *be, const struct vrt_backend *vrt);
+
 /* cache_backend_cfg.c */
 unsigned VBE_Healthy(const struct backend *b, double *changed);
-struct backend *VBE_AddBackend(const struct vrt_ctx *,
-    const struct vrt_backend *);
-void VBE_DeleteBackend(struct backend *);
 
 /* cache_backend_poll.c */
 void VBP_Insert(struct backend *b, struct vrt_backend_probe const *p,
@@ -117,7 +119,6 @@ void VBP_Insert(struct backend *b, struct vrt_backend_probe const *p,
 void VBP_Remove(struct backend *b);
 void VBP_Control(const struct backend *b, int stop);
 void VBP_Status(struct cli *cli, const struct backend *, int details);
-void VBP_Init(void);
 
 struct tcp_pool *VBT_Ref(const struct suckaddr *ip4,
     const struct suckaddr *ip6);
diff --git a/bin/varnishd/cache/cache_backend_cfg.c b/bin/varnishd/cache/cache_backend_cfg.c
index b9c5591..27137d8 100644
--- a/bin/varnishd/cache/cache_backend_cfg.c
+++ b/bin/varnishd/cache/cache_backend_cfg.c
@@ -38,76 +38,56 @@
 
 #include "cache.h"
 
+#include "cache_director.h"
 #include "cache_backend.h"
 #include "vcli.h"
 #include "vcli_priv.h"
 #include "vsa.h"
+#include "vcl.h"
 #include "vrt.h"
 #include "vtim.h"
 
 static VTAILQ_HEAD(, backend) backends = VTAILQ_HEAD_INITIALIZER(backends);
 static struct lock backends_mtx;
-
-/*--------------------------------------------------------------------
- */
-
-void
-VBE_DeleteBackend(struct backend *b)
-{
-
-	CHECK_OBJ_NOTNULL(b, BACKEND_MAGIC);
-
-	Lck_Lock(&backends_mtx);
-	VTAILQ_REMOVE(&backends, b, list);
-	VSC_C_main->n_backend--;
-	Lck_Unlock(&backends_mtx);
-
-	free(b->ipv4);
-	free(b->ipv6);
-	free(b->display_name);
-	AZ(b->vsc);
-	VBT_Rel(&b->tcp_pool);
-	Lck_Delete(&b->mtx);
-	FREE_OBJ(b);
-}
-
 /*--------------------------------------------------------------------
  * Create a new director::backend instance.
  */
 
-struct backend *
-VBE_AddBackend(const struct vrt_ctx *ctx, const struct vrt_backend *vb)
+struct director *
+VRT_new_backend(VRT_CTX, const struct vrt_backend *vrt)
 {
 	struct backend *b;
 	char buf[128];
 	struct vcl *vcl;
 
 	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+	CHECK_OBJ_NOTNULL(vrt, VRT_BACKEND_MAGIC);
+
 	vcl = ctx->vcl;
 	AN(vcl);
-	AN(vb->vcl_name);
-	assert(vb->ipv4_suckaddr != NULL || vb->ipv6_suckaddr != NULL);
+	AN(vrt->vcl_name);
+	assert(vrt->ipv4_suckaddr != NULL || vrt->ipv6_suckaddr != NULL);
 
 	/* Create new backend */
 	ALLOC_OBJ(b, BACKEND_MAGIC);
 	XXXAN(b);
 	Lck_New(&b->mtx, lck_backend);
 
-	bprintf(buf, "%s.%s", VCL_Name(vcl), vb->vcl_name);
+	bprintf(buf, "%s.%s", VCL_Name(vcl), vrt->vcl_name);
 	REPLACE(b->display_name, buf);
 
 	b->vcl = vcl;
-	b->vcl_name =  vb->vcl_name;
-	b->ipv4_addr = vb->ipv4_addr;
-	b->ipv6_addr = vb->ipv6_addr;
-	b->port = vb->port;
+	b->vcl_name =  vrt->vcl_name;
+	b->ipv4_addr = vrt->ipv4_addr;
+	b->ipv6_addr = vrt->ipv6_addr;
+	b->port = vrt->port;
 
-	b->tcp_pool = VBT_Ref(vb->ipv4_suckaddr, vb->ipv6_suckaddr);
+	b->tcp_pool = VBT_Ref(vrt->ipv4_suckaddr, vrt->ipv6_suckaddr);
 
-	if (vb->ipv4_suckaddr != NULL)
-		b->ipv4 = VSA_Clone(vb->ipv4_suckaddr);
-	if (vb->ipv6_suckaddr != NULL)
-		b->ipv6 = VSA_Clone(vb->ipv6_suckaddr);
+	if (vrt->ipv4_suckaddr != NULL)
+		b->ipv4 = VSA_Clone(vrt->ipv4_suckaddr);
+	if (vrt->ipv6_suckaddr != NULL)
+		b->ipv6 = VSA_Clone(vrt->ipv6_suckaddr);
 
 	assert(b->ipv4 != NULL || b->ipv6 != NULL);
 
@@ -119,7 +99,80 @@ VBE_AddBackend(const struct vrt_ctx *ctx, const struct vrt_backend *vb)
 	VTAILQ_INSERT_TAIL(&backends, b, list);
 	VSC_C_main->n_backend++;
 	Lck_Unlock(&backends_mtx);
-	return (b);
+
+	VBE_fill_director(b, vrt);
+
+	if (vrt->probe != NULL)
+		VBP_Insert(b, vrt->probe, vrt->hosthdr);
+
+	return (b->director);
+}
+
+void
+VRT_event_vbe(VRT_CTX, enum vcl_event_e ev, const struct director *d,
+    const struct vrt_backend *vrt)
+{
+	struct backend *be;
+
+	ASSERT_CLI();
+	(void)ev;
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+	CHECK_OBJ_NOTNULL(d, DIRECTOR_MAGIC);
+	CHECK_OBJ_NOTNULL(vrt, VRT_BACKEND_MAGIC);
+	assert(d->priv2 == vrt);
+
+	CAST_OBJ_NOTNULL(be, d->priv, BACKEND_MAGIC);
+	if (ev == VCL_EVENT_WARM) {
+		be->vsc = VSM_Alloc(sizeof *be->vsc,
+		    VSC_CLASS, VSC_type_vbe, be->display_name);
+		AN(be->vsc);
+	}
+
+	if (be->probe != NULL && ev == VCL_EVENT_WARM)
+		VBP_Control(be, 1);
+
+	if (be->probe != NULL && ev == VCL_EVENT_COLD)
+		VBP_Control(be, 0);
+
+	if (ev == VCL_EVENT_COLD) {
+		VSM_Free(be->vsc);
+		be->vsc = NULL;
+	}
+}
+
+void
+VRT_delete_backend(VRT_CTX, struct director **dp)
+{
+	struct director *d;
+	struct backend *be;
+
+	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);
+
+	if (be->probe != NULL)
+		VBP_Remove(be);
+
+	free(d->vcl_name);
+
+	Lck_Lock(&backends_mtx);
+	VTAILQ_REMOVE(&backends, be, list);
+	VSC_C_main->n_backend--;
+	Lck_Unlock(&backends_mtx);
+
+	free(be->ipv4);
+	free(be->ipv6);
+	free(be->display_name);
+	AZ(be->vsc);
+	VBT_Rel(&be->tcp_pool);
+	Lck_Delete(&be->mtx);
+	FREE_OBJ(be);
 }
 
 /*---------------------------------------------------------------------
diff --git a/bin/varnishd/cache/cache_backend_poll.c b/bin/varnishd/cache/cache_backend_poll.c
index c658417..fe6d735 100644
--- a/bin/varnishd/cache/cache_backend_poll.c
+++ b/bin/varnishd/cache/cache_backend_poll.c
@@ -45,6 +45,7 @@
 
 #include "cache.h"
 
+#include "cache_director.h"
 #include "cache_backend.h"
 #include "vcli_priv.h"
 #include "vrt.h"
diff --git a/bin/varnishd/cache/cache_backend_tcp.c b/bin/varnishd/cache/cache_backend_tcp.c
index 70afa2e..c830fa5 100644
--- a/bin/varnishd/cache/cache_backend_tcp.c
+++ b/bin/varnishd/cache/cache_backend_tcp.c
@@ -38,6 +38,7 @@
 
 #include "cache.h"
 
+#include "cache_director.h"
 #include "cache_backend.h"
 #include "cache_pool.h"
 #include "vtcp.h"
diff --git a/bin/varnishd/cache/cache_main.c b/bin/varnishd/cache/cache_main.c
index 4c5370f..da9c297 100644
--- a/bin/varnishd/cache/cache_main.c
+++ b/bin/varnishd/cache/cache_main.c
@@ -33,7 +33,6 @@
 #include <stdlib.h>
 
 #include "cache.h"
-#include "cache_backend.h"
 #include "common/heritage.h"
 
 #include "vcli_priv.h"
diff --git a/bin/varnishd/cache/cache_panic.c b/bin/varnishd/cache/cache_panic.c
index 3755508..b959ff6 100644
--- a/bin/varnishd/cache/cache_panic.c
+++ b/bin/varnishd/cache/cache_panic.c
@@ -43,6 +43,7 @@
 #include "cache_filter.h"
 #include "common/heritage.h"
 
+#include "cache_director.h"
 #include "cache_backend.h"
 #include "storage/storage.h"
 #include "vcli_priv.h"
diff --git a/bin/varnishd/http1/cache_http1_fetch.c b/bin/varnishd/http1/cache_http1_fetch.c
index 23fc6b9..1eae475 100644
--- a/bin/varnishd/http1/cache_http1_fetch.c
+++ b/bin/varnishd/http1/cache_http1_fetch.c
@@ -37,8 +37,8 @@
 
 #include "hash/hash_slinger.h"
 
-#include "cache/cache_backend.h"
 #include "cache/cache_director.h"
+#include "cache/cache_backend.h"
 #include "vcli_priv.h"
 #include "vtcp.h"
 #include "vtim.h"
diff --git a/bin/varnishd/http1/cache_http1_pipe.c b/bin/varnishd/http1/cache_http1_pipe.c
index 818f88f..bf7ab67 100644
--- a/bin/varnishd/http1/cache_http1_pipe.c
+++ b/bin/varnishd/http1/cache_http1_pipe.c
@@ -36,8 +36,8 @@
 
 #include "cache/cache.h"
 
-#include "cache/cache_backend.h"
 #include "cache/cache_director.h"
+#include "cache/cache_backend.h"
 #include "vtcp.h"
 #include "vtim.h"
 



More information about the varnish-commit mailing list