[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