From: phk Date: Thu, 26 Jun 2008 11:15:22 +0000 (+0000) Subject: Allow the selector to be chosen by parameter "acceptor" X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6a4515d793f6ed4223dfc9cba091a631faba9b55;p=varnish Allow the selector to be chosen by parameter "acceptor" git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@2826 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- diff --git a/varnish-cache/bin/varnishd/cache_acceptor.c b/varnish-cache/bin/varnishd/cache_acceptor.c index f631110a..b4ecb239 100644 --- a/varnish-cache/bin/varnishd/cache_acceptor.c +++ b/varnish-cache/bin/varnishd/cache_acceptor.c @@ -309,8 +309,9 @@ ccf_start(struct cli *cli, const char * const *av, void *priv) (void)cli; (void)av; (void)priv; - /* XXX: Add selector mechanism at some point */ - vca_act = vca_acceptors[0]; + + if (vca_act == NULL) + vca_act = vca_acceptors[0]; AN(vca_act); AN(vca_act->name); @@ -333,3 +334,35 @@ VCA_Init(void) CLI_AddFuncs(MASTER_CLI, vca_cmds); } + +void +VCA_tweak_acceptor(struct cli *cli, const char *arg) +{ + int i; + + if (arg == NULL) { + if (vca_act == NULL) + cli_out(cli, "default"); + else + cli_out(cli, "%s", vca_act->name); + + cli_out(cli, " ("); + for (i = 0; vca_acceptors[i] != NULL; i++) + cli_out(cli, "%s%s", i == 0 ? "" : ", ", + vca_acceptors[i]->name); + cli_out(cli, ")"); + return; + } + if (!strcmp(arg, "default")) { + vca_act = NULL; + return; + } + for (i = 0; vca_acceptors[i]->name; i++) { + if (!strcmp(arg, vca_acceptors[i]->name)) { + vca_act = vca_acceptors[i]; + return; + } + } + cli_out(cli, "Unknown acceptor"); + cli_result(cli, CLIS_PARAM); +} diff --git a/varnish-cache/bin/varnishd/common.h b/varnish-cache/bin/varnishd/common.h index efca146c..81a113a3 100644 --- a/varnish-cache/bin/varnishd/common.h +++ b/varnish-cache/bin/varnishd/common.h @@ -32,6 +32,10 @@ struct cli; struct sockaddr; +/* cache_acceptor.c */ +void VCA_tweak_acceptor(struct cli *cli, const char *arg); + + /* shmlog.c */ void VSL_MgtInit(const char *fn, unsigned size); extern struct varnish_stats *VSL_stats; diff --git a/varnish-cache/bin/varnishd/mgt_param.c b/varnish-cache/bin/varnishd/mgt_param.c index aee70ce5..270c19a2 100644 --- a/varnish-cache/bin/varnishd/mgt_param.c +++ b/varnish-cache/bin/varnishd/mgt_param.c @@ -404,6 +404,17 @@ tweak_cc_command(struct cli *cli, const struct parspec *par, const char *arg) /*--------------------------------------------------------------------*/ +static void +tweak_acceptor(struct cli *cli, const struct parspec *par, const char *arg) +{ + + /* XXX should have tweak_generic_string */ + (void)par; + VCA_tweak_acceptor(cli, arg); +} + +/*--------------------------------------------------------------------*/ + static void tweak_diag_bitmap(struct cli *cli, const struct parspec *par, const char *arg) { @@ -752,6 +763,10 @@ static const struct parspec parspec[] = { "SessionOpen shared memory record.\n", 0, "off", "bool" }, + { "acceptor", tweak_acceptor, NULL, 0, 0, + "Select the acceptor kernel interface.\n", + EXPERIMENTAL | MUST_RESTART, + "default", NULL }, { "diag_bitmap", tweak_diag_bitmap, 0, 0, 0, "Bitmap controlling diagnostics code:\n" " 0x00000001 - CNT_Session states.\n"