Author: mturk Date: Mon Sep 22 01:19:44 2008 New Revision: 697697 URL: http://svn.apache.org/viewvc?rev=697697&view=rev Log: Add ping_mode directive
Modified: 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_util.c tomcat/connectors/trunk/jk/native/common/jk_util.h tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml tomcat/connectors/trunk/jk/xdocs/reference/workers.xml 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?rev=697697&r1=697696&r2=697697&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c Mon Sep 22 01:19:44 2008 @@ -362,7 +362,22 @@ return JK_AJP_STATE_DEF; } - +int jk_ajp_get_cping_mode(const char *m, int def) +{ + int mv = def; + if (!m) + return mv; + while (*m != '\0') { + if (*m == 'C' || *m == 'c') + mv |= AJP_CPING_CONNECT; + else if (*m == 'P' || *m == 'p') + mv |= AJP_CPING_PREPOST; + else if (*m == 'I' || *m == 'i') + mv |= AJP_CPING_INTERVAL; + m++; + } + return mv; +} /* * Message structure @@ -2477,23 +2492,37 @@ AJP_DEF_CACHE_TIMEOUT); p->ping_timeout = - jk_get_worker_ping_timeout(props, p->name, 0); - + jk_get_worker_ping_timeout(props, p->name, + AJP_DEF_PING_TIMEOUT); + p->ping_mode = + jk_get_worker_ping_mode(props, p->name, + AJP_CPING_NONE); + p->connect_timeout = jk_get_worker_connect_timeout(props, p->name, - p->ping_timeout); + AJP_DEF_CONNECT_TIMEOUT); p->prepost_timeout = jk_get_worker_prepost_timeout(props, p->name, - p->ping_timeout); + AJP_DEF_PREPOST_TIMEOUT); + if ((p->ping_mode & AJP_CPING_CONNECT) && + p->connect_timeout == AJP_DEF_CONNECT_TIMEOUT) + p->connect_timeout = p->ping_timeout; + + if ((p->ping_mode & AJP_CPING_PREPOST) && + p->prepost_timeout == AJP_DEF_PREPOST_TIMEOUT) + p->prepost_timeout = p->ping_timeout; + + p->conn_ping_interval = + jk_get_worker_conn_ping_interval(props, p->name, 0); + if ((p->ping_mode & AJP_CPING_PREPOST) && + p->conn_ping_interval == 0) + p->conn_ping_interval = p->ping_timeout / 10; p->reply_timeout = jk_get_worker_reply_timeout(props, p->name, AJP_DEF_REPLY_TIMEOUT); - p->conn_ping_interval = - jk_get_worker_conn_ping_interval(props, p->name, 0); - p->recovery_opts = jk_get_worker_recovery_opts(props, p->name, AJP_DEF_RECOVERY_OPTS); 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?rev=697697&r1=697696&r2=697697&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h (original) +++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h Mon Sep 22 01:19:44 2008 @@ -212,7 +212,14 @@ #define AJP_DEF_REPLY_TIMEOUT (0) /* NO REPLY TIMEOUT */ #define AJP_DEF_PREPOST_TIMEOUT (0) /* NO PREPOST TIMEOUT => NO CPING/CPONG */ #define AJP_DEF_RECOVERY_OPTS (0) /* NO RECOVERY / NO */ -#define AJP_DEF_SOCKET_TIMEOUT (0) /* No timeout */ +#define AJP_DEF_SOCKET_TIMEOUT (0) /* No timeout */ +#define AJP_DEF_PING_TIMEOUT (10000) /* Default CPING/CPONG timeout (10 seconds) */ + +#define AJP_CPING_NONE (0) /* Do not send cping packets */ +#define AJP_CPING_CONNECT (1) /* Send cping on fresh connection */ +#define AJP_CPING_PREPOST (2) /* Send cping before sending request */ +#define AJP_CPING_INTERVAL (4) /* Send cping on regular intervals */ + #define RECOVER_ABORT_IF_TCGETREQUEST 0x0001 /* DON'T RECOVER IF TOMCAT FAILS AFTER RECEIVING REQUEST */ #define RECOVER_ABORT_IF_TCSENDHEADER 0x0002 /* DON'T RECOVER IF TOMCAT FAILS AFTER SENDING HEADERS */ @@ -316,6 +323,7 @@ int ping_timeout; /* generic cping/cpong timeout. Used for keepalive packets or * as default for boolean valued connect and prepost timeouts. */ + unsigned int ping_mode; /* Ping mode flags */ /* * Recovery options */ @@ -419,6 +427,8 @@ int JK_METHOD ajp_maintain(jk_worker_t *pThis, time_t now, jk_logger_t *l); +int jk_ajp_get_cping_mode(const char *m, int def); + #ifdef __cplusplus } #endif /* __cplusplus */ 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?rev=697697&r1=697696&r2=697697&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_util.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_util.c Mon Sep 22 01:19:44 2008 @@ -58,6 +58,7 @@ #define REPLY_TIMEOUT_OF_WORKER ("reply_timeout") #define SOCKET_TIMEOUT_OF_WORKER ("socket_timeout") #define PING_TIMEOUT_OF_WORKER ("ping_timeout") +#define PING_MODE_OF_WORKER ("ping_mode") #define SOCKET_BUFFER_OF_WORKER ("socket_buffer") #define SOCKET_KEEPALIVE_OF_WORKER ("socket_keepalive") #define CONN_PING_INTERVAL_OF_WORKER ("connection_ping_interval") @@ -172,6 +173,7 @@ CONNECT_TIMEOUT_OF_WORKER, PREPOST_TIMEOUT_OF_WORKER, PING_TIMEOUT_OF_WORKER, + PING_MODE_OF_WORKER, REPLY_TIMEOUT_OF_WORKER, SOCKET_TIMEOUT_OF_WORKER, SOCKET_BUFFER_OF_WORKER, @@ -257,6 +259,7 @@ CONNECT_TIMEOUT_OF_WORKER, PREPOST_TIMEOUT_OF_WORKER, PING_TIMEOUT_OF_WORKER, + PING_MODE_OF_WORKER, REPLY_TIMEOUT_OF_WORKER, SOCKET_TIMEOUT_OF_WORKER, SOCKET_BUFFER_OF_WORKER, @@ -761,7 +764,7 @@ if (!m || !wname) { return NULL; } - MAKE_WORKER_PARAM(REDIRECT_OF_WORKER); + MAKE_WORKER_PARAM(REDIRECT_OF_WORKER); return jk_map_get_string(m, buf, def); } @@ -993,10 +996,8 @@ } MAKE_WORKER_PARAM(CONNECT_TIMEOUT_OF_WORKER); - if ((rv = jk_map_get_bool(m, buf, -1)) == -1) - return jk_map_get_int(m, buf, AJP_DEF_CONNECT_TIMEOUT); - else - return def; + + return jk_map_get_int(m, buf, def); } int jk_get_worker_prepost_timeout(jk_map_t *m, const char *wname, int def) @@ -1010,10 +1011,7 @@ MAKE_WORKER_PARAM(PREPOST_TIMEOUT_OF_WORKER); - if ((rv = jk_map_get_bool(m, buf, -1)) == -1) - return jk_map_get_int(m, buf, AJP_DEF_PREPOST_TIMEOUT); - else - return def; + return jk_map_get_int(m, buf, def); } int jk_get_worker_ping_timeout(jk_map_t *m, const char *wname, int def) @@ -1029,6 +1027,21 @@ return jk_map_get_int(m, buf, def); } +int jk_get_worker_ping_mode(jk_map_t *m, const char *wname, int def) +{ + char buf[1024]; + const char *v; + + if (!m || !wname) { + return def; + } + + MAKE_WORKER_PARAM(PING_MODE_OF_WORKER); + + v = jk_map_get_string(m, buf, NULL); + return jk_ajp_get_cping_mode(v, def); +} + int jk_get_worker_reply_timeout(jk_map_t *m, const char *wname, int def) { char buf[1024]; 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?rev=697697&r1=697696&r2=697697&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_util.h (original) +++ tomcat/connectors/trunk/jk/native/common/jk_util.h Mon Sep 22 01:19:44 2008 @@ -88,6 +88,8 @@ int jk_get_worker_ping_timeout(jk_map_t *m, const char *wname, int def); +int jk_get_worker_ping_mode(jk_map_t *m, const char *wname, int def); + int jk_get_worker_recycle_timeout(jk_map_t *m, const char *wname, int def); int jk_get_worker_recover_timeout(jk_map_t *m, const char *wname, int def); Modified: tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml?rev=697697&r1=697696&r2=697697&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml (original) +++ tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Mon Sep 22 01:19:44 2008 @@ -49,7 +49,8 @@ This allows filter chain to work properly. (mturk) </fix> <update> - Added connection_ping_interval and ping_timeout directives. (mturk) + Added connection_ping_interval, ping_timeout and ping_mode directives. + (mturk) </update> <fix> Apache: Use correct ld flags provided by apxs when building module. Modified: tomcat/connectors/trunk/jk/xdocs/reference/workers.xml URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/reference/workers.xml?rev=697697&r1=697696&r2=697697&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/xdocs/reference/workers.xml (original) +++ tomcat/connectors/trunk/jk/xdocs/reference/workers.xml Mon Sep 22 01:19:44 2008 @@ -260,12 +260,43 @@ </p> </directive> -<directive name="connection_ping_timeout" default="0" required="false"> +<directive name="connection_ping_interval" default="0" required="false"> Connections idle for longer than this interval in seconds are probed by CPING packets whether they still work. If set to zero (default), no such probes will be done. -<p>To be able to use this feature <code>prepost_timeout</code> must be -set to the desired timeout value. +<p>To be able to use this feature <code>ping_timeout</code> must be +set to the desired timeout value and <code>ping_mode</code> must include +<code>I</code> flag. +</p> +<p> +This feature has been added in <b>jk 1.2.27</b>. +</p> +</directive> + +<directive name="ping_timeout" default="10000" required="false"> +Connections idle for longer than this interval in miliseconds are probed by +CPING packets whether they still work. The usage depend on the +<code>ping_mode<code> flags used. +<p> +This feature has been added in <b>jk 1.2.27</b>. +</p> +</directive> + +<directive name="ping_mode" default="" required="false"> +Ping mode flags for active connections. The value can +be combination of the following flags: +<p><b>C</b> If set the connect ping mode will be used. If +directive <code>connect_timeout</code> was not set, the +value of <code>ping_timeout</code> will be used instead. +</p> +<p><b>P</b> If set the prepost ping mode will be used. If +directive <code>prepost_timeout</code> was not set, the +value of <code>ping_timeout</code> will be used instead. +</p> +<p><b>I</b> If set the interval ping mode will be used. If +directive <code>connection_ping_interval</code> was not set, the +value of <code>ping_timeout * 10</code> will be used as +<code>connection_ping_interval</code> value. </p> <p> This feature has been added in <b>jk 1.2.27</b>. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]