[experimental-ims] 3bf99f6 Firmly split manager and child views of hashing.
Geoff Simmons
geoff at varnish-cache.org
Mon Jan 9 21:52:31 CET 2012
commit 3bf99f6c093d87b49cdec143138c98c3cb4e14f6
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Thu Nov 10 09:33:39 2011 +0000
Firmly split manager and child views of hashing.
diff --git a/bin/varnishd/Makefile.am b/bin/varnishd/Makefile.am
index c95b09a..f7c7620 100644
--- a/bin/varnishd/Makefile.am
+++ b/bin/varnishd/Makefile.am
@@ -54,6 +54,7 @@ varnishd_SOURCES = \
cache_ws.c \
hash/hash_classic.c \
hash/hash_critbit.c \
+ hash/hash_mgt.c \
hash/hash_simple_list.c \
mgt/mgt_child.c \
mgt/mgt_cli.c \
diff --git a/bin/varnishd/cache_hash.c b/bin/varnishd/cache_hash.c
index 669fd40..db865de 100644
--- a/bin/varnishd/cache_hash.c
+++ b/bin/varnishd/cache_hash.c
@@ -59,7 +59,6 @@
#include "cache.h"
#include "hash/hash_slinger.h"
-#include "vav.h"
#include "vsha256.h"
static const struct hash_slinger *hash;
@@ -743,53 +742,11 @@ HSH_Deref(struct worker *w, struct objcore *oc, struct object **oo)
}
void
-HSH_Init(void)
+HSH_Init(const struct hash_slinger *slinger)
{
assert(DIGEST_LEN == SHA256_LEN); /* avoid #include pollution */
- hash = heritage.hash;
+ hash = slinger;
if (hash->start != NULL)
hash->start();
}
-
-static const struct choice hsh_choice[] = {
- { "classic", &hcl_slinger },
- { "simple", &hsl_slinger },
- { "simple_list", &hsl_slinger }, /* backwards compat */
- { "critbit", &hcb_slinger },
- { NULL, NULL }
-};
-
-/*--------------------------------------------------------------------*/
-
-void
-HSH_config(const char *h_arg)
-{
- char **av;
- int ac;
- const struct hash_slinger *hp;
-
- ASSERT_MGT();
- av = VAV_Parse(h_arg, NULL, ARGV_COMMA);
- AN(av);
-
- if (av[0] != NULL)
- ARGV_ERR("%s\n", av[0]);
-
- if (av[1] == NULL)
- ARGV_ERR("-h argument is empty\n");
-
- for (ac = 0; av[ac + 2] != NULL; ac++)
- continue;
-
- hp = pick(hsh_choice, av[1], "hash");
- CHECK_OBJ_NOTNULL(hp, SLINGER_MAGIC);
- VSB_printf(vident, ",-h%s", av[1]);
- heritage.hash = hp;
- if (hp->init != NULL)
- hp->init(ac, av + 2);
- else if (ac > 0)
- ARGV_ERR("Hash method \"%s\" takes no arguments\n",
- hp->name);
-}
-
diff --git a/bin/varnishd/cache_main.c b/bin/varnishd/cache_main.c
index 5dc2d00..f8f06e1 100644
--- a/bin/varnishd/cache_main.c
+++ b/bin/varnishd/cache_main.c
@@ -120,7 +120,7 @@ child_main(void)
Pool_Init();
EXP_Init();
- HSH_Init();
+ HSH_Init(heritage.hash);
BAN_Init();
VCA_Init();
diff --git a/bin/varnishd/hash/hash_mgt.c b/bin/varnishd/hash/hash_mgt.c
new file mode 100644
index 0000000..6226749
--- /dev/null
+++ b/bin/varnishd/hash/hash_mgt.c
@@ -0,0 +1,84 @@
+/*-
+ * Copyright (c) 2006 Verdens Gang AS
+ * Copyright (c) 2006-2011 Varnish Software AS
+ * All rights reserved.
+ *
+ * Author: Poul-Henning Kamp <phk at phk.freebsd.dk>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+#include "config.h"
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "mgt/mgt.h"
+#include "heritage.h"
+
+#include "hash/hash_slinger.h"
+#include "vav.h"
+
+static const struct choice hsh_choice[] = {
+ { "classic", &hcl_slinger },
+ { "simple", &hsl_slinger },
+ { "simple_list", &hsl_slinger }, /* backwards compat */
+ { "critbit", &hcb_slinger },
+ { NULL, NULL }
+};
+
+/*--------------------------------------------------------------------*/
+
+void
+HSH_config(const char *h_arg)
+{
+ char **av;
+ int ac;
+ const struct hash_slinger *hp;
+
+ ASSERT_MGT();
+ av = VAV_Parse(h_arg, NULL, ARGV_COMMA);
+ AN(av);
+
+ if (av[0] != NULL)
+ ARGV_ERR("%s\n", av[0]);
+
+ if (av[1] == NULL)
+ ARGV_ERR("-h argument is empty\n");
+
+ for (ac = 0; av[ac + 2] != NULL; ac++)
+ continue;
+
+ hp = pick(hsh_choice, av[1], "hash");
+ CHECK_OBJ_NOTNULL(hp, SLINGER_MAGIC);
+ VSB_printf(vident, ",-h%s", av[1]);
+ heritage.hash = hp;
+ if (hp->init != NULL)
+ hp->init(ac, av + 2);
+ else if (ac > 0)
+ ARGV_ERR("Hash method \"%s\" takes no arguments\n",
+ hp->name);
+}
+
diff --git a/bin/varnishd/hash/hash_slinger.h b/bin/varnishd/hash/hash_slinger.h
index 2c142cf..23b892d 100644
--- a/bin/varnishd/hash/hash_slinger.h
+++ b/bin/varnishd/hash/hash_slinger.h
@@ -57,7 +57,7 @@ struct objcore *HSH_Lookup(struct sess *sp, struct objhead **poh);
void HSH_Unbusy(const struct sess *sp);
void HSH_Ref(struct objcore *o);
void HSH_Drop(struct sess *sp);
-void HSH_Init(void);
+void HSH_Init(const struct hash_slinger *slinger);
void HSH_AddString(const struct sess *sp, const char *str);
struct objcore *HSH_Insert(const struct sess *sp);
void HSH_Purge(const struct sess *, struct objhead *, double ttl, double grace);
More information about the varnish-commit
mailing list