]> err.no Git - varnish/commitdiff
Complete the VCC part of random directors, runtime code next.
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Mon, 4 Feb 2008 09:51:23 +0000 (09:51 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Mon, 4 Feb 2008 09:51:23 +0000 (09:51 +0000)
git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@2423 d4fa192b-c00b-0410-8231-f00ffab90ce4

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

index 8527a918382c3bc0c86bbd3110cbb4a8f718a1d1..e3799241586518433b79a34fdf1b13f3ef2a84bb 100644 (file)
@@ -437,8 +437,11 @@ struct backend_method backend_method_random = {
 /*--------------------------------------------------------------------*/
 
 void
-VRT_init_random_backend(struct backend **bp, const struct vrt_random_backend *t)
+VRT_init_random_backend(struct backend **bp, const struct vrt_dir_random *t)
 {
+       (void)bp;
+       (void)t;
+#if 0
        struct backend *b;
        struct ber *ber;
        struct vrt_backend_entry *be;
@@ -508,5 +511,6 @@ VRT_init_random_backend(struct backend **bp, const struct vrt_random_backend *t)
        ber->blist = bs;
        
        *bp = b;
+#endif
 }
 
index f56b725f743035640720ebc601389d8b6cf19140..45c8b83d9fa2abfc3121e271ae8e480544e71f7e 100644 (file)
@@ -72,7 +72,7 @@ struct vrt_dir_random_entry {
 
 struct vrt_dir_random {
        unsigned                        nmember;
-       struct vrt_dir_random_entry     *members;
+       const struct vrt_dir_random_entry       *members;
        const char                      *ident;
 };
 
@@ -135,7 +135,7 @@ void VRT_Rollback(struct sess *sp);
 /* Backend related */
 void VRT_init_simple_backend(struct backend **, const struct vrt_simple_backend *);
 void VRT_init_round_robin_backend(struct backend **, const struct vrt_round_robin_backend *);
-void VRT_init_random_backend(struct backend **, const struct vrt_random_backend *);
+void VRT_init_random_backend(struct backend **, const struct vrt_dir_random *);
 void VRT_fini_backend(struct backend *);
 
 char *VRT_IP_string(const struct sess *sp, const struct sockaddr *sa);
index e5e28d6955650efbea4ae55afc6b8b82c0802f90..7936112ee1227ca26fcdbb3e91b8bee45d34da5f 100644 (file)
@@ -217,7 +217,6 @@ vcc_ParseBackendHost(struct tokenlist *tl, int *nbh)
 
        fs = vcc_FldSpec(tl, "!host", "?port", NULL);
        t_first = tl->t;
-       *nbh = tl->nbackend_host++;
 
        if (tl->t->tok == ID) {
                VTAILQ_FOREACH(h, &tl->hosts, list) {
@@ -240,8 +239,8 @@ vcc_ParseBackendHost(struct tokenlist *tl, int *nbh)
        ExpectErr(tl, '{');
        vcc_NextToken(tl);
 
-       Fh(tl, 0, "\nstatic const struct vrt_backend_host bh_%d = {\n",
-           *nbh);
+       *nbh = tl->nbackend_host++;
+       Fh(tl, 0, "\nstatic const struct vrt_backend_host bh_%d = {\n", *nbh);
 
        /* Check for old syntax */
        if (tl->t->tok == ID && vcc_IdIs(tl->t, "set")) {
@@ -376,6 +375,9 @@ vcc_ParseRandomDirector(struct tokenlist *tl, const struct token *t_first, const
        int nbh, nelem;
        struct fld_spec *fs;
 
+       Fh(tl, 1, "\n#define VGC_backend_%.*s (VCL_conf.backend[%d])\n",
+           PF(t_dir), tl->nbackend);
+
        fs = vcc_FldSpec(tl, "!backend", "?weight", NULL);
 
        vcc_NextToken(tl);              /* ID: policy (= random) */
@@ -418,14 +420,18 @@ vcc_ParseRandomDirector(struct tokenlist *tl, const struct token *t_first, const
                vcc_NextToken(tl);
        }
        Fc(tl, 0, "\t{ .host = 0 }\n");
-       Fc(tl, 0, "}\n");
+       Fc(tl, 0, "};\n");
        Fc(tl, 0,
-           "\nstatic const struct vrt_dir_random vdr_%.*s[] = {\n",
+           "\nstatic const struct vrt_dir_random vdr_%.*s = {\n",
            PF(t_dir));
        Fc(tl, 0, "\t.nmember = %d,\n", nelem);
        Fc(tl, 0, "\t.members = vdre_%.*s,\n", PF(t_dir));
        vcc_EmitBeIdent(tl->fc, t_first, tl->t);
+       Fc(tl, 0, "};\n");
        vcc_NextToken(tl);
+       Fi(tl, 0, "\tVRT_init_random_backend(&VGC_backend_%.*s , &vdr_%.*s);\n",
+           PF(t_dir), PF(t_dir));
+       Ff(tl, 0, "\tVRT_fini_random_backend(VGC_backend_%.*s);\n", PF(t_dir));
 }
 
 /*--------------------------------------------------------------------
index 0b82433b20388a45e60180cacebc7531b9648ec1..d49f2656baa5d8e0d26eb0dafd7f9d733f6c68c5 100644 (file)
@@ -423,7 +423,7 @@ vcl_output_lang_h(struct vsb *sb)
        vsb_cat(sb, "\n");
        vsb_cat(sb, "struct vrt_dir_random {\n");
        vsb_cat(sb, "   unsigned                        nmember;\n");
-       vsb_cat(sb, "   struct vrt_dir_random_entry     *members;\n");
+       vsb_cat(sb, "   const struct vrt_dir_random_entry       *members;\n");
        vsb_cat(sb, "   const char                      *ident;\n");
        vsb_cat(sb, "};\n");
        vsb_cat(sb, "\n");
@@ -486,7 +486,7 @@ vcl_output_lang_h(struct vsb *sb)
        vsb_cat(sb, "/* Backend related */\n");
        vsb_cat(sb, "void VRT_init_simple_backend(struct backend **, const struct vrt_simple_backend *);\n");
        vsb_cat(sb, "void VRT_init_round_robin_backend(struct backend **, const struct vrt_round_robin_backend *);\n");
-       vsb_cat(sb, "void VRT_init_random_backend(struct backend **, const struct vrt_random_backend *);\n");
+       vsb_cat(sb, "void VRT_init_random_backend(struct backend **, const struct vrt_dir_random *);\n");
        vsb_cat(sb, "void VRT_fini_backend(struct backend *);\n");
        vsb_cat(sb, "\n");
        vsb_cat(sb, "char *VRT_IP_string(const struct sess *sp, const struct sockaddr *sa);\n");