r5087 - in trunk/varnish-cache: bin/varnishd include lib/libvcl

phk at varnish-cache.org phk at varnish-cache.org
Wed Aug 11 11:40:20 CEST 2010


Author: phk
Date: 2010-08-11 11:40:20 +0200 (Wed, 11 Aug 2010)
New Revision: 5087

Modified:
   trunk/varnish-cache/bin/varnishd/cache_backend.h
   trunk/varnish-cache/bin/varnishd/cache_backend_cfg.c
   trunk/varnish-cache/include/vrt.h
   trunk/varnish-cache/lib/libvcl/vcc_backend.c
Log:
Identify backends using the (vcl_name, ipv4, ipv6) triplet and drop
the "ident string".

(see also: docs/sphinx/phk/backends.rst)



Modified: trunk/varnish-cache/bin/varnishd/cache_backend.h
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_backend.h	2010-08-11 08:59:40 UTC (rev 5086)
+++ trunk/varnish-cache/bin/varnishd/cache_backend.h	2010-08-11 09:40:20 UTC (rev 5087)
@@ -114,14 +114,14 @@
 #define BACKEND_MAGIC		0x64c4c7c6
 
 	char			*hosthdr;
-	char			*ident;
 	char			*vcl_name;
+	char			*ipv4_addr;
+	char			*ipv6_addr;
+	char			*port;
 	double			connect_timeout;
 	double			first_byte_timeout;
 	double			between_bytes_timeout;
 
-	uint32_t		hash;
-
 	VTAILQ_ENTRY(backend)	list;
 	int			refcount;
 	struct lock		mtx;

Modified: trunk/varnish-cache/bin/varnishd/cache_backend_cfg.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_backend_cfg.c	2010-08-11 08:59:40 UTC (rev 5086)
+++ trunk/varnish-cache/bin/varnishd/cache_backend_cfg.c	2010-08-11 09:40:20 UTC (rev 5087)
@@ -45,7 +45,6 @@
 
 #include "cache.h"
 #include "vrt.h"
-#include "vsha256.h"
 #include "cache_backend.h"
 #include "cli_priv.h"
 
@@ -67,10 +66,12 @@
 
 	ASSERT_CLI();
 	VTAILQ_REMOVE(&backends, b, list);
-	free(b->ident);
 	free(b->hosthdr);
 	free(b->ipv4);
+	free(b->ipv4_addr);
 	free(b->ipv6);
+	free(b->ipv6_addr);
+	free(b->port);
 	FREE_OBJ(b);
 	VSC_main->n_backend--;
 }
@@ -148,7 +149,9 @@
 	VBE_DropRefLocked(b);
 }
 
-/*--------------------------------------------------------------------*/
+/*--------------------------------------------------------------------
+ * See lib/libvcl/vcc_backend.c::emit_sockaddr()
+ */
 
 static void
 copy_sockaddr(struct sockaddr **sa, socklen_t *len, const unsigned char *src)
@@ -156,7 +159,7 @@
 
 	assert(*src > 0);
 	*sa = malloc(*src);
-	AN(*sa);
+	XXXAN(*sa);
 	memcpy(*sa, src + 1, *src);
 	*len = *src;
 }
