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