[master] dbc39e9 Disable backend probes in cold vcls

Poul-Henning Kamp phk at FreeBSD.org
Tue Mar 10 00:34:49 CET 2015


commit dbc39e9ff4728e6624dcc0ae6b310988d09cf9d1
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Mon Mar 9 23:34:36 2015 +0000

    Disable backend probes in cold vcls

diff --git a/bin/varnishd/cache/cache_backend.c b/bin/varnishd/cache/cache_backend.c
index 762ea69..cc3da2e 100644
--- a/bin/varnishd/cache/cache_backend.c
+++ b/bin/varnishd/cache/cache_backend.c
@@ -332,6 +332,10 @@ VRT_event_vbe(VRT_CTX, enum vcl_event_e ev, const struct director *d,
 	assert(d->priv2 == vrt);
 
 	CAST_OBJ_NOTNULL(be, d->priv, BACKEND_MAGIC);
+	if (be->probe != NULL && ev == VCL_EVENT_WARM)
+		VBP_Control(be, 0);
+	if (be->probe != NULL && ev == VCL_EVENT_COLD)
+		VBP_Control(be, 1);
 }
 
 void
diff --git a/bin/varnishd/cache/cache_backend.h b/bin/varnishd/cache/cache_backend.h
index 584a6f1..48dffa4 100644
--- a/bin/varnishd/cache/cache_backend.h
+++ b/bin/varnishd/cache/cache_backend.h
@@ -113,6 +113,7 @@ void VBE_DeleteBackend(struct backend *);
 void VBP_Insert(struct backend *b, struct vrt_backend_probe const *p,
     const char *hosthdr);
 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);
 
 struct tcp_pool *VBT_Ref(const struct suckaddr *ip4,
diff --git a/bin/varnishd/cache/cache_backend_poll.c b/bin/varnishd/cache/cache_backend_poll.c
index 0912557..d4cca48 100644
--- a/bin/varnishd/cache/cache_backend_poll.c
+++ b/bin/varnishd/cache/cache_backend_poll.c
@@ -58,6 +58,7 @@ struct vbp_target {
 #define VBP_TARGET_MAGIC		0x6b7cb656
 
 	struct lock			mtx;
+	int				disable;
 	int				stop;
 	struct backend			*backend;
 
@@ -259,7 +260,8 @@ vbp_has_poked(struct vbp_target *vt)
 		    vt->backend->vcl_name, logmsg, bits,
 		    vt->good, vt->probe.threshold, vt->probe.window,
 		    vt->last, vt->avg, vt->resp_buf);
-		vt->backend->vsc->happy = vt->happy;
+		if (!vt->disable)
+			vt->backend->vsc->happy = vt->happy;
 	}
 	Lck_Unlock(&vt->mtx);
 }
@@ -281,9 +283,11 @@ vbp_wrk_poll_backend(void *priv)
 		AN(vt->req);
 		assert(vt->req_len > 0);
 
-		vbp_start_poke(vt);
-		vbp_poke(vt);
-		vbp_has_poked(vt);
+		if (!vt->disable) {
+			vbp_start_poke(vt);
+			vbp_poke(vt);
+			vbp_has_poked(vt);
+		}
 
 		if (!vt->stop)
 			VTIM_sleep(vt->probe.interval);
@@ -413,6 +417,24 @@ vbp_set_defaults(struct vbp_target *vt)
 }
 
 /*--------------------------------------------------------------------
+ */
+
+void
+VBP_Control(const struct backend *be, int stop)
+{
+	struct vbp_target *vt;
+
+	ASSERT_CLI();
+	CHECK_OBJ_NOTNULL(be, BACKEND_MAGIC);
+	vt = be->probe;
+	CHECK_OBJ_NOTNULL(vt, VBP_TARGET_MAGIC);
+
+	Lck_Lock(&vt->mtx);
+	vt->disable = stop;
+	Lck_Unlock(&vt->mtx);
+}
+
+/*--------------------------------------------------------------------
  * Insert/Remove/Use called from cache_backend.c
  */
 



More information about the varnish-commit mailing list