From c984a2e5f30ea86a9d63ac3cae783a98c18c3bbf Mon Sep 17 00:00:00 2001 From: Jim Jagielski Date: Mon, 14 Oct 2013 16:12:30 +0000 Subject: [PATCH] Ensure that userland format of UDS is the same as how it is configured, no matter how we store and use it internally. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1531962 13f79535-47bb-0310-9956-ffa450edef68 --- modules/proxy/mod_proxy.c | 20 ++++++------- modules/proxy/mod_proxy.h | 10 +++++++ modules/proxy/mod_proxy_balancer.c | 22 +++++++------- modules/proxy/proxy_util.c | 48 +++++++++++++++++++++--------- 4 files changed, 65 insertions(+), 35 deletions(-) diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c index 36e08e9bec..c55439283f 100644 --- a/modules/proxy/mod_proxy.c +++ b/modules/proxy/mod_proxy.c @@ -1544,15 +1544,15 @@ static const char * } else { reuse = 1; ap_log_error(APLOG_MARK, APLOG_INFO, 0, cmd->server, APLOGNO(01145) - "Sharing worker '%s%s' instead of creating new worker '%s'", - worker->s->name, (worker->s->uds?"|":""), new->real); + "Sharing worker '%s' instead of creating new worker '%s'", + ap_proxy_worker_name(cmd->pool, worker), new->real); } for (i = 0; i < arr->nelts; i++) { if (reuse) { ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server, APLOGNO(01146) - "Ignoring parameter '%s=%s' for worker '%s%s' because of worker sharing", - elts[i].key, elts[i].val, worker->s->name, (worker->s->uds?"|":"")); + "Ignoring parameter '%s=%s' for worker '%s' because of worker sharing", + elts[i].key, elts[i].val, ap_proxy_worker_name(cmd->pool, worker)); } else { const char *err = set_worker_param(cmd->pool, worker, elts[i].key, elts[i].val); @@ -2017,14 +2017,14 @@ static const char *add_member(cmd_parms *cmd, void *dummy, const char *arg) if ((err = ap_proxy_define_worker(cmd->pool, &worker, balancer, conf, name, 0)) != NULL) return apr_pstrcat(cmd->temp_pool, "BalancerMember ", err, NULL); ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, cmd->server, APLOGNO(01148) - "Defined worker '%s%s' for balancer '%s'", - worker->s->name, (worker->s->uds ? "|" : ""), balancer->s->name); + "Defined worker '%s' for balancer '%s'", + ap_proxy_worker_name(cmd->pool, worker), balancer->s->name); PROXY_COPY_CONF_PARAMS(worker, conf); } else { reuse = 1; ap_log_error(APLOG_MARK, APLOG_INFO, 0, cmd->server, APLOGNO(01149) - "Sharing worker '%s%s' instead of creating new worker '%s'", - worker->s->name, (worker->s->uds?"|":""), name); + "Sharing worker '%s' instead of creating new worker '%s'", + ap_proxy_worker_name(cmd->pool, worker), name); } arr = apr_table_elts(params); @@ -2032,8 +2032,8 @@ static const char *add_member(cmd_parms *cmd, void *dummy, const char *arg) for (i = 0; i < arr->nelts; i++) { if (reuse) { ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server, APLOGNO(01150) - "Ignoring parameter '%s=%s' for worker '%s%s' because of worker sharing", - elts[i].key, elts[i].val, worker->s->name, (worker->s->uds?"|":"")); + "Ignoring parameter '%s=%s' for worker '%s' because of worker sharing", + elts[i].key, elts[i].val, ap_proxy_worker_name(cmd->pool, worker)); } else { err = set_worker_param(cmd->pool, worker, elts[i].key, elts[i].val); diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h index 2d0af8afaf..b64f78ba4b 100644 --- a/modules/proxy/mod_proxy.h +++ b/modules/proxy/mod_proxy.h @@ -587,6 +587,16 @@ typedef __declspec(dllimport) const char * /* Connection pool API */ +/** + * Return the user-land, UDS aware worker name + * @param p memory pool used for displaying worker name + * @param worker the worker + * @return name + */ + +PROXY_DECLARE(char *) ap_proxy_worker_name(apr_pool_t *p, + proxy_worker *worker); + /** * Get the worker from proxy configuration * @param p memory pool used for finding worker diff --git a/modules/proxy/mod_proxy_balancer.c b/modules/proxy/mod_proxy_balancer.c index dd270a8d8b..4f68d24a23 100644 --- a/modules/proxy/mod_proxy_balancer.c +++ b/modules/proxy/mod_proxy_balancer.c @@ -118,8 +118,8 @@ static void init_balancer_members(apr_pool_t *p, server_rec *s, int worker_is_initialized; proxy_worker *worker = *workers; ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01158) - "Looking at %s -> %s%s initialized?", balancer->s->name, worker->s->name, - (worker->s->uds?"|":"")); + "Looking at %s -> %s initialized?", balancer->s->name, + ap_proxy_worker_name(p, worker)); worker_is_initialized = PROXY_WORKER_IS_INITIALIZED(worker); if (!worker_is_initialized) { ap_proxy_initialize_worker(worker, s, p); @@ -639,11 +639,11 @@ static int proxy_balancer_post_request(proxy_worker *worker, int val = ((int *)balancer->errstatuses->elts)[i]; if (r->status == val) { ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(01174) - "%s: Forcing worker (%s%s) into error state " + "%s: Forcing worker (%s) into error state " "due to status code %d matching 'failonstatus' " "balancer parameter", - balancer->s->name, worker->s->name, - (worker->s->uds?"|":""), val); + balancer->s->name, ap_proxy_worker_name(r->pool, worker), + val); worker->s->status |= PROXY_WORKER_IN_ERROR; worker->s->error_time = apr_time_now(); break; @@ -654,9 +654,9 @@ static int proxy_balancer_post_request(proxy_worker *worker, if (balancer->failontimeout && (apr_table_get(r->notes, "proxy_timedout")) != NULL) { ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02460) - "%s: Forcing worker (%s%s) into error state " + "%s: Forcing worker (%s) into error state " "due to timeout and 'failonstatus' parameter being set", - balancer->s->name, worker->s->name, (worker->s->uds?"|":"")); + balancer->s->name, ap_proxy_worker_name(r->pool, worker)); worker->s->status |= PROXY_WORKER_IN_ERROR; worker->s->error_time = apr_time_now(); @@ -1284,7 +1284,7 @@ static int balancer_handler(request_rec *r) worker = *workers; /* Start proxy_worker */ ap_rputs(" \n", r); - ap_rvputs(r, " ", worker->s->name, (worker->s->uds?"|":""), + ap_rvputs(r, " ", ap_proxy_worker_name(r->pool, worker), "\n", NULL); ap_rvputs(r, " ", worker->s->scheme, "\n", NULL); @@ -1533,8 +1533,8 @@ static int balancer_handler(request_rec *r) ap_escape_uri(r->pool, worker->s->name), "&nonce=", balancer->s->nonce, "\">", NULL); - ap_rvputs(r, (worker->s->uds ? "" : ""), worker->s->name, - (worker->s->uds ? "|" : ""), "", NULL); + ap_rvputs(r, (worker->s->uds ? "" : ""), ap_proxy_worker_name(r->pool, worker), + (worker->s->uds ? "" : ""), "", NULL); ap_rvputs(r, "", ap_escape_html(r->pool, worker->s->route), NULL); ap_rvputs(r, "", @@ -1559,7 +1559,7 @@ static int balancer_handler(request_rec *r) ap_rputs("
\n", r); if (wsel && bsel) { ap_rputs("

Edit worker settings for ", r); - ap_rvputs(r, (wsel->s->uds?"":""), wsel->s->name, (wsel->s->uds?"|":""), "

\n", NULL); + ap_rvputs(r, (wsel->s->uds?"":""), ap_proxy_worker_name(r->pool, wsel), (wsel->s->uds?"":""), "\n", NULL); ap_rputs("
pool, action), "\">\n", NULL); ap_rputs("
\n
Load factor:inreslist) { ap_log_perror(APLOG_MARK, APLOG_ERR, 0, conn->pool, APLOGNO(00923) - "Pooled connection 0x%pp for worker %s%s has been" + "Pooled connection 0x%pp for worker %s has been" " already returned to the connection pool.", conn, - worker->s->name, (worker->s->uds?"|":"")); + ap_proxy_worker_name(conn->pool, worker)); return APR_SUCCESS; } @@ -1487,6 +1487,26 @@ static apr_status_t connection_destructor(void *resource, void *params, * WORKER related... */ +PROXY_DECLARE(char *) ap_proxy_worker_name(apr_pool_t *p, + proxy_worker *worker) +{ + int rv; + apr_uri_t uri; + apr_pool_t *pool = p; + if (!worker->s->uds) { + return worker->s->name; + } + if (!pool) { + /* ugly */ + apr_pool_create(&pool, ap_server_conf->process->pool); + } + rv = apr_uri_parse(pool, worker->s->name, &uri); + if (rv != APR_SUCCESS) { + return apr_pstrcat(pool, worker->s->name, "|", NULL); + } + return apr_pstrcat(pool, uri.scheme, "://localhost/|sock:", uri.path, NULL); +} + PROXY_DECLARE(proxy_worker *) ap_proxy_get_worker(apr_pool_t *p, proxy_balancer *balancer, proxy_server_conf *conf, @@ -1707,8 +1727,8 @@ PROXY_DECLARE(apr_status_t) ap_proxy_share_worker(proxy_worker *worker, proxy_wo action = "re-using"; } ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf, APLOGNO(02338) - "%s shm[%d] (0x%pp) for worker: %s%s", action, i, (void *)shm, - worker->s->name, (worker->s->uds?"|":"")); + "%s shm[%d] (0x%pp) for worker: %s", action, i, (void *)shm, + ap_proxy_worker_name(NULL, worker)); worker->s = shm; worker->s->index = i; @@ -1723,13 +1743,13 @@ PROXY_DECLARE(apr_status_t) ap_proxy_initialize_worker(proxy_worker *worker, ser if (worker->s->status & PROXY_WORKER_INITIALIZED) { /* The worker is already initialized */ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(00924) - "worker %s%s shared already initialized", worker->s->name, - (worker->s->uds?"|":"")); + "worker %s shared already initialized", + ap_proxy_worker_name(p, worker)); } else { ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(00925) - "initializing worker %s%s shared", worker->s->name, - (worker->s->uds?"|":"")); + "initializing worker %s shared", + ap_proxy_worker_name(p, worker)); /* Set default parameters */ if (!worker->s->retry_set) { worker->s->retry = apr_time_from_sec(PROXY_WORKER_DEFAULT_RETRY); @@ -1765,13 +1785,13 @@ PROXY_DECLARE(apr_status_t) ap_proxy_initialize_worker(proxy_worker *worker, ser /* What if local is init'ed and shm isn't?? Even possible? */ if (worker->local_status & PROXY_WORKER_INITIALIZED) { ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(00926) - "worker %s%s local already initialized", worker->s->name, - (worker->s->uds?"|":"")); + "worker %s local already initialized", + ap_proxy_worker_name(p, worker)); } else { ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(00927) - "initializing worker %s%s local", worker->s->name, - (worker->s->uds?"|":"")); + "initializing worker %s local", + ap_proxy_worker_name(p, worker)); apr_global_mutex_lock(proxy_mutex); /* Now init local worker data */ if (worker->tmutex == NULL) { @@ -2927,8 +2947,8 @@ PROXY_DECLARE(apr_status_t) ap_proxy_sync_balancer(proxy_balancer *b, server_rec if (worker->hash.def == shm->hash.def && worker->hash.fnv == shm->hash.fnv) { found = 1; ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(02402) - "re-grabbing shm[%d] (0x%pp) for worker: %s%s", i, (void *)shm, - worker->s->name, (worker->s->uds?"|":"")); + "re-grabbing shm[%d] (0x%pp) for worker: %s", i, (void *)shm, + ap_proxy_worker_name(conf->pool, worker)); break; } } -- 2.40.0