]> err.no Git - varnish/commitdiff
Fix a brain-o in the backend identification string: We need to
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Tue, 1 Jul 2008 19:23:56 +0000 (19:23 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Tue, 1 Jul 2008 19:23:56 +0000 (19:23 +0000)
explicitly and uniquely identify all backend stanzas because they
have individual metrics.

git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@2872 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/include/vrt.h
varnish-cache/lib/libvcl/vcc_backend.c
varnish-cache/lib/libvcl/vcc_fixed_token.c

index de5f15b7e6fa7e3658d9bf50be0e1e30c9d5fe92..a8eb9b47fb9dea0929a24ccc11159bc4286fea01 100644 (file)
@@ -45,10 +45,10 @@ struct sockaddr;
  * A backend is a host+port somewhere on the network
  */
 struct vrt_backend {
-       const char      *portname;
-       const char      *hostname;
-       const char      *vcl_name;
-       const char      *ident;
+       char            *portname;
+       char            *hostname;
+       char            *vcl_name;
+       char            *ident;
        double          connect_timeout;
 };
 
index 62ad3a263c0e2ce34e49ee6557758302878caa90..f54d988bd8b806b8f79d747621e19ad2ecc06741 100644 (file)
@@ -72,16 +72,14 @@ CheckHostPort(const char *host, const char *port)
  */
 
 static void
-vcc_EmitBeIdent(struct vsb *v, const struct token *qual, int serial, const struct token *first, const struct token *last)
+vcc_EmitBeIdent(struct vsb *v, const struct token *name, const char *qual, int serial, const struct token *first, const struct token *last)
 {
 
        vsb_printf(v, "\t.ident =");
-       if (serial != 0 && qual != NULL) {
-               vsb_printf(v, "\n\t    \"%.*s \"", PF(qual));
-               qual = VTAILQ_NEXT(qual, list);
-               vsb_printf(v, "\n\t    \"%.*s \"", PF(qual));
-               vsb_printf(v, "\n\t    \":: %d :: \"", serial);
-       }
+       AN(qual);
+       vsb_printf(v, "\n\t    \"%s %.*s\"", qual, PF(name));
+       if (serial != 0)
+               vsb_printf(v, "\n\t    \"[%d]\"", serial);
        while (first != last) {
                if (first->dec != NULL)
                        vsb_printf(v, "\n\t    \"\\\"\" %.*s \"\\\" \"",
@@ -213,7 +211,7 @@ vcc_FieldsOk(struct tokenlist *tl, const struct fld_spec *fs)
  */
 
 static void
-vcc_ParseBackendHost(struct tokenlist *tl, int *nbh, const struct token *qual, int serial)
+vcc_ParseBackendHost(struct tokenlist *tl, int *nbh, const struct token *name, const char *qual, int serial)
 {
        struct token *t_field;
        struct token *t_first;
@@ -274,6 +272,7 @@ vcc_ParseBackendHost(struct tokenlist *tl, int *nbh, const struct token *qual, i
                        t_host = tl->t;
                        vcc_NextToken(tl);
                } else if (vcc_IdIs(t_field, "port")) {
+                       ExpectErr(tl, CSTR);
                        assert(tl->t->dec != NULL);
                        t_port = tl->t;
                        vcc_NextToken(tl);
@@ -330,8 +329,8 @@ vcc_ParseBackendHost(struct tokenlist *tl, int *nbh, const struct token *qual, i
        }
 
        ExpectErr(tl, '}');
-       vcc_EmitBeIdent(tl->fh, qual, serial, t_first, tl->t);
-       Fh(tl, 0, "\t.vcl_name = \"%.*s", PF(qual));
+       vcc_EmitBeIdent(tl->fh, name, qual, serial, t_first, tl->t);
+       Fh(tl, 0, "\t.vcl_name = \"%.*s", PF(name));
        if (serial)
                Fh(tl, 0, "[%d]", serial);
        Fh(tl, 0, "\"\n};\n");
@@ -356,7 +355,7 @@ vcc_ParseBackend(struct tokenlist *tl)
        h->name = tl->t;
        vcc_NextToken(tl);
 
-       vcc_ParseBackendHost(tl, &nbh, h->name, 0);
+       vcc_ParseBackendHost(tl, &nbh, h->name, "backend", 0);
        ERRCHK(tl);
 
        h->hnum = nbh;
@@ -421,7 +420,8 @@ vcc_ParseRandomDirector(struct tokenlist *tl, struct token *t_dir)
                        vcc_IsField(tl, &t_field, fs);
                        ERRCHK(tl);
                        if (vcc_IdIs(t_field, "backend")) {
-                               vcc_ParseBackendHost(tl, &nbh, t_dir, nelem);
+                               vcc_ParseBackendHost(tl, &nbh,
+                                   t_dir, "random", nelem);
                                Fc(tl, 0, " .host = &bh_%d,", nbh);
                                ERRCHK(tl);
                        } else if (vcc_IdIs(t_field, "weight")) {
index 00c38f18a69812ca81534bc5dde23f8e64f0ad7f..237622e0ad81983c1050df0e2c6ecc7586ab66d1 100644 (file)
@@ -399,10 +399,10 @@ vcl_output_lang_h(struct vsb *sb)
        vsb_cat(sb, " * A backend is a host+port somewhere on the network\n");
        vsb_cat(sb, " */\n");
        vsb_cat(sb, "struct vrt_backend {\n");
-       vsb_cat(sb, "   const char      *portname;\n");
-       vsb_cat(sb, "   const char      *hostname;\n");
-       vsb_cat(sb, "   const char      *vcl_name;\n");
-       vsb_cat(sb, "   const char      *ident;\n");
+       vsb_cat(sb, "   char            *portname;\n");
+       vsb_cat(sb, "   char            *hostname;\n");
+       vsb_cat(sb, "   char            *vcl_name;\n");
+       vsb_cat(sb, "   char            *ident;\n");
        vsb_cat(sb, "   double          connect_timeout;\n");
        vsb_cat(sb, "};\n");
        vsb_cat(sb, "\n");