You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by mt...@apache.org on 2006/12/06 11:54:09 UTC

svn commit: r483021 - in /tomcat/connectors/trunk/jk: native/common/ xdocs/config/ xdocs/miscellaneous/

Author: mturk
Date: Wed Dec  6 02:54:08 2006
New Revision: 483021

URL: http://svn.apache.org/viewvc?view=rev&rev=483021
Log:
Added retry_on_status directive that can treat HTTP return codes as failures, allowing loadbalancing in case of 503, etc.

Modified:
    tomcat/connectors/trunk/jk/native/common/jk_ajp13.h
    tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c
    tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h
    tomcat/connectors/trunk/jk/native/common/jk_service.h
    tomcat/connectors/trunk/jk/native/common/jk_util.c
    tomcat/connectors/trunk/jk/native/common/jk_util.h
    tomcat/connectors/trunk/jk/xdocs/config/workers.xml
    tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml

Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp13.h
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp13.h?view=diff&rev=483021&r1=483020&r2=483021
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_ajp13.h (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_ajp13.h Wed Dec  6 02:54:08 2006
@@ -44,6 +44,7 @@
 #define JK_SERVER_ERROR             (-5)
 #define JK_CLIENT_RD_ERROR          (-6)
 #define JK_CLIENT_WR_ERROR          (-7)
+#define JK_STATUS_ERROR             (-8)
 
 #define AJP13_MAX_SEND_BODY_SZ      (DEF_BUFFER_SZ - 6)
 #define AJP13_DEF_TIMEOUT           (0) /* Idle timout for pooled connections */

Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c?view=diff&rev=483021&r1=483020&r2=483021
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c Wed Dec  6 02:54:08 2006
@@ -1398,6 +1398,7 @@
                               res.num_headers);
             if (r->flush && r->flush_header)
                 r->flush(r);
+            r->http_status = res.status;
         }
         return JK_AJP13_SEND_HEADERS;
 
@@ -1625,6 +1626,11 @@
             return JK_TRUE;
         }
         else if (JK_AJP13_SEND_HEADERS == rc) {
+            if (p->worker->http_status_fail &&
+                (p->worker->http_status_fail == s->http_status)) {
+                JK_TRACE_EXIT(l);
+                return JK_STATUS_ERROR;
+            }
             headeratclient = JK_TRUE;
         }
         else if (JK_AJP13_HAS_RESPONSE == rc) {
@@ -1841,6 +1847,18 @@
                 JK_TRACE_EXIT(l);
                 return JK_SERVER_ERROR;
             }
+            else if (err == JK_STATUS_ERROR) {
+                jk_log(l, JK_LOG_INFO,
+                       "(%s) request failed, "
+                       "because of response status %d, "
+                       "recoverable operation attempt=%d",
+                       p->worker->http_status_fail,
+                       p->worker->name, i);
+                JK_TRACE_EXIT(l);
+                if (i >= JK_RETRIES) {
+                    jk_sleep(JK_SLEEP_DEF);
+                }
+            }
             else {
                 /* if we can't get reply, check if no recover flag was set
                  * if is_recoverable_error is cleared, we have started
@@ -2062,6 +2080,8 @@
                                         AJP_DEF_RECOVERY_OPTS);
         p->max_packet_size =
             jk_get_max_packet_size(props, p->name);
+
+        p->http_status_fail = jk_get_worker_retry_on_status(props, p->name);
 
         pThis->retries =
             jk_get_worker_retries(props, p->name,

Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h?view=diff&rev=483021&r1=483020&r2=483021
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h Wed Dec  6 02:54:08 2006
@@ -287,6 +287,11 @@
     unsigned int recovery_opts; /* Set the recovery option */
     
     unsigned int max_packet_size;  /*  Maximum AJP Packet size */
+    
+    /* 
+     * HTTP status that will cause failover (0 means disabled)
+     */
+     int http_status_fail;
 };
 
 

