Author: mturk
Date: Fri Aug 8 00:36:33 2008
New Revision: 683892
URL: http://svn.apache.org/viewvc?rev=683892&view=rev
Log:
Add connection_keepalive for sending CPING/CPONG over unused connections in
connection pool
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_lb_worker.c
tomcat/connectors/trunk/jk/native/common/jk_lb_worker.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=683892&r1=683891&r2=683892&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c Fri Aug 8
00:36:33 2008
@@ -2486,6 +2486,9 @@
jk_get_worker_prepost_timeout(props, p->name,
AJP_DEF_PREPOST_TIMEOUT);
+ p->connection_keepalive =
+ jk_get_worker_connection_keepalive(props, p->name, 0);
+
p->recovery_opts =
jk_get_worker_recovery_opts(props, p->name,
AJP_DEF_RECOVERY_OPTS);
@@ -2826,7 +2829,8 @@
jk_shm_unlock();
/* Obtain current time only if needed */
- if (aw->cache_timeout <= 0) {
+ if (aw->cache_timeout <= 0 &&
+ aw->connection_keepalive <= 0) {
/* Nothing to do. */
JK_TRACE_EXIT(l);
return JK_TRUE;
@@ -2834,7 +2838,7 @@
JK_ENTER_CS(&aw->cs, rc);
if (rc) {
- unsigned int n = 0, cnt = 0;
+ unsigned int n = 0, k = 0, cnt = 0;
int i;
/* Count open slots */
for (i = (int)aw->ep_cache_sz - 1; i >= 0; i--) {
@@ -2842,7 +2846,8 @@
cnt++;
}
/* Handle worker cache and recycle timeouts */
- for (i = (int)aw->ep_cache_sz - 1; i >= 0; i--) {
+ for (i = (int)aw->ep_cache_sz - 1;
+ i >= 0 && aw->cache_timeout > 0; i--) {
/* Skip the closed sockets */
if (aw->ep_cache[i] && IS_VALID_SOCKET(aw->ep_cache[i]->sd)) {
int elapsed = (int)difftime(now,
aw->ep_cache[i]->last_access);
@@ -2868,12 +2873,47 @@
break;
}
}
+ /* Handle worker connection keepalive */
+ for (i = (int)aw->ep_cache_sz - 1; i >= 0 &&
+ aw->connection_keepalive > 0 &&
+ aw->prepost_timeout > 0; i--) {
+ /* Skip the closed sockets */
+ if (aw->ep_cache[i] && IS_VALID_SOCKET(aw->ep_cache[i]->sd)) {
+ int elapsed = (int)difftime(now,
aw->ep_cache[i]->last_access);
+ if (elapsed > aw->connection_keepalive) {
+ k++;
+ /* handle cping/cpong.
+ */
+ if (ajp_handle_cping_cpong(aw->ep_cache[i],
+ aw->prepost_timeout, l) == JK_FALSE) {
+ jk_log(l, JK_LOG_INFO,
+ "(%s) failed sending request, "
+ "socket %d keepalive cping/cpong "
+ "failure (errno=%d)",
+ aw->name,
+ aw->ep_cache[i]->sd,
+ aw->ep_cache[i]->last_errno);
+ aw->ep_cache[i]->reuse = JK_FALSE;
+ ajp_reset_endpoint(aw->ep_cache[i], l);
+ }
+ else {
+ now = time(NULL);
+ aw->ep_cache[i]->last_access = now;
+ }
+ }
+ }
+ }
JK_LEAVE_CS(&aw->cs, rc);
- if (JK_IS_DEBUG_LEVEL(l))
+ if (n && JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
"recycled %u sockets in %d seconds from %u pool slots",
n, (int)(difftime(time(NULL), now)),
aw->ep_cache_sz);
+ if (k && JK_IS_DEBUG_LEVEL(l))
+ jk_log(l, JK_LOG_DEBUG,
+ "pinged %u sockets in %d seconds from %u pool slots",
+ k, (int)(difftime(time(NULL), now)),
+ aw->ep_cache_sz);
JK_TRACE_EXIT(l);
return JK_TRUE;
}
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=683892&r1=683891&r2=683892&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h Fri Aug 8
00:36:33 2008
@@ -311,6 +311,8 @@
int connect_timeout; /* connect cping/cpong delay in ms (0 means
disabled) */
int reply_timeout; /* reply timeout delay in ms (0 means disabled) */
int prepost_timeout; /* before sending a request cping/cpong timeout
delay in ms (0 means disabled) */
+ int connection_keepalive; /* interval for sending cping packets on
+ * unused connection */
/*
* Recovery options
Modified: tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c
URL:
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c?rev=683892&r1=683891&r2=683892&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c Fri Aug 8 00:36:33
2008
@@ -1614,6 +1614,10 @@
if(p->maintain_time < 0)
p->maintain_time = 0;
p->s->last_maintain_time = time(NULL);
+ p->connection_keepalive = jk_get_worker_connection_keepalive(props,
+ p->name, 0);
+ if(p->connection_keepalive < 0)
+ p->connection_keepalive = 0;
p->lbmethod = jk_get_lb_method(props, p->name);
p->lblock = jk_get_lb_lock(props, p->name);
Modified: tomcat/connectors/trunk/jk/native/common/jk_lb_worker.h
URL:
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_lb_worker.h?rev=683892&r1=683891&r2=683892&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_lb_worker.h (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_lb_worker.h Fri Aug 8 00:36:33
2008
@@ -192,6 +192,7 @@
int lbmethod;
int lblock;
int maintain_time;
+ int connection_keepalive;
unsigned int max_packet_size;
unsigned int next_offset;
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=683892&r1=683891&r2=683892&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_util.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_util.c Fri Aug 8 00:36:33 2008
@@ -59,6 +59,7 @@
#define SOCKET_TIMEOUT_OF_WORKER ("socket_timeout")
#define SOCKET_BUFFER_OF_WORKER ("socket_buffer")
#define SOCKET_KEEPALIVE_OF_WORKER ("socket_keepalive")
+#define CONNECTION_KEEPALIVE_OF_WORKER ("connection_keepalive")
#define RECYCLE_TIMEOUT_DEPRECATED ("recycle_timeout")
#define LOAD_FACTOR_OF_WORKER ("lbfactor")
#define DISTANCE_OF_WORKER ("distance")
@@ -173,6 +174,7 @@
SOCKET_TIMEOUT_OF_WORKER,
SOCKET_BUFFER_OF_WORKER,
SOCKET_KEEPALIVE_OF_WORKER,
+ CONNECTION_KEEPALIVE_OF_WORKER,
RECYCLE_TIMEOUT_DEPRECATED,
LOAD_FACTOR_OF_WORKER,
STICKY_SESSION,
@@ -256,6 +258,7 @@
SOCKET_TIMEOUT_OF_WORKER,
SOCKET_BUFFER_OF_WORKER,
SOCKET_KEEPALIVE_OF_WORKER,
+ CONNECTION_KEEPALIVE_OF_WORKER,
RECYCLE_TIMEOUT_DEPRECATED,
LOAD_FACTOR_OF_WORKER,
DISTANCE_OF_WORKER,
@@ -947,6 +950,19 @@
return jk_map_get_bool(m, buf, def);
}
+int jk_get_worker_connection_keepalive(jk_map_t *m, const char *wname, int def)
+{
+ char buf[1024];
+
+ if (!m || !wname) {
+ return -1;
+ }
+
+ MAKE_WORKER_PARAM(CONNECTION_KEEPALIVE_OF_WORKER);
+
+ return jk_map_get_int(m, buf, def);
+}
+
int jk_get_worker_cache_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=683892&r1=683891&r2=683892&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_util.h (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_util.h Fri Aug 8 00:36:33 2008
@@ -74,6 +74,8 @@
int jk_get_worker_socket_keepalive(jk_map_t *m, const char *wname, int def);
+int jk_get_worker_connection_keepalive(jk_map_t *m, const char *wname, int
def);
+
int jk_get_worker_cache_timeout(jk_map_t *m, const char *wname, int def);
int jk_get_worker_recovery_opts(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=683892&r1=683891&r2=683892&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Fri Aug 8
00:36:33 2008
@@ -43,6 +43,9 @@
<br />
<subsection name="Native">
<changelog>
+ <update>
+ Added connection_keepalive directive. (mturk)
+ </update>
<fix>
Documentation: "val" attribute numbering in status worker
needs to start with 0 instead of 1. (rjung)
Modified: tomcat/connectors/trunk/jk/xdocs/reference/workers.xml
URL:
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/reference/workers.xml?rev=683892&r1=683891&r2=683892&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/reference/workers.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/reference/workers.xml Fri Aug 8 00:36:33
2008
@@ -260,6 +260,17 @@
</p>
</directive>
+<directive name="connection_keepalive" default="False" required="false">
+This is interval in seconds used for sending CPING packets over unused
+connection.
+<p>To be able to use this feature <code>prepost_timeout</code> must be
+set to desired timeout value.
+</p>
+<p>
+This feature has been added in <b>jk 1.2.27</b>.
+</p>
+</directive>
+
<directive name="connection_pool_size" default="see text" required="false">
This defines the number of connections made to the AJP backend that
are maintained as a connection pool.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]