ping?

On Aug 23, 2013, at 2:29 PM, Jim Jagielski <[email protected]> wrote:

> Anyone else think this isn't worthwhile? I'll revert.
> 
> No sense in adding stuff if not "useful".
> 
> On Aug 23, 2013, at 2:20 PM, Jim Jagielski <[email protected]> wrote:
> 
>> I explained the rationale.
>> 
>> Thx for the ping_timeout_set catch, fwiw
>> 
>> On Aug 23, 2013, at 2:08 PM, Ruediger Pluem <[email protected]> wrote:
>> 
>>> 
>>> 
>>> [email protected] wrote:
>>>> Author: jim
>>>> Date: Fri Aug 23 16:48:42 2013
>>>> New Revision: 1516930
>>>> 
>>>> URL: http://svn.apache.org/r1516930
>>>> Log:
>>>> Allow for a simple socket check in addition to the
>>>> higher level protocol-level checks for backends...
>>>> 
>>>> Not sure if it makes sense to do both or not... Comments?
>>>> 
>>>> Modified:
>>>>  httpd/httpd/trunk/docs/manual/mod/mod_proxy.xml
>>>>  httpd/httpd/trunk/modules/proxy/mod_proxy.c
>>>>  httpd/httpd/trunk/modules/proxy/mod_proxy.h
>>>>  httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c
>>>>  httpd/httpd/trunk/modules/proxy/mod_proxy_http.c
>>>>  httpd/httpd/trunk/modules/proxy/proxy_util.c
>>>> 
>>>> Modified: httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c
>>>> URL: 
>>>> http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c?rev=1516930&r1=1516929&r2=1516930&view=diff
>>>> ==============================================================================
>>>> --- httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c (original)
>>>> +++ httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c Fri Aug 23 16:48:42 
>>>> 2013
>>>> @@ -759,22 +759,35 @@ static int proxy_ajp_handler(request_rec
>>>> 
>>>>       /* Handle CPING/CPONG */
>>>>       if (worker->s->ping_timeout_set) {
>>>> -            status = ajp_handle_cping_cpong(backend->sock, r,
>>>> -                                            worker->s->ping_timeout);
>>>> -            /*
>>>> -             * In case the CPING / CPONG failed for the first time we 
>>>> might be
>>>> -             * just out of luck and got a faulty backend connection, but 
>>>> the
>>>> -             * backend might be healthy nevertheless. So ensure that the 
>>>> backend
>>>> -             * TCP connection gets closed and try it once again.
>>>> -             */
>>>> -            if (status != APR_SUCCESS) {
>>>> -                backend->close = 1;
>>>> -                ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, 
>>>> APLOGNO(00897)
>>>> -                              "cping/cpong failed to %pI (%s)",
>>>> -                              worker->cp->addr, worker->s->hostname);
>>>> -                status = HTTP_SERVICE_UNAVAILABLE;
>>>> -                retry++;
>>>> -                continue;
>>>> +            if (worker->s->ping_timeout_set < 0) {
>>> 
>>> How can this < 0? It is either 0 or 1.
>>> I guess it should be ping_timeout.
>>> 
>>>> +                if (!ap_proxy_is_socket_connected(backend->sock)) {
>>>> +                    backend->close = 1;
>>>> +                    ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, 
>>>> APLOGNO()
>>>> +                                  "socket check failed to %pI (%s)",
>>>> +                                  worker->cp->addr, worker->s->hostname);
>>>> +                    status = HTTP_SERVICE_UNAVAILABLE;
>>>> +                    retry++;
>>>> +                    continue;
>>>> +                }
>>>> +            }
>>>> +            else {
>>>> +                status = ajp_handle_cping_cpong(backend->sock, r,
>>>> +                                                worker->s->ping_timeout);
>>>> +                /*
>>>> +                 * In case the CPING / CPONG failed for the first time we 
>>>> might be
>>>> +                 * just out of luck and got a faulty backend connection, 
>>>> but the
>>>> +                 * backend might be healthy nevertheless. So ensure that 
>>>> the backend
>>>> +                 * TCP connection gets closed and try it once again.
>>>> +                 */
>>>> +                if (status != APR_SUCCESS) {
>>>> +                    backend->close = 1;
>>>> +                    ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, 
>>>> APLOGNO(00897)
>>>> +                                  "cping/cpong failed to %pI (%s)",
>>>> +                                  worker->cp->addr, worker->s->hostname);
>>>> +                    status = HTTP_SERVICE_UNAVAILABLE;
>>>> +                    retry++;
>>>> +                    continue;
>>>> +                }
>>>>           }
>>>>       }
>>>>       /* Step Three: Process the Request */
>>> 
>>> 
>>> To be honest. I think this additional check is a waste of cycles as we 
>>> already know that the socket is connected at this
>>> point of time and even if it just disconnected it could happen also a few 
>>> moments later when we passed this check. So I
>>> see no gain for the race condition we face regarding the connectivity state 
>>> of the socket. But as it is only done with
>>> negative ping timeouts I am -0.
>>> 
>>> Regards
>>> 
>>> RĂ¼diger
>>> 
>> 
> 

Reply via email to