Modified: tomcat/connectors/trunk/jk/native/common/jk_service.h
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_service.h?view=diff&rev=483021&r1=483020&r2=483021
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_service.h (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_service.h Wed Dec  6 02:54:08 2006
@@ -222,6 +222,11 @@
      */
     int flush_header;
 
+    /*
+     * HTTP status sent from container.
+     */
+    int http_status;
+
     /* Uri worker map. Added for virtual host support
      */
     jk_uri_worker_map_t *uw_map;

Modified: tomcat/connectors/trunk/jk/native/common/jk_util.c
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_util.c?view=diff&rev=483021&r1=483020&r2=483021
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_util.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_util.c Wed Dec  6 02:54:08 2006
@@ -91,6 +91,7 @@
 #define DEFAULT_WORKER_TYPE         JK_AJP13_WORKER_NAME
 #define SECRET_KEY_OF_WORKER        ("secretkey")
 #define RETRIES_OF_WORKER           ("retries")
+#define STATUS_FAIL_OF_WORKER       ("retry_on_status")
 
 #define DEFAULT_WORKER              JK_AJP13_WORKER_NAME
 #define WORKER_LIST_PROPERTY_NAME     ("worker.list")
@@ -180,6 +181,7 @@
     XML_NAMESPACE_OF_WORKER,
     XML_DOCTYPE_OF_WORKER,
     PROP_PREFIX_OF_WORKER,
+    STATUS_FAIL_OF_WORKER,
     NULL
 };
 
@@ -1001,6 +1003,20 @@
 
     return sz;
 }
