You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by rj...@apache.org on 2013/06/26 22:11:13 UTC
svn commit: r1497068 - in /tomcat/jk/trunk/native: apache-1.3/ apache-2.0/
common/ iis/
Author: rjung
Date: Wed Jun 26 20:11:12 2013
New Revision: 1497068
URL: http://svn.apache.org/r1497068
Log:
Add new configuration attributes
and also mount extensions with the same
names. Currently they don't do anything.
Next step is implementing the following
functionality:
- set_session_cookie: If true, mod_jk sets a
session cookie to ensure stickyness.
The name of the cookie is given by the
already existing configuration attribute
session_cookie.
The cookie is only set, if the browser did
not already send one, or if mod_jk has no
worker available that fits the route given in
the cookie send by the browser.
Default: false
- session_cookie_name: The PATH attribute of the
cookie send when set_session_cookie is true.
The path should be set to the application prefix.
There is no nice way of deriving it from JkMount,
so you have to set it.
Default: None
Modified:
tomcat/jk/trunk/native/apache-1.3/mod_jk.c
tomcat/jk/trunk/native/apache-2.0/mod_jk.c
tomcat/jk/trunk/native/common/jk_lb_worker.c
tomcat/jk/trunk/native/common/jk_lb_worker.h
tomcat/jk/trunk/native/common/jk_service.h
tomcat/jk/trunk/native/common/jk_uri_worker_map.c
tomcat/jk/trunk/native/common/jk_uri_worker_map.h
tomcat/jk/trunk/native/common/jk_util.c
tomcat/jk/trunk/native/common/jk_util.h
tomcat/jk/trunk/native/iis/jk_isapi_plugin.c
Modified: tomcat/jk/trunk/native/apache-1.3/mod_jk.c
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/apache-1.3/mod_jk.c?rev=1497068&r1=1497067&r2=1497068&view=diff
==============================================================================
--- tomcat/jk/trunk/native/apache-1.3/mod_jk.c (original)
+++ tomcat/jk/trunk/native/apache-1.3/mod_jk.c Wed Jun 26 20:11:12 2013
@@ -767,6 +767,12 @@ static int init_ws_service(apache_privat
if (e->session_path) {
s->extension.session_path = ap_pstrdup(r->pool, e->session_path);
}
+ if (e->set_session_cookie) {
+ s->extension.set_session_cookie = e->set_session_cookie;
+ }
+ if (e->session_cookie_path) {
+ s->extension.session_cookie_path = ap_pstrdup(r->pool, e->session_cookie_path);
+ }
}
reply_timeout = ap_table_get(r->subprocess_env, JK_ENV_REPLY_TIMEOUT);
if (reply_timeout) {
Modified: tomcat/jk/trunk/native/apache-2.0/mod_jk.c
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/apache-2.0/mod_jk.c?rev=1497068&r1=1497067&r2=1497068&view=diff
==============================================================================
--- tomcat/jk/trunk/native/apache-2.0/mod_jk.c (original)
+++ tomcat/jk/trunk/native/apache-2.0/mod_jk.c Wed Jun 26 20:11:12 2013
@@ -825,6 +825,12 @@ static int init_ws_service(apache_privat
if (e->session_path) {
s->extension.session_path = apr_pstrdup(r->pool, e->session_path);
}
+ if (e->set_session_cookie) {
+ s->extension.set_session_cookie = e->set_session_cookie;
+ }
+ if (e->session_cookie_path) {
+ s->extension.session_cookie_path = apr_pstrdup(r->pool, e->session_cookie_path);
+ }
}
reply_timeout = apr_table_get(r->subprocess_env, JK_ENV_REPLY_TIMEOUT);
if (reply_timeout) {
Modified: tomcat/jk/trunk/native/common/jk_lb_worker.c
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_lb_worker.c?rev=1497068&r1=1497067&r2=1497068&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_lb_worker.c (original)
+++ tomcat/jk/trunk/native/common/jk_lb_worker.c Wed Jun 26 20:11:12 2013
@@ -1791,6 +1791,10 @@ static int JK_METHOD init(jk_worker_t *p
strncpy(p->session_path,
jk_get_lb_session_path(props, p->name, JK_PATH_SESSION_IDENTIFIER),
JK_SHM_STR_SIZ);
+ p->set_session_cookie = jk_get_lb_set_session_cookie(props, p->name, JK_FALSE);
+ strncpy(p->session_cookie_path,
+ jk_get_lb_session_cookie_path(props, p->name, "/"),
+ JK_SHM_STR_SIZ);
JK_INIT_CS(&(p->cs), i);
if (i == JK_FALSE) {
Modified: tomcat/jk/trunk/native/common/jk_lb_worker.h
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_lb_worker.h?rev=1497068&r1=1497067&r2=1497068&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_lb_worker.h (original)
+++ tomcat/jk/trunk/native/common/jk_lb_worker.h Wed Jun 26 20:11:12 2013
@@ -200,6 +200,8 @@ struct lb_worker
char session_cookie[JK_SHM_STR_SIZ+1];
/* Session path */
char session_path[JK_SHM_STR_SIZ+1];
+ int set_session_cookie;
+ char session_cookie_path[JK_SHM_STR_SIZ+1];
};
typedef struct lb_worker lb_worker_t;
Modified: tomcat/jk/trunk/native/common/jk_service.h
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_service.h?rev=1497068&r1=1497067&r2=1497068&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_service.h (original)
+++ tomcat/jk/trunk/native/common/jk_service.h Wed Jun 26 20:11:12 2013
@@ -101,6 +101,10 @@ struct svc_extension
char *session_cookie;
/* session_path overwrite */
char *session_path;
+ /* Whether mod_jk should set the session cookie itself */
+ int set_session_cookie;
+ /* An optional PATH to add the the set session cookie */
+ char *session_cookie_path;
};
typedef struct svc_extension svc_extension_t;
Modified: tomcat/jk/trunk/native/common/jk_uri_worker_map.c
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_uri_worker_map.c?rev=1497068&r1=1497067&r2=1497068&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_uri_worker_map.c (original)
+++ tomcat/jk/trunk/native/common/jk_uri_worker_map.c Wed Jun 26 20:11:12 2013
@@ -39,16 +39,18 @@
#define JK_STRNCMP strncmp
#endif
-#define JK_UWMAP_EXTENSION_REPLY_TIMEOUT "reply_timeout="
-#define JK_UWMAP_EXTENSION_STICKY_IGNORE "sticky_ignore="
-#define JK_UWMAP_EXTENSION_STATELESS "stateless="
-#define JK_UWMAP_EXTENSION_ACTIVE "active="
-#define JK_UWMAP_EXTENSION_DISABLED "disabled="
-#define JK_UWMAP_EXTENSION_STOPPED "stopped="
-#define JK_UWMAP_EXTENSION_FAIL_ON_STATUS "fail_on_status="
-#define JK_UWMAP_EXTENSION_USE_SRV_ERRORS "use_server_errors="
-#define JK_UWMAP_EXTENSION_SESSION_COOKIE "session_cookie="
-#define JK_UWMAP_EXTENSION_SESSION_PATH "session_path="
+#define JK_UWMAP_EXTENSION_REPLY_TIMEOUT "reply_timeout="
+#define JK_UWMAP_EXTENSION_STICKY_IGNORE "sticky_ignore="
+#define JK_UWMAP_EXTENSION_STATELESS "stateless="
+#define JK_UWMAP_EXTENSION_ACTIVE "active="
+#define JK_UWMAP_EXTENSION_DISABLED "disabled="
+#define JK_UWMAP_EXTENSION_STOPPED "stopped="
+#define JK_UWMAP_EXTENSION_FAIL_ON_STATUS "fail_on_status="
+#define JK_UWMAP_EXTENSION_USE_SRV_ERRORS "use_server_errors="
+#define JK_UWMAP_EXTENSION_SESSION_COOKIE "session_cookie="
+#define JK_UWMAP_EXTENSION_SESSION_PATH "session_path="
+#define JK_UWMAP_EXTENSION_SET_SESSION_COOKIE "set_session_cookie="
+#define JK_UWMAP_EXTENSION_SESSION_COOKIE_PATH "session_cookie_path="
#define IND_SWITCH(x) (((x)+1) % 2)
#define IND_THIS(x) ((x)[uw_map->index])
@@ -554,6 +556,18 @@ static void extension_fix_session(jk_poo
JK_UWMAP_EXTENSION_SESSION_PATH " for %s ignored",
name, extensions->session_path);
}
+ if (jw->type != JK_LB_WORKER_TYPE && extensions->set_session_cookie) {
+ jk_log(l, JK_LOG_WARNING,
+ "Worker %s is not of type lb, extension "
+ JK_UWMAP_EXTENSION_SET_SESSION_COOKIE " for %s ignored",
+ name, extensions->set_session_cookie ? "'true'" : "'false'");
+ }
+ if (jw->type != JK_LB_WORKER_TYPE && extensions->session_cookie_path) {
+ jk_log(l, JK_LOG_WARNING,
+ "Worker %s is not of type lb, extension "
+ JK_UWMAP_EXTENSION_SESSION_COOKIE_PATH " for %s ignored",
+ name, extensions->session_cookie_path);
+ }
}
void extension_fix(jk_pool_t *p, const char *name,
@@ -642,6 +656,8 @@ void parse_rule_extensions(char *rule, r
extensions->use_server_error_pages = 0;
extensions->session_cookie = NULL;
extensions->session_path = NULL;
+ extensions->set_session_cookie = JK_FALSE;
+ extensions->session_cookie_path = NULL;
#ifdef _MT_CODE_PTHREAD
param = strtok_r(rule, ";", &lasts);
@@ -736,6 +752,29 @@ void parse_rule_extensions(char *rule, r
extensions->session_path = param + strlen(JK_UWMAP_EXTENSION_SESSION_PATH);
}
}
+ else if (!strncmp(param, JK_UWMAP_EXTENSION_SET_SESSION_COOKIE, strlen(JK_UWMAP_EXTENSION_SET_SESSION_COOKIE))) {
+ if (extensions->set_session_cookie)
+ jk_log(l, JK_LOG_WARNING,
+ "extension '%s' in uri worker map only allowed once",
+ JK_UWMAP_EXTENSION_SET_SESSION_COOKIE);
+ else {
+ int val = atoi(param + strlen(JK_UWMAP_EXTENSION_SET_SESSION_COOKIE));
+ if (val) {
+ extensions->set_session_cookie = JK_TRUE;
+ }
+ else {
+ extensions->set_session_cookie = JK_FALSE;
+ }
+ }
+ }
+ else if (!strncmp(param, JK_UWMAP_EXTENSION_SESSION_COOKIE_PATH, strlen(JK_UWMAP_EXTENSION_SESSION_COOKIE_PATH))) {
+ if (extensions->session_cookie_path)
+ jk_log(l, JK_LOG_WARNING,
+ "extension '%s' in uri worker map only allowed once",
+ JK_UWMAP_EXTENSION_SESSION_COOKIE_PATH);
+ else
+ extensions->session_cookie_path = param + strlen(JK_UWMAP_EXTENSION_SESSION_COOKIE_PATH);
+ }
else {
jk_log(l, JK_LOG_WARNING,
"unknown rule extension '%s'",
Modified: tomcat/jk/trunk/native/common/jk_uri_worker_map.h
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_uri_worker_map.h?rev=1497068&r1=1497067&r2=1497068&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_uri_worker_map.h (original)
+++ tomcat/jk/trunk/native/common/jk_uri_worker_map.h Wed Jun 26 20:11:12 2013
@@ -100,6 +100,8 @@ struct rule_extension
char *session_cookie;
/* session_path overwrite */
char *session_path;
+ int set_session_cookie;
+ char *session_cookie_path;
};
typedef struct rule_extension rule_extension_t;
Modified: tomcat/jk/trunk/native/common/jk_util.c
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_util.c?rev=1497068&r1=1497067&r2=1497068&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_util.c (original)
+++ tomcat/jk/trunk/native/common/jk_util.c Wed Jun 26 20:11:12 2013
@@ -73,6 +73,8 @@
#define STICKY_SESSION_FORCE "sticky_session_force"
#define SESSION_COOKIE_OF_WORKER "session_cookie"
#define SESSION_PATH_OF_WORKER "session_path"
+#define SET_SESSION_COOKIE "set_session_cookie"
+#define SESSION_COOKIE_PATH_OF_WORKER "session_cookie_path"
#define LOCAL_WORKER_DEPRECATED "local_worker"
#define LOCAL_WORKER_ONLY_DEPRECATED "local_worker_only"
@@ -204,6 +206,8 @@ static const char *unique_properties[] =
STICKY_SESSION_FORCE,
SESSION_COOKIE_OF_WORKER,
SESSION_PATH_OF_WORKER,
+ SET_SESSION_COOKIE,
+ SESSION_COOKIE_PATH_OF_WORKER,
LOCAL_WORKER_DEPRECATED,
LOCAL_WORKER_ONLY_DEPRECATED,
JVM_ROUTE_OF_WORKER_DEPRECATED,
@@ -299,6 +303,8 @@ static const char *supported_properties[
STICKY_SESSION_FORCE,
SESSION_COOKIE_OF_WORKER,
SESSION_PATH_OF_WORKER,
+ SET_SESSION_COOKIE,
+ SESSION_COOKIE_PATH_OF_WORKER,
LOCAL_WORKER_DEPRECATED,
LOCAL_WORKER_ONLY_DEPRECATED,
JVM_ROUTE_OF_WORKER_DEPRECATED,
@@ -1952,6 +1958,28 @@ const char *jk_get_lb_session_path(jk_ma
return jk_map_get_string(m, buf, def);
}
+int jk_get_lb_set_session_cookie(jk_map_t *m, const char *wname, int def)
+{
+ char buf[PARAM_BUFFER_SIZE];
+
+ if (m && wname) {
+ MAKE_WORKER_PARAM(SET_SESSION_COOKIE);
+ return jk_map_get_bool(m, buf, def);
+ }
+ return def;
+}
+
+const char *jk_get_lb_session_cookie_path(jk_map_t *m, const char *wname, const char *def)
+{
+ char buf[PARAM_BUFFER_SIZE];
+
+ if (!m || !wname) {
+ return NULL;
+ }
+ MAKE_WORKER_PARAM(SESSION_COOKIE_PATH_OF_WORKER);
+ return jk_map_get_string(m, buf, def);
+}
+
int is_http_status_fail(unsigned int http_status_fail_num,
int *http_status_fail, int status)
{
Modified: tomcat/jk/trunk/native/common/jk_util.h
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_util.h?rev=1497068&r1=1497067&r2=1497068&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_util.h (original)
+++ tomcat/jk/trunk/native/common/jk_util.h Wed Jun 26 20:11:12 2013
@@ -123,6 +123,10 @@ const char *jk_get_lb_session_cookie(jk_
const char *jk_get_lb_session_path(jk_map_t *m, const char *wname, const char *def);
+int jk_get_lb_set_session_cookie(jk_map_t *m, const char *wname, int def);
+
+const char *jk_get_lb_session_cookie_path(jk_map_t *m, const char *wname, const char *def);
+
int jk_get_worker_retries(jk_map_t *m, const char *wname, int def);
int jk_get_is_worker_disabled(jk_map_t *m, const char *wname);
Modified: tomcat/jk/trunk/native/iis/jk_isapi_plugin.c
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/iis/jk_isapi_plugin.c?rev=1497068&r1=1497067&r2=1497068&view=diff
==============================================================================
--- tomcat/jk/trunk/native/iis/jk_isapi_plugin.c (original)
+++ tomcat/jk/trunk/native/iis/jk_isapi_plugin.c Wed Jun 26 20:11:12 2013
@@ -3238,6 +3238,12 @@ static int init_ws_service(isapi_private
if (e->session_path) {
s->extension.session_path = jk_pool_strdup(s->pool, e->session_path);
}
+ if (e->set_session_cookie) {
+ s->extension.set_session_cookie = e->set_session_cookie;
+ }
+ if (e->session_cookie_path) {
+ s->extension.session_cookie_path = jk_pool_strdup(s->pool, e->session_cookie_path);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org