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 2011/10/23 22:13:31 UTC
svn commit: r1187963 - in /tomcat/jk/trunk: native/apache-1.3/
native/apache-2.0/ native/common/ native/iis/ xdocs/miscellaneous/
xdocs/reference/
Author: rjung
Date: Sun Oct 23 20:13:30 2011
New Revision: 1187963
URL: http://svn.apache.org/viewvc?rev=1187963&view=rev
Log:
BZ 51326: Add "session_cookie" and "session_path"
rule extensions. Contributed by Eiji Takahashi.
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_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/iis/jk_isapi_plugin.c
tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml
tomcat/jk/trunk/xdocs/reference/uriworkermap.xml
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=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/native/apache-1.3/mod_jk.c (original)
+++ tomcat/jk/trunk/native/apache-1.3/mod_jk.c Sun Oct 23 20:13:30 2011
@@ -755,6 +755,12 @@ static int init_ws_service(apache_privat
s->extension.fail_on_status = ap_palloc(r->pool, e->fail_on_status_size * sizeof(int));
memcpy(s->extension.fail_on_status, e->fail_on_status, e->fail_on_status_size * sizeof(int));
}
+ if (e->session_cookie) {
+ s->extension.session_cookie = ap_pstrdup(r->pool, e->session_cookie);
+ }
+ if (e->session_path) {
+ s->extension.session_path = ap_pstrdup(r->pool, e->session_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=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/native/apache-2.0/mod_jk.c (original)
+++ tomcat/jk/trunk/native/apache-2.0/mod_jk.c Sun Oct 23 20:13:30 2011
@@ -809,6 +809,12 @@ static int init_ws_service(apache_privat
s->extension.fail_on_status = apr_palloc(r->pool, e->fail_on_status_size * sizeof(int));
memcpy(s->extension.fail_on_status, e->fail_on_status, e->fail_on_status_size * sizeof(int));
}
+ if (e->session_cookie) {
+ s->extension.session_cookie = apr_pstrdup(r->pool, e->session_cookie);
+ }
+ if (e->session_path) {
+ s->extension.session_path = apr_pstrdup(r->pool, e->session_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=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_lb_worker.c (original)
+++ tomcat/jk/trunk/native/common/jk_lb_worker.c Sun Oct 23 20:13:30 2011
@@ -492,6 +492,8 @@ static char *get_cookie(jk_ws_service_t
static char *get_sessionid(jk_ws_service_t *s, lb_worker_t *p, jk_logger_t *l)
{
char *val;
+ char *session_path;
+ char *session_cookie;
/* If the web server sets a route, ignore the real session id
* and fake a new one for that route.
@@ -504,9 +506,16 @@ static char *get_sessionid(jk_ws_service
return val;
}
- val = get_path_param(s, p->session_path);
+ // set sesson_path
+ session_path = (s->extension.session_path) ?
+ s->extension.session_path : p->session_path;
+ // set session_cookie
+ session_cookie = (s->extension.session_cookie) ?
+ s->extension.session_cookie : p->session_cookie;
+
+ val = get_path_param(s, session_path);
if (!val) {
- val = get_cookie(s, p->session_cookie);
+ val = get_cookie(s, session_cookie);
}
if (val && !*val) {
/* TODO: For now only log the empty sessions.
@@ -517,6 +526,8 @@ static char *get_sessionid(jk_ws_service
"Detected empty session identifier.");
return NULL;
}
+ if (JK_IS_DEBUG_LEVEL(l))
+ jk_log(l, JK_LOG_DEBUG, "Detected session identifier [%s].", val);
return val;
}
Modified: tomcat/jk/trunk/native/common/jk_service.h
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_service.h?rev=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_service.h (original)
+++ tomcat/jk/trunk/native/common/jk_service.h Sun Oct 23 20:13:30 2011
@@ -97,6 +97,10 @@ struct svc_extension
int *fail_on_status;
/* Use server error pages for responses >= 400. */
int use_server_error_pages;
+ /* sesson_cookie overwrite */
+ char *session_cookie;
+ /* sesson_path overwrite */
+ char *session_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=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_uri_worker_map.c (original)
+++ tomcat/jk/trunk/native/common/jk_uri_worker_map.c Sun Oct 23 20:13:30 2011
@@ -47,6 +47,8 @@
#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 IND_SWITCH(x) (((x)+1) % 2)
#define IND_THIS(x) ((x)[uw_map->index])
@@ -466,6 +468,9 @@ static void extension_fix_fail_on_status
static void extension_fix_activation(jk_pool_t *p, const char *name, jk_worker_t *jw,
rule_extension_t *extensions, jk_logger_t *l)
{
+
+ JK_TRACE_ENTER(l);
+
if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
"Checking extension for worker %s of type %s (%d)",
@@ -482,6 +487,7 @@ static void extension_fix_activation(jk_
if (!extensions->activation) {
jk_log(l, JK_LOG_ERROR,
"can't alloc extensions activation list");
+ JK_TRACE_EXIT(l);
return;
} else if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
@@ -519,6 +525,26 @@ static void extension_fix_activation(jk_
JK_UWMAP_EXTENSION_STOPPED " for %s ignored",
name, extensions->stopped);
}
+
+ JK_TRACE_EXIT(l);
+
+}
+
+static void extension_fix_session(jk_pool_t *p, const char *name, jk_worker_t *jw,
+ rule_extension_t *extensions, jk_logger_t *l)
+{
+ if (jw->type != JK_LB_WORKER_TYPE && extensions->session_cookie) {
+ jk_log(l, JK_LOG_WARNING,
+ "Worker %s is not of type lb, extension "
+ JK_UWMAP_EXTENSION_SESSION_COOKIE " for %s ignored",
+ name, extensions->session_cookie);
+ }
+ if (jw->type != JK_LB_WORKER_TYPE && extensions->session_path) {
+ jk_log(l, JK_LOG_WARNING,
+ "Worker %s is not of type lb, extension "
+ JK_UWMAP_EXTENSION_SESSION_PATH " for %s ignored",
+ name, extensions->session_path);
+ }
}
void extension_fix(jk_pool_t *p, const char *name,
@@ -534,6 +560,7 @@ void extension_fix(jk_pool_t *p, const c
if (extensions->fail_on_status_str) {
extension_fix_fail_on_status(p, name, extensions, l);
}
+ extension_fix_session(p, name, jw, extensions, l);
}
void uri_worker_map_switch(jk_uri_worker_map_t *uw_map, jk_logger_t *l)
@@ -602,6 +629,8 @@ void parse_rule_extensions(char *rule, r
extensions->fail_on_status = NULL;
extensions->fail_on_status_str = NULL;
extensions->use_server_error_pages = 0;
+ extensions->session_cookie = NULL;
+ extensions->session_path = NULL;
#ifdef _MT_CODE_PTHREAD
param = strtok_r(rule, ";", &lasts);
@@ -670,6 +699,32 @@ void parse_rule_extensions(char *rule, r
else
extensions->fail_on_status_str = param + strlen(JK_UWMAP_EXTENSION_FAIL_ON_STATUS);
}
+ else if (!strncmp(param, JK_UWMAP_EXTENSION_SESSION_COOKIE, strlen(JK_UWMAP_EXTENSION_SESSION_COOKIE))) {
+ if (extensions->session_cookie)
+ jk_log(l, JK_LOG_WARNING,
+ "extension '%s' in uri worker map only allowed once",
+ JK_UWMAP_EXTENSION_SESSION_COOKIE);
+ else
+ extensions->session_cookie = param + strlen(JK_UWMAP_EXTENSION_SESSION_COOKIE);
+ }
+ else if (!strncmp(param, JK_UWMAP_EXTENSION_SESSION_PATH, strlen(JK_UWMAP_EXTENSION_SESSION_PATH))) {
+ if (extensions->session_path)
+ jk_log(l, JK_LOG_WARNING,
+ "extension '%s' in uri worker map only allowed once",
+ JK_UWMAP_EXTENSION_SESSION_PATH);
+ else {
+ // Check if the session identifier starts with semicolon.
+ if (!strcmp(param, JK_UWMAP_EXTENSION_SESSION_PATH)) {
+#ifdef _MT_CODE_PTHREAD
+ param = strtok_r(NULL, ";", &lasts);
+#else
+ param = strtok(NULL, ";");
+#endif
+ extensions->session_path = param;
+ } else
+ extensions->session_path = param + strlen(JK_UWMAP_EXTENSION_SESSION_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=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_uri_worker_map.h (original)
+++ tomcat/jk/trunk/native/common/jk_uri_worker_map.h Sun Oct 23 20:13:30 2011
@@ -96,6 +96,10 @@ struct rule_extension
char *fail_on_status_str;
/* Use server error pages for responses >= 400. */
int use_server_error_pages;
+ /* session_cookie overwrite */
+ char *session_cookie;
+ /* session_path overwrite */
+ char *session_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=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_util.c (original)
+++ tomcat/jk/trunk/native/common/jk_util.c Sun Oct 23 20:13:30 2011
@@ -2081,6 +2081,8 @@ void jk_init_ws_service(jk_ws_service_t
s->extension.activation = NULL;
s->extension.fail_on_status_size = 0;
s->extension.fail_on_status = NULL;
+ s->extension.session_cookie = NULL;
+ s->extension.session_path = NULL;
s->response_started = JK_FALSE;
s->response_blocked = JK_FALSE;
s->http_response_status = JK_HTTP_OK;
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=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/native/iis/jk_isapi_plugin.c (original)
+++ tomcat/jk/trunk/native/iis/jk_isapi_plugin.c Sun Oct 23 20:13:30 2011
@@ -3114,6 +3114,13 @@ static int init_ws_service(isapi_private
s->extension.fail_on_status = jk_pool_alloc(s->pool, e->fail_on_status_size * sizeof(int));
memcpy(s->extension.fail_on_status, e->fail_on_status, e->fail_on_status_size * sizeof(int));
}
+ if (e->session_cookie) {
+ s->extension.session_cookie = jk_pool_strdup(s->pool, e->session_cookie);
+ }
+ if (e->session_path) {
+ s->extension.session_path = jk_pool_strdup(s->pool, e->session_path);
+ }
+
}
s->uw_map = uw_map;
Modified: tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml?rev=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml (original)
+++ tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml Sun Oct 23 20:13:30 2011
@@ -44,6 +44,10 @@
<br />
<subsection name="Native">
<changelog>
+ <add>
+ <bug>51326</bug>: URI Map: Add "session_cookie" and "session_path"
+ rule extensions. Contributed by Eiji Takahashi. (rjung)
+ </add>
<update>
<bug>51333</bug>: IIS: Document configuration
requirement for 64 Bit environment. (rjung)
Modified: tomcat/jk/trunk/xdocs/reference/uriworkermap.xml
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/xdocs/reference/uriworkermap.xml?rev=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/xdocs/reference/uriworkermap.xml (original)
+++ tomcat/jk/trunk/xdocs/reference/uriworkermap.xml Sun Oct 23 20:13:30 2011
@@ -340,6 +340,14 @@ for this status code.
</source>
</p>
</subsection>
+<subsection name="Extensions session_cookie and session_path">
+<br/>
+<p>
+The extensions <code>session_cookie</code> and <code>session_path</code>
+allows to define the load balancer worker attributes of the same name
+per mount.
+</p>
+</subsection>
</section>
<section name="Virtual host integration">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org