[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