Return-Path: X-Original-To: apmail-httpd-cvs-archive@www.apache.org Delivered-To: apmail-httpd-cvs-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 3AF0F1895B for ; Tue, 29 Dec 2015 19:40:57 +0000 (UTC) Received: (qmail 22344 invoked by uid 500); 29 Dec 2015 19:40:52 -0000 Delivered-To: apmail-httpd-cvs-archive@httpd.apache.org Received: (qmail 22274 invoked by uid 500); 29 Dec 2015 19:40:52 -0000 Mailing-List: contact cvs-help@httpd.apache.org; run by ezmlm Precedence: bulk Reply-To: dev@httpd.apache.org list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list cvs@httpd.apache.org Received: (qmail 22265 invoked by uid 99); 29 Dec 2015 19:40:52 -0000 Received: from Unknown (HELO spamd4-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 29 Dec 2015 19:40:52 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd4-us-west.apache.org (ASF Mail Server at spamd4-us-west.apache.org) with ESMTP id 9A951C0D4D for ; Tue, 29 Dec 2015 19:40:51 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd4-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.246 X-Spam-Level: * X-Spam-Status: No, score=1.246 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RP_MATCHES_RCVD=-0.554] autolearn=disabled Received: from mx1-us-east.apache.org ([10.40.0.8]) by localhost (spamd4-us-west.apache.org [10.40.0.11]) (amavisd-new, port 10024) with ESMTP id zQH17z44s2gW for ; Tue, 29 Dec 2015 19:40:50 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-us-east.apache.org (ASF Mail Server at mx1-us-east.apache.org) with ESMTP id 16AF042B35 for ; Tue, 29 Dec 2015 19:40:50 +0000 (UTC) Received: from svn01-us-west.apache.org (svn.apache.org [10.41.0.6]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id 8C7C0E0428 for ; Tue, 29 Dec 2015 19:40:49 +0000 (UTC) Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id 322263A0A9F for ; Tue, 29 Dec 2015 19:40:49 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1722229 - in /httpd/httpd/trunk/modules/proxy: mod_proxy.c mod_proxy_hcheck.c Date: Tue, 29 Dec 2015 19:40:48 -0000 To: cvs@httpd.apache.org From: jim@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20151229194049.322263A0A9F@svn01-us-west.apache.org> Author: jim Date: Tue Dec 29 19:40:46 2015 New Revision: 1722229 URL: http://svn.apache.org/viewvc?rev=1722229&view=rev Log: finish looping logic... place-holder for actual checking Modified: httpd/httpd/trunk/modules/proxy/mod_proxy.c httpd/httpd/trunk/modules/proxy/mod_proxy_hcheck.c Modified: httpd/httpd/trunk/modules/proxy/mod_proxy.c URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy.c?rev=1722229&r1=1722228&r2=1722229&view=diff ============================================================================== --- httpd/httpd/trunk/modules/proxy/mod_proxy.c (original) +++ httpd/httpd/trunk/modules/proxy/mod_proxy.c Tue Dec 29 19:40:46 2015 @@ -2678,7 +2678,6 @@ static int proxy_post_config(apr_pool_t proxy_ssl_disable = APR_RETRIEVE_OPTIONAL_FN(ssl_engine_disable); proxy_is_https = APR_RETRIEVE_OPTIONAL_FN(ssl_is_https); proxy_ssl_val = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup); - set_worker_hc_param_f = APR_RETRIEVE_OPTIONAL_FN(set_worker_hc_param); ap_proxy_strmatch_path = apr_strmatch_precompile(pconf, "path=", 0); ap_proxy_strmatch_domain = apr_strmatch_precompile(pconf, "domain=", 0); @@ -2889,6 +2888,7 @@ static int proxy_pre_config(apr_pool_t * APR_HOOK_MIDDLE); /* Reset workers count on gracefull restart */ proxy_lb_workers = 0; + set_worker_hc_param_f = APR_RETRIEVE_OPTIONAL_FN(set_worker_hc_param); return OK; } static void register_hooks(apr_pool_t *p) Modified: httpd/httpd/trunk/modules/proxy/mod_proxy_hcheck.c URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy_hcheck.c?rev=1722229&r1=1722228&r2=1722229&view=diff ============================================================================== --- httpd/httpd/trunk/modules/proxy/mod_proxy_hcheck.c (original) +++ httpd/httpd/trunk/modules/proxy/mod_proxy_hcheck.c Tue Dec 29 19:40:46 2015 @@ -45,9 +45,9 @@ static apr_array_header_t *templates = N static ap_watchdog_t *watchdog; /* - * This is not as clean as it should be, because we are using - * the same to both update the actual worker as well as verifying - * and populating the health check 'template' as well. + * This serves double duty by not only validating (and creating) + * the health-check template, but also ties into set_worker_param() + * which does the actual setting of worker params in shm. */ static const char *set_worker_hc_param(apr_pool_t *p, proxy_worker *worker, @@ -171,33 +171,60 @@ static const char *set_hcheck(cmd_parms return NULL; } +static void hc_check(apr_pool_t *p, server_rec *s, apr_time_t now, + proxy_worker *worker) +{ + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO() + "Health check (%s).", worker->s->name); + return; +} + static apr_status_t hc_watchdog_callback(int state, void *data, apr_pool_t *pool) { apr_status_t rv = APR_SUCCESS; - apr_time_t cur, now; - - + apr_time_t now = apr_time_sec(apr_time_now()); + proxy_balancer *balancer; + server_rec *s = (server_rec *)data; + proxy_server_conf *conf; + apr_pool_t *p; switch (state) { case AP_WATCHDOG_STATE_STARTING: - ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf, APLOGNO() + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO() "%s watchdog started.", HCHECK_WATHCHDOG_NAME); - break; + break; + case AP_WATCHDOG_STATE_RUNNING: - cur = now = apr_time_sec(apr_time_now()); - /* - while ((now - cur) < apr_time_sec(ctx->interval)) { - break; + /* loop thru all workers */ + apr_pool_create(&p, pool); + while (s) { + int i; + conf = (proxy_server_conf *) ap_get_module_config(s->module_config, &proxy_module); + balancer = (proxy_balancer *)conf->balancers->elts; + for (i = 0; i < conf->balancers->nelts; i++, balancer++) { + int n; + proxy_worker **workers; + proxy_worker *worker; + workers = (proxy_worker **)balancer->workers->elts; + for (n = 0; n < balancer->workers->nelts; n++) { + worker = *workers; + if (worker->s->method && (now > worker->s->updated + worker->s->interval)) { + hc_check(p, s, now, worker); + } + workers++; + } + } + s = s->next; } - */ - break; + apr_pool_destroy(p); + break; + case AP_WATCHDOG_STATE_STOPPING: ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf, APLOGNO() "stopping %s watchdog.", HCHECK_WATHCHDOG_NAME); - - break; + break; } return rv; } @@ -240,7 +267,7 @@ static int hc_post_config(apr_pool_t *p, } rv = hc_watchdog_register_callback(watchdog, apr_time_from_sec(HCHECK_WATHCHDOG_INTERVAL), - NULL, + s, hc_watchdog_callback); if (rv) { ap_log_error(APLOG_MARK, APLOG_CRIT, rv, s, APLOGNO()