Author: mturk
Date: Wed Apr 16 05:37:22 2008
New Revision: 648682
URL: http://svn.apache.org/viewvc?rev=648682&view=rev
Log:
Add watchdog thread to Apache 2. It creates additional thread in child process
if set for unatended maintenance of the workers
Modified:
tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c
tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml
tomcat/connectors/trunk/jk/xdocs/reference/apache.xml
Modified: tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c
URL:
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c?rev=648682&r1=648681&r2=648682&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c (original)
+++ tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c Wed Apr 16 05:37:22
2008
@@ -233,6 +233,8 @@
static apr_global_mutex_t *jk_log_lock = NULL;
static char *jk_shm_file = NULL;
static size_t jk_shm_size = 0;
+static int jk_watchdog_interval = 0;
+
/*
* Worker stuff
*/
@@ -1143,6 +1145,26 @@
}
/*
+ * JkWatchdogInterval Directive Handling
+ *
+ * JkWatchdogInterval seconds
+ */
+
+static const char *jk_set_watchdog_interval(cmd_parms * cmd,
+ void *dummy, const char
*watchdog_interval)
+{
+#if APR_HAS_THREADS
+ jk_watchdog_interval = atoi(watchdog_interval);
+ if (jk_watchdog_interval < 0) {
+ jk_watchdog_interval = 0;
+ }
+ return NULL;
+#else
+ return "APR was compiled without threading support. Cannot create watchdog
thread";
+#endif
+}
+
+/*
* JkLogFile Directive Handling
*
* JkLogFile file
@@ -1996,6 +2018,15 @@
"the reload check interval of the mount file"),
/*
+ * JkWatchdogInterval specifies the maintain interval for the
+ * wathdog thread.
+ *
+ * Default value is: 0 meaning watchdog thread will not be created
+ */
+ AP_INIT_TAKE1("JkWatchdogInterval", jk_set_watchdog_interval, NULL,
RSRC_CONF,
+ "maintain interval of the watchdog thread"),
+
+ /*
* JkMount mounts a url prefix to a worker (the worker need to be
* defined in the worker properties file.
*/
@@ -2273,8 +2304,9 @@
private_data.read_body_started = JK_FALSE;
private_data.r = r;
- wc_maintain(xconf->log);
-
+ /* Maintain will be done by watchdog thread */
+ if (!jk_watchdog_interval)
+ wc_maintain(xconf->log);
jk_init_ws_service(&s);
s.ws_private = &private_data;
s.pool = &private_data.p;
@@ -2725,6 +2757,28 @@
return -1;
}
+#if APR_HAS_THREADS
+
+static void * APR_THREAD_FUNC jk_watchdog_func(apr_thread_t *thd, void *data)
+{
+ int i;
+ jk_server_conf_t *conf = (jk_server_conf_t *)data;
+
+ if (JK_IS_DEBUG_LEVEL(conf->log))
+ jk_log(conf->log, JK_LOG_DEBUG,
+ "Watchdog initialized");
+ for (;;) {
+ apr_sleep(apr_time_from_sec(60));
+ if (JK_IS_DEBUG_LEVEL(conf->log))
+ jk_log(conf->log, JK_LOG_DEBUG,
+ "Watchdog running");
+ wc_maintain(conf->log);
+ }
+ apr_thread_exit(thd, 0);
+ return NULL;
+}
+
+#endif
/** Standard apache callback, initialize jk.
*/
@@ -2733,6 +2787,7 @@
jk_server_conf_t *conf;
apr_status_t rv;
int rc;
+ apr_thread_t *wdt;
conf = ap_get_module_config(s->module_config, &jk_module);
@@ -2743,6 +2798,16 @@
}
JK_TRACE_ENTER(conf->log);
+
+ if (jk_watchdog_interval) {
+#if APR_HAS_THREADS
+ rv = apr_thread_create(&wdt, NULL, jk_watchdog_func, conf, pconf);
+ if (rv != APR_SUCCESS) {
+ ap_log_error(APLOG_MARK, APLOG_CRIT, rv, s,
+ "mod_jk: could not init JK watchdog thread");
+ }
+#endif
+ }
if ((rc = jk_shm_attach(jk_shm_file, jk_shm_size, conf->log)) == 0) {
apr_pool_cleanup_register(pconf, conf->log, jk_cleanup_shmem,
Modified: tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml?rev=648682&r1=648681&r2=648682&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Wed Apr 16
05:37:22 2008
@@ -43,6 +43,10 @@
<br />
<subsection name="Native">
<changelog>
+ <update>
+ Add JkWatchdogInterval directive for Apache 2.0
+ that allows unatended maintenance of the workers. (mturk)
+ </update>
<fix>
Fix docs for worker attribute "secret". (rjung)
</fix>
Modified: tomcat/connectors/trunk/jk/xdocs/reference/apache.xml
URL:
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/reference/apache.xml?rev=648682&r1=648681&r2=648682&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/reference/apache.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/reference/apache.xml Wed Apr 16 05:37:22
2008
@@ -194,6 +194,17 @@
<br/>
The default value is JK_WORKER_NAME.
</p></attribute>
+<attribute name="JkWatchdogInterval" required="false"><p>
+This directive configures the watchdog thread interval in seconds.
+The workers are maintained periodically on this interval.
+If you set this directive to "0", watchdog thread will not be
+created and standard on request maintenance will be applied.
+<br/>
+The default value is 0 seconds, meaning the watchdog thread
+will not be created inside each child process.
+<br/>
+This directive has been added in version 1.2.27 of mod_jk.
+</p></attribute>
<attribute name="JkLogFile" required="false"><p>
Full or server relative path to the Tomcat Connector module log file.
It will also work with pipe, by using a value of the form "| ...".
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]