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