@@ -171,47 +174,25 @@
 VBE_AddBackend(struct cli *cli, const struct vrt_backend *vb)
 {
 	struct backend *b;
-	uint32_t u;
-	struct SHA256Context ctx;
-	uint8_t hash[SHA256_LEN];
 
-	AN(vb->ident);
+	AN(vb->vcl_name);
 	assert(vb->ipv4_sockaddr != NULL || vb->ipv6_sockaddr != NULL);
 	(void)cli;
 	ASSERT_CLI();
 
-	/* calculate a hash of (ident + ipv4_sockaddr + ipv6_sockaddr) */
-	SHA256_Init(&ctx);
-	SHA256_Update(&ctx, vb->ident, strlen(vb->ident));
-	if (vb->ipv4_sockaddr != NULL)
-		SHA256_Update(&ctx,
-		    vb->ipv4_sockaddr + 1, vb->ipv4_sockaddr[0]);
-	if (vb->ipv6_sockaddr != NULL)
-		SHA256_Update(&ctx,
-		    vb->ipv6_sockaddr + 1, vb->ipv6_sockaddr[0]);
-
-	SHA256_Final(hash, &ctx);
-	memcpy(&u, hash, sizeof u);
-
 	/* Run through the list and see if we already have this backend */
 	VTAILQ_FOREACH(b, &backends, list) {
 		CHECK_OBJ_NOTNULL(b, BACKEND_MAGIC);
-		if (u != b->hash)
+		if (strcmp(b->vcl_name, vb->vcl_name))
 			continue;
-		if (strcmp(b->ident, vb->ident))
+		if (vb->ipv4_sockaddr != NULL && (
+		    b->ipv4len != vb->ipv4_sockaddr[0] ||
+		    memcmp(b->ipv4, vb->ipv4_sockaddr + 1, b->ipv4len)))
 			continue;
-		if (vb->ipv4_sockaddr != NULL &&
-		    b->ipv4len != vb->ipv4_sockaddr[0])
+		if (vb->ipv6_sockaddr != NULL && (
+		    b->ipv6len != vb->ipv6_sockaddr[0] ||
+		    memcmp(b->ipv6, vb->ipv6_sockaddr + 1, b->ipv6len)))
 			continue;
-		if (vb->ipv6_sockaddr != NULL &&
-		    b->ipv6len != vb->ipv6_sockaddr[0])
-			continue;
-		if (b->ipv4len != 0 &&
-		    memcmp(b->ipv4, vb->ipv4_sockaddr + 1, b->ipv4len))
-			continue;
-		if (b->ipv6len != 0 &&
-		    memcmp(b->ipv6, vb->ipv6_sockaddr + 1, b->ipv6len))
-			continue;
 		b->refcount++;
 		return (b);
 	}
@@ -223,7 +204,6 @@
 	b->refcount = 1;
 
 	VTAILQ_INIT(&b->connlist);
-	b->hash = u;
 
 	VTAILQ_INIT(&b->troublelist);
 
@@ -231,8 +211,10 @@
 	 * This backend may live longer than the VCL that instantiated it
 	 * so we cannot simply reference the VCL's copy of things.
 	 */
-	REPLACE(b->ident, vb->ident);
 	REPLACE(b->vcl_name, vb->vcl_name);
+	REPLACE(b->ipv4_addr, vb->ipv4_addr);
+	REPLACE(b->ipv6_addr, vb->ipv6_addr);
+	REPLACE(b->port, vb->port);
 	REPLACE(b->hosthdr, vb->hosthdr);
 
 	b->connect_timeout = vb->connect_timeout;
@@ -304,8 +286,9 @@
 	ASSERT_CLI();
 	VTAILQ_FOREACH(b, &backends, list) {
 		CHECK_OBJ_NOTNULL(b, BACKEND_MAGIC);
-		cli_out(cli, "%p %s %d %d/%d\n",
-		    b, b->vcl_name, b->refcount,
+		cli_out(cli, "%p %s(%s,%s,:%s) %d %d/%d\n",
+		    b, b->vcl_name, b->ipv4_addr, b->ipv6_addr, b->port,
+		    b->refcount,
 		    b->n_conn, b->max_conn);
 	}
 }

Modified: trunk/varnish-cache/include/vrt.h
===================================================================
--- trunk/varnish-cache/include/vrt.h	2010-08-11 08:59:40 UTC (rev 5086)
+++ trunk/varnish-cache/include/vrt.h	2010-08-11 09:40:20 UTC (rev 5087)
@@ -62,16 +62,15 @@
  */
 struct vrt_backend {
 	const char			*vcl_name;
-	const char			*ident;
-
-	const char			*hosthdr;
-
-	const unsigned char		*ipv4_sockaddr;
 	const char			*ipv4_addr;
-	const unsigned char		*ipv6_sockaddr;
 	const char			*ipv6_addr;
 	const char			*port;
 
+	const unsigned char		*ipv4_sockaddr;
+	const unsigned char		*ipv6_sockaddr;
+
+	const char			*hosthdr;
+
 	double				connect_timeout;
 	double				first_byte_timeout;
 	double				between_bytes_timeout;

Modified: trunk/varnish-cache/lib/libvcl/vcc_backend.c
===================================================================
--- trunk/varnish-cache/lib/libvcl/vcc_backend.c	2010-08-11 08:59:40 UTC (rev 5086)
+++ trunk/varnish-cache/lib/libvcl/vcc_backend.c	2010-08-11 09:40:20 UTC (rev 5087)
@@ -592,7 +592,6 @@
 	ExpectErr(tl, '}');
 
 	/* We have parsed it all, emit the ident string */
-	vcc_EmitBeIdent(tl, tl->fb, serial, t_first, tl->t);
 
 	/* Emit the hosthdr field, fall back to .host if not specified */
 	Fb(tl, 0, "\t.hosthdr = ");




More information about the varnish-commit mailing list