+
+int jk_get_worker_retry_on_status(jk_map_t *m, const char *wname)
+{
+    char buf[1024];
+
+    if (!m || !wname) {
+        return 0;
+    }
+
+    MAKE_WORKER_PARAM(STATUS_FAIL_OF_WORKER);
+    return jk_map_get_int(m, buf, 0);
+
+}
+
 
 const char *jk_get_worker_style_sheet(jk_map_t *m, const char *wname, const char *def)
 {

Modified: tomcat/connectors/trunk/jk/native/common/jk_util.h
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_util.h?view=diff&rev=483021&r1=483020&r2=483021
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_util.h (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_util.h Wed Dec  6 02:54:08 2006
@@ -193,6 +193,8 @@
 
 const char *jk_get_worker_prop_prefix(jk_map_t *m, const char *wname, const char *def);
 
+int jk_get_worker_retry_on_status(jk_map_t *m, const char *wname);
+
 #define TC32_BRIDGE_TYPE    32
 #define TC33_BRIDGE_TYPE    33
 #define TC40_BRIDGE_TYPE    40

Modified: tomcat/connectors/trunk/jk/xdocs/config/workers.xml
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/config/workers.xml?view=diff&rev=483021&r1=483020&r2=483021
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/config/workers.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/config/workers.xml Wed Dec  6 02:54:08 2006
@@ -711,6 +711,17 @@
 </p>
 </directive>
 
+<directive name="retry_on_status" default="0" required="false">
+Set this value to the HTTP status code that will cause a worker to fail
+if returned from Servlet contatiner. Use this directive to deal with
+cases when the servlet container can temporary return non-200 responses
+for a short amount of time, e.g during redeployment.
+<p>
+This feature has been added in <b>jk 1.2.20</b>.
+</p>
+</directive>
+
+
 </directives>
 </subsection>
 

Modified: tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml?view=diff&rev=483021&r1=483020&r2=483021
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Wed Dec  6 02:54:08 2006
@@ -27,6 +27,9 @@
   <subsection name="Native">
     <changelog>
       <update>
+      Added retry_on_status for workers directive. (mturk)
+      </update>
+      <update>
       Status Worker: Add directive to make property prefix
       and good/bad rule configurable. (rjung)
       </update>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Re: svn commit: r483021 - in /tomcat/connectors/trunk/jk: native/common/ xdocs/config/ xdocs/miscellaneous/

Posted by Mladen Turk <mt...@apache.org>.
Rainer Jung wrote:
> Hi Mladen,
> 
> the different notations confuse me: some parts use "retry_on_status", 
> and some "http_status_fail". I think the implementation does "fail on 
> configured status code", whereas the name of the config param suggests 
> "retry=do not fail on configured status code".
> 
> I would suggest, to rename the config param (and the config function) 
> from "retry_on_status" to "fail_on_status".
> 

Sure, makes sense.

Regards,
Mladen.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Re: svn commit: r483021 - in /tomcat/connectors/trunk/jk: native/common/ xdocs/config/ xdocs/miscellaneous/

Posted by Rainer Jung <ra...@kippdata.de>.
Hi Mladen,

the different notations confuse me: some parts use "retry_on_status", 
and some "http_status_fail". I think the implementation does "fail on 
configured status code", whereas the name of the config param suggests 
"retry=do not fail on configured status code".

I would suggest, to rename the config param (and the config function) 
from "retry_on_status" to "fail_on_status".

Regards,

Rainer

mturk@apache.org wrote:
> Author: mturk
> Date: Wed Dec  6 02:54:08 2006
> New Revision: 483021
> 
> URL: http://svn.apache.org/viewvc?view=rev&rev=483021
> Log:
> Added retry_on_status directive that can treat HTTP return codes as failures, allowing loadbalancing in case of 503, etc.
> 
> Modified:
>     tomcat/connectors/trunk/jk/native/common/jk_ajp13.h
>     tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c
>     tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h
>     tomcat/connectors/trunk/jk/native/common/jk_service.h
>     tomcat/connectors/trunk/jk/native/common/jk_util.c
>     tomcat/connectors/trunk/jk/native/common/jk_util.h
>     tomcat/connectors/trunk/jk/xdocs/config/workers.xml
>     tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml
> 
> Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp13.h
> URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp13.h?view=diff&rev=483021&r1=483020&r2=483021
> ==============================================================================
> --- tomcat/connectors/trunk/jk/native/common/jk_ajp13.h (original)
> +++ tomcat/connectors/trunk/jk/native/common/jk_ajp13.h Wed Dec  6 02:54:08 2006
> @@ -44,6 +44,7 @@
>  #define JK_SERVER_ERROR             (-5)
>  #define JK_CLIENT_RD_ERROR          (-6)
>  #define JK_CLIENT_WR_ERROR          (-7)
> +#define JK_STATUS_ERROR             (-8)
>  
>  #define AJP13_MAX_SEND_BODY_SZ      (DEF_BUFFER_SZ - 6)
>  #define AJP13_DEF_TIMEOUT           (0) /* Idle timout for pooled connections */
> 
> Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c
> URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c?view=diff&rev=483021&r1=483020&r2=483021
> ==============================================================================
> --- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c (original)
> +++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c Wed Dec  6 02:54:08 2006
> @@ -1398,6 +1398,7 @@
>                                res.num_headers);
>              if (r->flush && r->flush_header)
>                  r->flush(r);
> +            r->http_status = res.status;
>          }
>          return JK_AJP13_SEND_HEADERS;
>  
> @@ -1625,6 +1626,11 @@
>              return JK_TRUE;
>          }
>          else if (JK_AJP13_SEND_HEADERS == rc) {
> +            if (p->worker->http_status_fail &&
> +                (p->worker->http_status_fail == s->http_status)) {
> +                JK_TRACE_EXIT(l);
> +                return JK_STATUS_ERROR;
> +            }
>              headeratclient = JK_TRUE;
>          }
>          else if (JK_AJP13_HAS_RESPONSE == rc) {
> @@ -1841,6 +1847,18 @@
>                  JK_TRACE_EXIT(l);
>                  return JK_SERVER_ERROR;
>              }
> +            else if (err == JK_STATUS_ERROR) {
> +                jk_log(l, JK_LOG_INFO,
> +                       "(%s) request failed, "
> +                       "because of response status %d, "
> +                       "recoverable operation attempt=%d",
> +                       p->worker->http_status_fail,
> +                       p->worker->name, i);
> +                JK_TRACE_EXIT(l);
> +                if (i >= JK_RETRIES) {
> +                    jk_sleep(JK_SLEEP_DEF);
> +                }
> +            }
>              else {
>                  /* if we can't get reply, check if no recover flag was set
>                   * if is_recoverable_error is cleared, we have started
> @@ -2062,6 +2080,8 @@
>                                          AJP_DEF_RECOVERY_OPTS);
>          p->max_packet_size =
>              jk_get_max_packet_size(props, p->name);
> +
> +        p->http_status_fail = jk_get_worker_retry_on_status(props, p->name);
>  
>          pThis->retries =
>              jk_get_worker_retries(props, p->name,
> 
> Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h
> URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h?view=diff&rev=483021&r1=483020&r2=483021
> ==============================================================================
> --- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h (original)
> +++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h Wed Dec  6 02:54:08 2006
> @@ -287,6 +287,11 @@
>      unsigned int recovery_opts; /* Set the recovery option */
>      
>      unsigned int max_packet_size;  /*  Maximum AJP Packet size */
> +    
> +    /* 
> +     * HTTP status that will cause failover (0 means disabled)
> +     */
> +     int http_status_fail;
>  };
>  
>  
> 
> Modified: tomcat/connectors/trunk/jk/native/common/jk_service.h
> URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_service.h?view=diff&rev=483021&r1=483020&r2=483021
> ==============================================================================
> --- tomcat/connectors/trunk/jk/native/common/jk_service.h (original)
> +++ tomcat/connectors/trunk/jk/native/common/jk_service.h Wed Dec  6 02:54:08 2006
> @@ -222,6 +222,11 @@
>       */
>      int flush_header;
>  
> +    /*
> +     * HTTP status sent from container.
> +     */
> +    int http_status;
> +
>      /* Uri worker map. Added for virtual host support
>       */
>      jk_uri_worker_map_t *uw_map;
> 
> Modified: tomcat/connectors/trunk/jk/native/common/jk_util.c
> URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_util.c?view=diff&rev=483021&r1=483020&r2=483021
> ==============================================================================
> --- tomcat/connectors/trunk/jk/native/common/jk_util.c (original)
> +++ tomcat/connectors/trunk/jk/native/common/jk_util.c Wed Dec  6 02:54:08 2006
> @@ -91,6 +91,7 @@
>  #define DEFAULT_WORKER_TYPE         JK_AJP13_WORKER_NAME
>  #define SECRET_KEY_OF_WORKER        ("secretkey")
>  #define RETRIES_OF_WORKER           ("retries")
> +#define STATUS_FAIL_OF_WORKER       ("retry_on_status")
>  
>  #define DEFAULT_WORKER              JK_AJP13_WORKER_NAME
>  #define WORKER_LIST_PROPERTY_NAME     ("worker.list")
> @@ -180,6 +181,7 @@
>      XML_NAMESPACE_OF_WORKER,
>      XML_DOCTYPE_OF_WORKER,
>      PROP_PREFIX_OF_WORKER,
> +    STATUS_FAIL_OF_WORKER,
>      NULL
>  };
>  
> @@ -1001,6 +1003,20 @@
>  
>      return sz;
>  }
> +
> +int jk_get_worker_retry_on_status(jk_map_t *m, const char *wname)
> +{
> +    char buf[1024];
> +
> +    if (!m || !wname) {
> +        return 0;
> +    }
> +
> +    MAKE_WORKER_PARAM(STATUS_FAIL_OF_WORKER);
> +    return jk_map_get_int(m, buf, 0);
> +
> +}
> +
>  
>  const char *jk_get_worker_style_sheet(jk_map_t *m, const char *wname, const char *def)
>  {
> 
> Modified: tomcat/connectors/trunk/jk/native/common/jk_util.h
> URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_util.h?view=diff&rev=483021&r1=483020&r2=483021
> ==============================================================================
> --- tomcat/connectors/trunk/jk/native/common/jk_util.h (original)
> +++ tomcat/connectors/trunk/jk/native/common/jk_util.h Wed Dec  6 02:54:08 2006
> @@ -193,6 +193,8 @@
>  
>  const char *jk_get_worker_prop_prefix(jk_map_t *m, const char *wname, const char *def);
>  
> +int jk_get_worker_retry_on_status(jk_map_t *m, const char *wname);
> +
>  #define TC32_BRIDGE_TYPE    32
>  #define TC33_BRIDGE_TYPE    33
>  #define TC40_BRIDGE_TYPE    40
> 
> Modified: tomcat/connectors/trunk/jk/xdocs/config/workers.xml
> URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/config/workers.xml?view=diff&rev=483021&r1=483020&r2=483021
> ==============================================================================
> --- tomcat/connectors/trunk/jk/xdocs/config/workers.xml (original)
> +++ tomcat/connectors/trunk/jk/xdocs/config/workers.xml Wed Dec  6 02:54:08 2006
> @@ -711,6 +711,17 @@
>  </p>
>  </directive>
>  
> +<directive name="retry_on_status" default="0" required="false">
> +Set this value to the HTTP status code that will cause a worker to fail
> +if returned from Servlet contatiner. Use this directive to deal with
> +cases when the servlet container can temporary return non-200 responses
> +for a short amount of time, e.g during redeployment.
> +<p>
> +This feature has been added in <b>jk 1.2.20</b>.
> +</p>
> +</directive>
> +
> +
>  </directives>
>  </subsection>
>  
> 
> Modified: tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml
> URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml?view=diff&rev=483021&r1=483020&r2=483021
> ==============================================================================
> --- tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml (original)
> +++ tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Wed Dec  6 02:54:08 2006
> @@ -27,6 +27,9 @@
>    <subsection name="Native">
>      <changelog>
>        <update>
> +      Added retry_on_status for workers directive. (mturk)
> +      </update>
> +      <update>
>        Status Worker: Add directive to make property prefix
>        and good/bad rule configurable. (rjung)
>        </update>
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: dev-help@tomcat.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org