You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Yann Ylavic <yl...@gmail.com> on 2014/07/11 12:59:26 UTC
Re: svn commit: r1609680 - in /httpd/httpd/trunk/modules/proxy:
mod_proxy.c mod_proxy.h proxy_util.c
On Fri, Jul 11, 2014 at 12:36 PM, <jk...@apache.org> wrote:
> Author: jkaluza
> Date: Fri Jul 11 10:36:15 2014
> New Revision: 1609680
>
> URL: http://svn.apache.org/r1609680
> Log:
> mod_proxy: add ap_proxy_define_match_worker() and use it for ProxyPassMatch
> and ProxyMatch section to distinguish between normal workers and workers
> with regex substitutions in the name. Implement handling of such workers
> in ap_proxy_get_worker(). PR 43513
>
[...]
> --- httpd/httpd/trunk/modules/proxy/mod_proxy.c (original)
> +++ httpd/httpd/trunk/modules/proxy/mod_proxy.c Fri Jul 11 10:36:15 2014
> @@ -1647,15 +1647,30 @@ static const char *
> new->balancer = balancer;
> }
> else {
> - proxy_worker *worker = ap_proxy_get_worker(cmd->temp_pool, NULL, conf, de_socketfy(cmd->pool, r));
> + proxy_worker *worker = ap_proxy_get_worker(cmd->temp_pool, NULL, conf, new->real);
> int reuse = 0;
> if (!worker) {
> - const char *err = ap_proxy_define_worker(cmd->pool, &worker, NULL, conf, r, 0);
> + const char *err;
> + if (use_regex) {
> + err = ap_proxy_define_match_worker(cmd->pool, &worker, NULL,
> + conf, r, 0);
> + }
> + else {
> + err = ap_proxy_define_worker(cmd->pool, &worker, NULL,
> + conf, r, 0);
> + }
> if (err)
> return apr_pstrcat(cmd->temp_pool, "ProxyPass ", err, NULL);
>
> PROXY_COPY_CONF_PARAMS(worker, conf);
> - } else {
> + }
> + else if ((use_regex != 0) ^ (worker->s->is_name_matchable)) {
Maybe (worker->s->is_name_matchable != 0)?
> + return apr_pstrcat(cmd->temp_pool, "ProxyPass/<Proxy> and "
> + "ProxyPassMatch/<ProxyMatch> can't be used "
> + "altogether with the same worker name ",
> + "(", worker->s->name, ")", NULL);
> + }
> + else {
> reuse = 1;
> ap_log_error(APLOG_MARK, APLOG_INFO, 0, cmd->server, APLOGNO(01145)
> "Sharing worker '%s' instead of creating new worker '%s'",
[...]
> @@ -2354,12 +2371,24 @@ static const char *proxysection(cmd_parm
> worker = ap_proxy_get_worker(cmd->temp_pool, NULL, sconf,
> de_socketfy(cmd->temp_pool, (char*)conf->p));
> if (!worker) {
> - err = ap_proxy_define_worker(cmd->pool, &worker, NULL,
> - sconf, conf->p, 0);
> + if (use_regex) {
> + err = ap_proxy_define_match_worker(cmd->pool, &worker, NULL,
> + sconf, conf->p, 0);
> + }
> + else {
> + err = ap_proxy_define_worker(cmd->pool, &worker, NULL,
> + sconf, conf->p, 0);
> + }
> if (err)
> return apr_pstrcat(cmd->temp_pool, thiscmd->name,
> " ", err, NULL);
> }
> + else if ((use_regex != 0) ^ (worker->s->is_name_matchable)) {
Likewise?
> + return apr_pstrcat(cmd->temp_pool, "ProxyPass/<Proxy> and "
> + "ProxyPassMatch/<ProxyMatch> can't be used "
> + "altogether with the same worker name ",
> + "(", worker->s->name, ")", NULL);
> + }
Re: svn commit: r1609680 - in /httpd/httpd/trunk/modules/proxy: mod_proxy.c
mod_proxy.h proxy_util.c
Posted by Jan Kaluža <jk...@redhat.com>.
On 07/11/2014 12:59 PM, Yann Ylavic wrote:
> On Fri, Jul 11, 2014 at 12:36 PM, <jk...@apache.org> wrote:
>> Author: jkaluza
>> Date: Fri Jul 11 10:36:15 2014
>> New Revision: 1609680
>>
>> URL: http://svn.apache.org/r1609680
>> Log:
>> mod_proxy: add ap_proxy_define_match_worker() and use it for ProxyPassMatch
>> and ProxyMatch section to distinguish between normal workers and workers
>> with regex substitutions in the name. Implement handling of such workers
>> in ap_proxy_get_worker(). PR 43513
>>
> [...]
>> --- httpd/httpd/trunk/modules/proxy/mod_proxy.c (original)
>> +++ httpd/httpd/trunk/modules/proxy/mod_proxy.c Fri Jul 11 10:36:15 2014
>> @@ -1647,15 +1647,30 @@ static const char *
>> new->balancer = balancer;
>> }
>> else {
>> - proxy_worker *worker = ap_proxy_get_worker(cmd->temp_pool, NULL, conf, de_socketfy(cmd->pool, r));
>> + proxy_worker *worker = ap_proxy_get_worker(cmd->temp_pool, NULL, conf, new->real);
>> int reuse = 0;
>> if (!worker) {
>> - const char *err = ap_proxy_define_worker(cmd->pool, &worker, NULL, conf, r, 0);
>> + const char *err;
>> + if (use_regex) {
>> + err = ap_proxy_define_match_worker(cmd->pool, &worker, NULL,
>> + conf, r, 0);
>> + }
>> + else {
>> + err = ap_proxy_define_worker(cmd->pool, &worker, NULL,
>> + conf, r, 0);
>> + }
>> if (err)
>> return apr_pstrcat(cmd->temp_pool, "ProxyPass ", err, NULL);
>>
>> PROXY_COPY_CONF_PARAMS(worker, conf);
>> - } else {
>> + }
>> + else if ((use_regex != 0) ^ (worker->s->is_name_matchable)) {
>
> Maybe (worker->s->is_name_matchable != 0)?
Done in r1609688. Thanks.
>> + return apr_pstrcat(cmd->temp_pool, "ProxyPass/<Proxy> and "
>> + "ProxyPassMatch/<ProxyMatch> can't be used "
>> + "altogether with the same worker name ",
>> + "(", worker->s->name, ")", NULL);
>> + }
>> + else {
>> reuse = 1;
>> ap_log_error(APLOG_MARK, APLOG_INFO, 0, cmd->server, APLOGNO(01145)
>> "Sharing worker '%s' instead of creating new worker '%s'",
> [...]
>> @@ -2354,12 +2371,24 @@ static const char *proxysection(cmd_parm
>> worker = ap_proxy_get_worker(cmd->temp_pool, NULL, sconf,
>> de_socketfy(cmd->temp_pool, (char*)conf->p));
>> if (!worker) {
>> - err = ap_proxy_define_worker(cmd->pool, &worker, NULL,
>> - sconf, conf->p, 0);
>> + if (use_regex) {
>> + err = ap_proxy_define_match_worker(cmd->pool, &worker, NULL,
>> + sconf, conf->p, 0);
>> + }
>> + else {
>> + err = ap_proxy_define_worker(cmd->pool, &worker, NULL,
>> + sconf, conf->p, 0);
>> + }
>> if (err)
>> return apr_pstrcat(cmd->temp_pool, thiscmd->name,
>> " ", err, NULL);
>> }
>> + else if ((use_regex != 0) ^ (worker->s->is_name_matchable)) {
>
> Likewise?
>
>> + return apr_pstrcat(cmd->temp_pool, "ProxyPass/<Proxy> and "
>> + "ProxyPassMatch/<ProxyMatch> can't be used "
>> + "altogether with the same worker name ",
>> + "(", worker->s->name, ")", NULL);
>> + }