]> err.no Git - varnish/commitdiff
Rename VBE_NewBackend() to VBE_AddBackend() and make it responsible for
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Tue, 5 Feb 2008 09:57:46 +0000 (09:57 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Tue, 5 Feb 2008 09:57:46 +0000 (09:57 +0000)
the identity check for reusing backends between VCL.

Disable the round-robin code for now, I'm trying to get the random code
working first.

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

varnish-cache/bin/varnishd/cache.h
varnish-cache/bin/varnishd/cache_backend.c
varnish-cache/bin/varnishd/cache_backend_round_robin.c
varnish-cache/bin/varnishd/cache_backend_simple.c

index b58a5d28abca3ae6a03c39e95d4336b5303135a6..24cf10ea29d38cc43e4a6416f69a56042f185b48 100644 (file)
@@ -408,6 +408,7 @@ struct backend {
        pthread_mutex_t         mtx;
 
        struct backend_method   *method;
+       const char              *ident;
        void                    *priv;
 
        int                     health;
@@ -442,7 +443,7 @@ void VBE_free_bereq(struct bereq *bereq);
 extern struct backendlist backendlist;
 void VBE_DropRef(struct backend *);
 void VBE_DropRefLocked(struct backend *);
-struct backend *VBE_NewBackend(struct backend_method *method);
+struct backend *VBE_AddBackend(struct backend_method *method, const char *ident);
 struct vbe_conn *VBE_NewConn(void);
 void VBE_ReleaseConn(struct vbe_conn *);
 void VBE_UpdateHealth(const struct sess *sp, const struct vbe_conn *, int);
@@ -471,7 +472,7 @@ void CNT_Init(void);
 /* cache_cli.c [CLI] */
 void CLI_Init(void);
 extern pthread_t cli_thread;
-#define ASSERT_CLI() do {assert(phtread_self() == cli_thread);} while (0)
+#define ASSERT_CLI() do {assert(pthread_self() == cli_thread);} while (0)
 
 /* cache_expiry.c */
 void EXP_Insert(struct object *o);
index cc2f6cbe39c4fa8e1eda8600dcc04d555f45884d..92fdacb54ffacef75e1d6dd6a739ed1dc780df44 100644 (file)
@@ -211,27 +211,6 @@ VBE_ReleaseConn(struct vbe_conn *vc)
        UNLOCK(&VBE_mtx);
 }
 
-/*--------------------------------------------------------------------*/
-
-struct backend *
-VBE_NewBackend(struct backend_method *method)
-{
-       struct backend *b;
-
-       b = calloc(sizeof *b, 1);
-       XXXAN(b);
-       b->magic = BACKEND_MAGIC;
-       b->method = method;
-
-       MTX_INIT(&b->mtx);
-       b->refcount = 1;
-
-       b->last_check = TIM_mono();
-       b->minute_limit = 1;
-
-       VTAILQ_INSERT_TAIL(&backendlist, b, list);
-       return (b);
-}
 
 /*--------------------------------------------------------------------*/
 
@@ -344,6 +323,46 @@ VBE_AddBackendMethod(const struct backend_method *bem)
                bem->init();
 }
 
+/*--------------------------------------------------------------------
+ * Add a backend/director instance when loading a VCL.
+ * If an existing backend is matched, grab a refcount and return NULL.
+ * Else create a new backend structure and return that with reference
+ * initialized to one.
+ */
+
+struct backend *
+VBE_AddBackend(struct backend_method *method, const char *ident)
+{
+       struct backend *b;
+
+       ASSERT_CLI();
+       VTAILQ_FOREACH(b, &backendlist, list) {
+               CHECK_OBJ_NOTNULL(b, BACKEND_MAGIC);
+               if (b->method != method)
+                       continue;
+               if (strcmp(b->ident, ident))
+                       continue;
+               b->refcount++;
+               return (NULL);
+       }
+
+       b = calloc(sizeof *b, 1);
+       XXXAN(b);
+       b->magic = BACKEND_MAGIC;
+       b->method = method;
+       b->ident = strdup(ident);
+       XXXAN(b->ident);
+
+       MTX_INIT(&b->mtx);
+       b->refcount = 1;
+
+       b->last_check = TIM_mono();
+       b->minute_limit = 1;
+
+       VTAILQ_INSERT_TAIL(&backendlist, b, list);
+       return (b);
+}
+
 /*--------------------------------------------------------------------*/
 
 void
@@ -353,5 +372,7 @@ VBE_Init(void)
        MTX_INIT(&VBE_mtx);
        VBE_AddBackendMethod(&backend_method_simple);
        VBE_AddBackendMethod(&backend_method_random);
+#if 0
        VBE_AddBackendMethod(&backend_method_round_robin);
+#endif
 }
index 462a920ef18d62a5ec707e101dc4592fb505749c..c701e8cf0372de8c3eeaeaefc2792f2145b6b918 100644 (file)
@@ -30,6 +30,8 @@
  *
  */
 
+#if 0
+
 #include <sys/types.h>
 #include <sys/socket.h>
 
@@ -487,3 +489,4 @@ VRT_init_round_robin_backend(struct backend **bp, const struct vrt_round_robin_b
        *bp = b;
 }
 
+#endif
index 5d0eecfe52666b7db5454806f051ed359f351b5a..a9be5def8c05b59bb8283608672a5075a5d4608f 100644 (file)
@@ -364,22 +364,9 @@ VRT_init_simple_backend(struct backend **bp, const struct vrt_simple_backend *t)
        struct bes *bes;
        const char *p;
        
-       /*
-        * Scan existing backends to see if we can recycle one of them.
-        */
-       VTAILQ_FOREACH(b, &backendlist, list) {
-               CHECK_OBJ_NOTNULL(b, BACKEND_MAGIC);
-               if (b->method != &backend_method_simple)
-                       continue;
-               CAST_OBJ_NOTNULL(bes, b->priv, BES_MAGIC);
-               if (strcmp(bes->ident, t->ident))
-                       continue;
-               b->refcount++;
-               *bp = b;
-               return;
-       }
-
-       b = VBE_NewBackend(&backend_method_simple);
+       b = VBE_AddBackend(&backend_method_simple, t->ident);
+       if (b == NULL)
+               return;         /* ref to existing backend */
 
        bes = calloc(sizeof *bes, 1);
        XXXAN(bes);