[master] eaac492 Collapse two source files to one.
Poul-Henning Kamp
phk at FreeBSD.org
Tue Nov 14 17:30:08 UTC 2017
commit eaac49272089c0bf1f8ab3ed5a3c1689fe9ce267
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Tue Nov 14 17:29:29 2017 +0000
Collapse two source files to one.
diff --git a/bin/varnishd/Makefile.am b/bin/varnishd/Makefile.am
index a652cc9..68a7072 100644
--- a/bin/varnishd/Makefile.am
+++ b/bin/varnishd/Makefile.am
@@ -11,7 +11,6 @@ sbin_PROGRAMS = varnishd
varnishd_SOURCES = \
cache/cache_acceptor.c \
cache/cache_backend.c \
- cache/cache_backend_cfg.c \
cache/cache_backend_probe.c \
cache/cache_ban.c \
cache/cache_ban_build.c \
diff --git a/bin/varnishd/cache/cache_backend.c b/bin/varnishd/cache/cache_backend.c
index c1b72f1..31f77e9 100644
--- a/bin/varnishd/cache/cache_backend.c
+++ b/bin/varnishd/cache/cache_backend.c
@@ -48,6 +48,17 @@
#include "VSC_vbe.h"
+/*--------------------------------------------------------------------*/
+
+static const char * const vbe_proto_ident = "HTTP Backend";
+
+static VTAILQ_HEAD(, backend) backends = VTAILQ_HEAD_INITIALIZER(backends);
+static VTAILQ_HEAD(, backend) cool_backends =
+ VTAILQ_HEAD_INITIALIZER(cool_backends);
+static struct lock backends_mtx;
+
+/*--------------------------------------------------------------------*/
+
#define FIND_TMO(tmx, dst, bo, be) \
do { \
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC); \
@@ -335,6 +346,39 @@ vbe_dir_event(const struct director *d, enum vcl_event_e ev)
}
}
+/*---------------------------------------------------------------------*/
+
+static void __match_proto__(vdi_destroy_f)
+vbe_destroy(const struct director *d)
+{
+ struct backend *be;
+
+ ASSERT_CLI();
+ CAST_OBJ_NOTNULL(be, d->priv, BACKEND_MAGIC);
+
+ if (be->probe != NULL)
+ VBP_Remove(be);
+
+ Lck_Lock(&backends_mtx);
+ if (be->cooled > 0)
+ VTAILQ_REMOVE(&cool_backends, be, list);
+ else
+ VTAILQ_REMOVE(&backends, be, list);
+ VSC_C_main->n_backend--;
+ VTP_Rel(&be->tcp_pool);
+ Lck_Unlock(&backends_mtx);
+
+#define DA(x) do { if (be->x != NULL) free(be->x); } while (0)
+#define DN(x) /**/
+ VRT_BACKEND_HANDLE();
+#undef DA
+#undef DN
+
+ AZ(be->vsc);
+ Lck_Delete(&be->mtx);
+ FREE_OBJ(be);
+}
+
/*--------------------------------------------------------------------*/
static void
@@ -360,17 +404,40 @@ vbe_panic(const struct director *d, struct vsb *vsb)
VSB_printf(vsb, "n_conn = %u,\n", bp->n_conn);
}
-/*--------------------------------------------------------------------*/
+/*--------------------------------------------------------------------
+ * Create a new static or dynamic director::backend instance.
+ */
-void
-VBE_fill_director(struct backend *be)
+struct director *
+VRT_new_backend(VRT_CTX, const struct vrt_backend *vrt)
{
+ struct backend *be;
struct director *d;
+ struct vcl *vcl;
+ const struct vrt_backend_probe *vbp;
+ int retval;
+
+ CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+ CHECK_OBJ_NOTNULL(vrt, VRT_BACKEND_MAGIC);
+ assert(vrt->ipv4_suckaddr != NULL || vrt->ipv6_suckaddr != NULL);
+
+ vcl = ctx->vcl;
+ AN(vcl);
+ AN(vrt->vcl_name);
- CHECK_OBJ_NOTNULL(be, BACKEND_MAGIC);
+ /* Create new backend */
+ ALLOC_OBJ(be, BACKEND_MAGIC);
+ XXXAN(be);
+ Lck_New(&be->mtx, lck_backend);
+
+#define DA(x) do { if (vrt->x != NULL) REPLACE((be->x), (vrt->x)); } while (0)
+#define DN(x) do { be->x = vrt->x; } while (0)
+ VRT_BACKEND_HANDLE();
+#undef DA
+#undef DN
- INIT_OBJ(be->director, DIRECTOR_MAGIC);
d = be->director;
+ INIT_OBJ(d, DIRECTOR_MAGIC);
d->priv = be;
d->name = "backend";
d->vcl_name = be->vcl_name;
@@ -380,6 +447,105 @@ VBE_fill_director(struct backend *be)
d->getip = vbe_dir_getip;
d->finish = vbe_dir_finish;
d->event = vbe_dir_event;
- d->destroy = VBE_Delete;
d->panic = vbe_panic;
+ d->destroy = vbe_destroy;
+
+ d->health = 1;
+ d->health_changed = VTIM_real();
+ d->admin_health = VDI_AH_PROBE;
+
+ vbp = vrt->probe;
+ if (vbp == NULL)
+ vbp = VCL_DefaultProbe(vcl);
+
+ Lck_Lock(&backends_mtx);
+ VTAILQ_INSERT_TAIL(&backends, be, list);
+ VSC_C_main->n_backend++;
+ be->tcp_pool = VTP_Ref(vrt->ipv4_suckaddr, vrt->ipv6_suckaddr,
+ vbe_proto_ident);
+ Lck_Unlock(&backends_mtx);
+
+ if (vbp != NULL) {
+ VTP_AddRef(be->tcp_pool);
+ VBP_Insert(be, vbp, be->tcp_pool);
+ }
+
+ retval = VCL_AddDirector(ctx->vcl, d, vrt->vcl_name);
+
+ if (retval == 0)
+ return (d);
+
+ VRT_delete_backend(ctx, &d);
+ AZ(d);
+ return (NULL);
+}
+
+/*--------------------------------------------------------------------
+ * Delete a dynamic director::backend instance. Undeleted dynamic and
+ * static instances are GC'ed when the VCL is discarded (in cache_vcl.c)
+ */
+
+void
+VRT_delete_backend(VRT_CTX, struct director **dp)
+{
+ struct director *d;
+ struct backend *be;
+
+ CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+ TAKE_OBJ_NOTNULL(d, dp, DIRECTOR_MAGIC);
+ CAST_OBJ_NOTNULL(be, d->priv, BACKEND_MAGIC);
+ Lck_Lock(&be->mtx);
+ be->director->admin_health = VDI_AH_DELETED;
+ be->director->health_changed = VTIM_real();
+ be->cooled = VTIM_real() + 60.;
+ Lck_Unlock(&be->mtx);
+ Lck_Lock(&backends_mtx);
+ VTAILQ_REMOVE(&backends, be, list);
+ VTAILQ_INSERT_TAIL(&cool_backends, be, list);
+ Lck_Unlock(&backends_mtx);
+
+ // NB. The backend is still usable for the ongoing transactions,
+ // this is why we don't bust the director's magic number.
+}
+
+void
+VBE_SetHappy(const struct backend *be, uint64_t happy)
+{
+
+ Lck_Lock(&backends_mtx);
+ if (be->vsc != NULL)
+ be->vsc->happy = happy;
+ Lck_Unlock(&backends_mtx);
+}
+
+/*---------------------------------------------------------------------*/
+
+void
+VBE_Poll(void)
+{
+ struct backend *be, *be2;
+ double now = VTIM_real();
+
+ ASSERT_CLI();
+ Lck_Lock(&backends_mtx);
+ VTAILQ_FOREACH_SAFE(be, &cool_backends, list, be2) {
+ CHECK_OBJ_NOTNULL(be, BACKEND_MAGIC);
+ if (be->cooled > now)
+ break;
+ if (be->n_conn > 0)
+ continue;
+ Lck_Unlock(&backends_mtx);
+ VCL_DelDirector(be->director);
+ Lck_Lock(&backends_mtx);
+ }
+ Lck_Unlock(&backends_mtx);
+}
+
+/*---------------------------------------------------------------------*/
+
+void
+VBE_InitCfg(void)
+{
+
+ Lck_New(&backends_mtx, lck_vbe);
}
diff --git a/bin/varnishd/cache/cache_backend.h b/bin/varnishd/cache/cache_backend.h
index bea5cd2..ff3cde3 100644
--- a/bin/varnishd/cache/cache_backend.h
+++ b/bin/varnishd/cache/cache_backend.h
@@ -72,12 +72,8 @@ struct backend {
* Prototypes
*/
-/* cache_backend.c */
-void VBE_fill_director(struct backend *be);
-
/* cache_backend_cfg.c */
void VBE_SetHappy(const struct backend *, uint64_t);
-void VBE_Delete(const struct director *);
/* cache_backend_probe.c */
void VBP_Insert(struct backend *b, struct vrt_backend_probe const *p,
diff --git a/bin/varnishd/cache/cache_backend_cfg.c b/bin/varnishd/cache/cache_backend_cfg.c
deleted file mode 100644
index d5e48bf..0000000
--- a/bin/varnishd/cache/cache_backend_cfg.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/*-
- * Copyright (c) 2006 Verdens Gang AS
- * Copyright (c) 2006-2015 Varnish Software AS
- * All rights reserved.
- *
- * Author: Poul-Henning Kamp <phk at phk.freebsd.dk>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * Handle configuration of backends from VCL programs.
- *
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "cache_varnishd.h"
-
-#include "vtim.h"
-#include "waiter/waiter.h"
-
-#include "cache_director.h"
-#include "cache_backend.h"
-#include "cache_tcp_pool.h"
-
-#include "VSC_vbe.h"
-
-static const char * const vbe_proto_ident = "HTTP Backend";
-
-static VTAILQ_HEAD(, backend) backends = VTAILQ_HEAD_INITIALIZER(backends);
-static VTAILQ_HEAD(, backend) cool_backends =
- VTAILQ_HEAD_INITIALIZER(cool_backends);
-static struct lock backends_mtx;
-
-/*--------------------------------------------------------------------
- * Create a new static or dynamic director::backend instance.
- */
-
-struct director *
-VRT_new_backend(VRT_CTX, const struct vrt_backend *vrt)
-{
- struct backend *b;
- struct director *d;
- struct vcl *vcl;
- const struct vrt_backend_probe *vbp;
- int retval;
-
- CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
- CHECK_OBJ_NOTNULL(vrt, VRT_BACKEND_MAGIC);
- assert(vrt->ipv4_suckaddr != NULL || vrt->ipv6_suckaddr != NULL);
-
- vcl = ctx->vcl;
- AN(vcl);
- AN(vrt->vcl_name);
-
- /* Create new backend */
- ALLOC_OBJ(b, BACKEND_MAGIC);
- XXXAN(b);
- Lck_New(&b->mtx, lck_backend);
-
-#define DA(x) do { if (vrt->x != NULL) REPLACE((b->x), (vrt->x)); } while (0)
-#define DN(x) do { b->x = vrt->x; } while (0)
- VRT_BACKEND_HANDLE();
-#undef DA
-#undef DN
-
- VBE_fill_director(b);
-
- b->director->health = 1;
- b->director->health_changed = VTIM_real();
- b->director->admin_health = VDI_AH_PROBE;
-
- vbp = vrt->probe;
- if (vbp == NULL)
- vbp = VCL_DefaultProbe(vcl);
-
- Lck_Lock(&backends_mtx);
- VTAILQ_INSERT_TAIL(&backends, b, list);
- VSC_C_main->n_backend++;
- b->tcp_pool = VTP_Ref(vrt->ipv4_suckaddr, vrt->ipv6_suckaddr,
- vbe_proto_ident);
- Lck_Unlock(&backends_mtx);
-
- if (vbp != NULL) {
- VTP_AddRef(b->tcp_pool);
- VBP_Insert(b, vbp, b->tcp_pool);
- }
-
- retval = VCL_AddDirector(ctx->vcl, b->director, vrt->vcl_name);
-
- if (retval == 0)
- return (b->director);
-
- d = b->director;
- VRT_delete_backend(ctx, &d);
- AZ(d);
- return (NULL);
-}
-
-/*--------------------------------------------------------------------
- * Delete a dynamic director::backend instance. Undeleted dynamic and
- * static instances are GC'ed when the VCL is discarded (in cache_vcl.c)
- */
-
-void
-VRT_delete_backend(VRT_CTX, struct director **dp)
-{
- struct director *d;
- struct backend *be;
-
- CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
- TAKE_OBJ_NOTNULL(d, dp, DIRECTOR_MAGIC);
- CAST_OBJ_NOTNULL(be, d->priv, BACKEND_MAGIC);
- Lck_Lock(&be->mtx);
- be->director->admin_health = VDI_AH_DELETED;
- be->director->health_changed = VTIM_real();
- be->cooled = VTIM_real() + 60.;
- Lck_Unlock(&be->mtx);
- Lck_Lock(&backends_mtx);
- VTAILQ_REMOVE(&backends, be, list);
- VTAILQ_INSERT_TAIL(&cool_backends, be, list);
- Lck_Unlock(&backends_mtx);
-
- // NB. The backend is still usable for the ongoing transactions,
- // this is why we don't bust the director's magic number.
-}
-
-void
-VBE_SetHappy(const struct backend *be, uint64_t happy)
-{
-
- Lck_Lock(&backends_mtx);
- if (be->vsc != NULL)
- be->vsc->happy = happy;
- Lck_Unlock(&backends_mtx);
-}
-
-/*---------------------------------------------------------------------
- * These are for cross-calls with cache_vcl.c only.
- */
-
-void
-VBE_Delete(const struct director *d)
-{
- struct backend *be;
-
- ASSERT_CLI();
- CAST_OBJ_NOTNULL(be, d->priv, BACKEND_MAGIC);
-
- if (be->probe != NULL)
- VBP_Remove(be);
-
- Lck_Lock(&backends_mtx);
- if (be->cooled > 0)
- VTAILQ_REMOVE(&cool_backends, be, list);
- else
- VTAILQ_REMOVE(&backends, be, list);
- VSC_C_main->n_backend--;
- VTP_Rel(&be->tcp_pool);
- Lck_Unlock(&backends_mtx);
-
-#define DA(x) do { if (be->x != NULL) free(be->x); } while (0)
-#define DN(x) /**/
- VRT_BACKEND_HANDLE();
-#undef DA
-#undef DN
-
- AZ(be->vsc);
- Lck_Delete(&be->mtx);
- FREE_OBJ(be);
-}
-
-/*---------------------------------------------------------------------*/
-
-void
-VBE_Poll(void)
-{
- struct backend *be, *be2;
- double now = VTIM_real();
-
- ASSERT_CLI();
- Lck_Lock(&backends_mtx);
- VTAILQ_FOREACH_SAFE(be, &cool_backends, list, be2) {
- CHECK_OBJ_NOTNULL(be, BACKEND_MAGIC);
- if (be->cooled > now)
- break;
- if (be->n_conn > 0)
- continue;
- Lck_Unlock(&backends_mtx);
- VCL_DelDirector(be->director);
- Lck_Lock(&backends_mtx);
- }
- Lck_Unlock(&backends_mtx);
-}
-
-/*---------------------------------------------------------------------*/
-
-void
-VBE_InitCfg(void)
-{
-
- Lck_New(&backends_mtx, lck_vbe);
-}
More information about the varnish-commit
mailing list