Commit 38d7ebb0 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Add a parameter "vcc_err_unref" which controls if unreferenced

VCL objects (ACL, backend, subroutine etc) are errors or warnings.



git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@5457 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent b5ba5cf6
......@@ -83,7 +83,7 @@ int mgt_has_vcl(void);
extern char *mgt_cc_cmd;
extern char *mgt_vcl_dir;
extern char *mgt_vmod_dir;
extern unsigned mgt_vcc_err_unref;
#define REPORT0(pri, fmt) \
do { \
......
......@@ -832,6 +832,10 @@ static const struct parspec input_parspec[] = {
".",
#endif
NULL },
{ "vcc_err_unref", tweak_bool, &mgt_vcc_err_unref, 0, 0,
"Unreferenced VCL objects result in error.\n",
0,
"on", "bool" },
{ NULL, NULL, NULL }
};
......
......@@ -69,6 +69,7 @@ static VTAILQ_HEAD(, vclprog) vclhead = VTAILQ_HEAD_INITIALIZER(vclhead);
char *mgt_cc_cmd;
char *mgt_vcl_dir;
char *mgt_vmod_dir;
unsigned mgt_vcc_err_unref;
static struct vcc *vcc;
......@@ -146,6 +147,7 @@ run_vcc(void *priv)
XXXAN(sb);
VCC_VCL_dir(vcc, mgt_vcl_dir);
VCC_VMOD_dir(vcc, mgt_vmod_dir);
VCC_Err_Unref(vcc, mgt_vcc_err_unref);
csrc = VCC_Compile(vcc, sb, vp->vcl);
vsb_finish(sb);
AZ(vsb_overflowed(sb));
......
# $Id$
test "param vcc_err_unref"
varnish v1 -badvcl {
backend b { .host = "127.0.0.1"; }
backend c { .host = "127.0.0.1"; }
}
varnish v1 -cliok "param.set vcc_err_unref false"
varnish v1 -vcl {
backend b { .host = "127.0.0.1"; }
backend c { .host = "127.0.0.1"; }
}
varnish v1 -cliok "param.set vcc_err_unref true"
varnish v1 -badvcl {
backend b { .host = "127.0.0.1"; }
backend c { .host = "127.0.0.1"; }
}
......@@ -35,6 +35,7 @@ struct vcc *VCC_New(void);
void VCC_Default_VCL(struct vcc *, const char *str);
void VCC_VCL_dir(struct vcc *, const char *str);
void VCC_VMOD_dir(struct vcc *, const char *str);
void VCC_Err_Unref(struct vcc *tl, unsigned u);
char *VCC_Compile(const struct vcc *, struct vsb *sb, const char *b);
const char *VCC_Return_Name(unsigned action);
......@@ -472,6 +472,9 @@ vcc_NewVcc(const struct vcc *tl0)
REPLACE(tl->default_vcl, tl0->default_vcl);
REPLACE(tl->vcl_dir, tl0->vcl_dir);
tl->vars = tl0->vars;
tl->err_unref = tl0->err_unref;
} else {
tl->err_unref = 1;
}
VTAILQ_INIT(&tl->symbols);
VTAILQ_INIT(&tl->hosts);
......@@ -753,3 +756,16 @@ VCC_VMOD_dir(struct vcc *tl, const char *str)
CHECK_OBJ_NOTNULL(tl, VCC_MAGIC);
REPLACE(tl->vmod_dir, str);
}
/*--------------------------------------------------------------------
* Configure default
*/
void
VCC_Err_Unref(struct vcc *tl, unsigned u)
{
CHECK_OBJ_NOTNULL(tl, VCC_MAGIC);
printf("EU= %u\n", u);
tl->err_unref = u;
}
......@@ -152,6 +152,8 @@ struct vcc {
unsigned recnt;
unsigned nsockaddr;
unsigned nvmodpriv;
unsigned err_unref;
};
struct var {
......
......@@ -114,6 +114,10 @@ vcc_checkref(struct vcc *tl, const struct symbol *sym)
vsb_printf(tl->sb, "Unused %s %.*s, defined:\n",
VCC_SymKind(tl, sym), PF(sym->def_b));
vcc_ErrWhere(tl, sym->def_b);
if (!tl->err_unref) {
vsb_printf(tl->sb, "(That was just a warning)\n");
tl->err = 0;
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment