On 10/03/2021 12:24, Ruediger Pluem wrote:


On 3/10/21 11:36 AM, jfcl...@apache.org wrote:
Author: jfclere
Date: Wed Mar 10 10:36:46 2021
New Revision: 1887415

URL: http://svn.apache.org/viewvc?rev=1887415&view=rev
Log:
Add CPING to health check logic.

Modified:
     httpd/httpd/trunk/modules/proxy/mod_proxy.h
     httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c
     httpd/httpd/trunk/modules/proxy/mod_proxy_balancer.c
     httpd/httpd/trunk/modules/proxy/mod_proxy_hcheck.c


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=1887415&r1=1887414&r2=1887415&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/mod_proxy_hcheck.c (original)
+++ httpd/httpd/trunk/modules/proxy/mod_proxy_hcheck.c Wed Mar 10 10:36:46 2021

@@ -613,6 +615,39 @@ static int hc_get_backend(const char *pr
      return hc_determine_connection(ctx, hc, &(*backend)->addr, ptemp);
  }
+static apr_status_t hc_check_cping(baton_t *baton)
+{
+    int status;
+    sctx_t *ctx = baton->ctx;
+    proxy_worker *hc = baton->hc;
+    proxy_conn_rec *backend = NULL;
+    apr_pool_t *ptemp = baton->ptemp;
+    request_rec *r;
+    apr_interval_time_t timeout;
+
+    if (!ajp_handle_cping_cpong) {
+        return APR_ENOTIMPL;
+    }
+
+    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, baton->ctx->s, "HCCPING 
starting");
+    if ((status = hc_get_backend("HCCPING", &backend, hc, ctx, baton->ptemp)) 
!= OK) {
+        return backend_cleanup("HCCPING", backend, ctx->s, status);
+    }
+    if ((status = ap_proxy_connect_backend("HCCPING", backend, hc, ctx->s)) != 
OK) {
+        return backend_cleanup("HCCPING", backend, ctx->s, status);
+    }
+    r = create_request_rec(ptemp, ctx->s, baton->balancer, "CPING");
+    if ((status = ap_proxy_connection_create_ex("HCCPING", backend, r)) != OK) 
{
+        return backend_cleanup("HCCPING", backend, ctx->s, status);
+    }
+    set_request_connection(r, backend->connection);
+
+    timeout = apr_time_from_sec(10); /* 10 seconds */

I don't like hardcoded timeouts. How about hc->s->ping_timeout instead?
This would require to copy the setting from the worker if present in 
hc_get_hcworker where we should copy the timeout field as
well from my point of view. We could make a cascaded choice here then:

hc->s->ping_timeout, hc->s->conn_timeout, hc->s->timeout, 
apr_socket_timeout_get(backend->sock)

Oops I will fix that ASAP thanks, I committed too early :-(


+    status = ajp_handle_cping_cpong(backend->sock, r, timeout);
+    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, baton->ctx->s, "HCCPING done %d", 
status);
+    return backend_cleanup("HCCPING", backend, ctx->s, status);
+}
+
  static apr_status_t hc_check_tcp(baton_t *baton)
  {
      int status;

Regards

RĂ¼diger



--
Cheers

Jean-Frederic

Reply via email to