[master] 7f6f2c5 Revert "Split VCL event sender functions out individually."

Dridi Boukelmoune dridi.boukelmoune at gmail.com
Mon Jan 11 18:41:32 CET 2016


commit 7f6f2c54cd6a9dee02b6e75e6dbd8c61b5d75f3d
Author: Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
Date:   Mon Jan 11 18:40:09 2016 +0100

    Revert "Split VCL event sender functions out individually."
    
    This reverts commit f4895da5b08b83c2190ff96e2a6364e4699e962f, there are
    pending changes in semantics in VCL temperature that conflict with this
    commit.

diff --git a/bin/varnishd/cache/cache_vcl.c b/bin/varnishd/cache/cache_vcl.c
index 5856f3c..b1b7756 100644
--- a/bin/varnishd/cache/cache_vcl.c
+++ b/bin/varnishd/cache/cache_vcl.c
@@ -411,75 +411,50 @@ VRT_rel_vcl(VRT_CTX)
 	Lck_Unlock(&vcl_mtx);
 }
 
-/*--------------------------------------------------------------------
- * Wrapper functions to send events to VCL and guarantee semantics.
- */
+/*--------------------------------------------------------------------*/
 
-static int
-vcl_event_load(VRT_CTX)
+static struct vcl *
+vcl_find(const char *name)
 {
-	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
-	AN(ctx->handling);
-	AN(ctx->vcl);
-	AN(ctx->msg);
-	return (ctx->vcl->conf->event_vcl(ctx, VCL_EVENT_LOAD));
-}
+	struct vcl *vcl;
 
-static int
-vcl_event_warm(VRT_CTX)
-{
-	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
-	AN(ctx->handling);
-	AN(ctx->vcl);
-	// AN/AZ(ctx->msg);		// XXX: Dridi: which is it ?
-	return (ctx->vcl->conf->event_vcl(ctx, VCL_EVENT_WARM));
+	ASSERT_CLI();
+	VTAILQ_FOREACH(vcl, &vcl_head, list) {
+		if (vcl->discard)
+			continue;
+		if (!strcmp(vcl->loaded_name, name))
+			return (vcl);
+	}
+	return (NULL);
 }
 
 static int
-vcl_event_use(VRT_CTX)
+vcl_setup_event(VRT_CTX, enum vcl_event_e ev)
 {
-	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
-	AN(ctx->handling);
-	AN(ctx->vcl);
-	AN(ctx->msg);
-	return (ctx->vcl->conf->event_vcl(ctx, VCL_EVENT_USE));
-}
 
-static void
-vcl_event_cold(VRT_CTX)
-{
 	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	AN(ctx->handling);
 	AN(ctx->vcl);
-	AZ(ctx->msg);
-	AZ(ctx->vcl->conf->event_vcl(ctx, VCL_EVENT_COLD));
+	assert(ev == VCL_EVENT_LOAD || ev == VCL_EVENT_WARM ||
+	    ev == VCL_EVENT_USE);
+
+	if (ev == VCL_EVENT_LOAD)
+		AN(ctx->msg);
+
+	return (ctx->vcl->conf->event_vcl(ctx, ev));
 }
 
 static void
-vcl_event_discard(VRT_CTX)
+vcl_failsafe_event(VRT_CTX, enum vcl_event_e ev)
 {
+
 	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	AN(ctx->handling);
 	AN(ctx->vcl);
-	// AN/AZ(ctx->msg);		// XXX:  Dridi: which is it ?
-	AZ(ctx->vcl->conf->event_vcl(ctx, VCL_EVENT_DISCARD));
-}
-
-/*--------------------------------------------------------------------*/
-
-static struct vcl *
-vcl_find(const char *name)
-{
-	struct vcl *vcl;
+	assert(ev == VCL_EVENT_COLD || ev == VCL_EVENT_DISCARD);
 
-	ASSERT_CLI();
-	VTAILQ_FOREACH(vcl, &vcl_head, list) {
-		if (vcl->discard)
-			continue;
-		if (!strcmp(vcl->loaded_name, name))
-			return (vcl);
-	}
-	return (NULL);
+	if (ctx->vcl->conf->event_vcl(ctx, ev) != 0)
+		WRONG("A VMOD cannot fail COLD or DISCARD events");
 }
 
 static void
@@ -502,7 +477,7 @@ vcl_set_state(VRT_CTX, const char *state)
 
 			vcl->temp = vcl->refcount ? VCL_TEMP_COOLING :
 			    VCL_TEMP_COLD;
-			vcl_event_cold(ctx);
+			vcl_failsafe_event(ctx, VCL_EVENT_COLD);
 			vcl_BackendEvent(vcl, VCL_EVENT_COLD);
 		}
 		else if (vcl->busy)
@@ -519,7 +494,7 @@ vcl_set_state(VRT_CTX, const char *state)
 		/* The VCL must first reach a stable cold state */
 		else if (vcl->temp != VCL_TEMP_COOLING) {
 			vcl->temp = VCL_TEMP_WARM;
-			vcl_event_warm(ctx);	// XXX: Dridi: what if it fails?
+			(void)vcl_setup_event(ctx, VCL_EVENT_WARM);
 			vcl_BackendEvent(vcl, VCL_EVENT_WARM);
 		}
 		break;
@@ -569,13 +544,13 @@ VCL_Load(struct cli *cli, const char *name, const char *fn, const char *state)
 
 	VSB_clear(vsb);
 	ctx.msg = vsb;
-	i = vcl_event_load(&ctx);
+	i = vcl_setup_event(&ctx, VCL_EVENT_LOAD);
 	AZ(VSB_finish(vsb));
 	if (i) {
 		VCLI_Out(cli, "VCL \"%s\" Failed initialization", name);
 		if (VSB_len(vsb))
 			VCLI_Out(cli, "\nMessage:\n\t%s", VSB_data(vsb));
-		vcl_event_discard(&ctx);
+		vcl_failsafe_event(&ctx, VCL_EVENT_DISCARD);
 		vcl_KillBackends(vcl);
 		VCL_Close(&vcl);
 		VSB_delete(vsb);
@@ -617,7 +592,7 @@ VCL_Nuke(struct vcl *vcl)
 	ctx.method = VCL_MET_FINI;
 	ctx.handling = &hand;
 	ctx.vcl = vcl;
-	vcl_event_discard(&ctx);
+	vcl_failsafe_event(&ctx, VCL_EVENT_DISCARD);
 	vcl_KillBackends(vcl);
 	free(vcl->loaded_name);
 	VCL_Close(&vcl);
@@ -742,7 +717,7 @@ ccf_config_use(struct cli *cli, const char * const *av, void *priv)
 	AN(vsb);
 	ctx.msg = vsb;
 	ctx.vcl = vcl;
-	i = vcl_event_use(&ctx);
+	i = vcl_setup_event(&ctx, VCL_EVENT_USE);
 	AZ(VSB_finish(vsb));
 	if (i) {
 		VCLI_Out(cli, "VCL \"%s\" Failed to activate", av[2]);



More information about the varnish-commit mailing list