Author: rjung
Date: Thu Sep 22 18:01:31 2011
New Revision: 1174289

URL: http://svn.apache.org/viewvc?rev=1174289&view=rev
Log:
- URI Map: Add "sticky_ignore" extension attributes to uri worker map.
  It allows to disable stickyness for individual mounts.

- HTTPD: Allow dynamic disabling of stickyness using the environment
  variable JK_STICKY_IGNORE. This can be useful to break cookie stickyness
  for non-sticky requests like login forms.

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_status.c
    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/apache.xml
    tomcat/jk/trunk/xdocs/reference/uriworkermap.xml
    tomcat/jk/trunk/xdocs/reference/workers.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=1174289&r1=1174288&r2=1174289&view=diff
==============================================================================
--- tomcat/jk/trunk/native/apache-1.3/mod_jk.c (original)
+++ tomcat/jk/trunk/native/apache-1.3/mod_jk.c Thu Sep 22 18:01:31 2011
@@ -79,6 +79,7 @@
 #define JK_ENV_KEY_SIZE             ("SSL_CIPHER_USEKEYSIZE")
 #define JK_ENV_CERTCHAIN_PREFIX     ("SSL_CLIENT_CERT_CHAIN_")
 #define JK_ENV_REPLY_TIMEOUT        ("JK_REPLY_TIMEOUT")
+#define JK_ENV_STICKY_IGNORE        ("JK_STICKY_IGNORE")
 #define JK_ENV_WORKER_NAME          ("JK_WORKER_NAME")
 #define JK_NOTE_WORKER_NAME         ("JK_WORKER_NAME")
 #define JK_NOTE_WORKER_TYPE         ("JK_WORKER_TYPE")
@@ -679,6 +680,7 @@ static int init_ws_service(apache_privat
     request_rec *r = private_data->r;
     char *ssl_temp = NULL;
     const char *reply_timeout = NULL;
+    const char *sticky_ignore = NULL;
     rule_extension_t *e;
 
     /* Copy in function pointers (which are really methods) */
@@ -726,6 +728,7 @@ static int init_ws_service(apache_privat
     e = (rule_extension_t *)ap_get_module_config(r->request_config, 
&jk_module);
     if (e) {
         s->extension.reply_timeout = e->reply_timeout;
+        s->extension.sticky_ignore = e->sticky_ignore;
         s->extension.use_server_error_pages = e->use_server_error_pages;
         if (e->activation) {
             s->extension.activation = ap_palloc(r->pool, e->activation_size * 
sizeof(int));
@@ -744,6 +747,22 @@ static int init_ws_service(apache_privat
             s->extension.reply_timeout = r;
     }
 
+    sticky_ignore = ap_table_get(r->subprocess_env, JK_ENV_STICKY_IGNORE);
+    if (sticky_ignore) {
+        if (*sticky_ignore == '\0') {
+            s->extension.reply_timeout = JK_TRUE;
+        }
+        else {
+            int r = atoi(sticky_ignore);
+            if (r) {
+                s->extension.reply_timeout = JK_TRUE;
+            }
+            else {
+                s->extension.reply_timeout = JK_FALSE;
+            }
+        }
+    }
+
     if (conf->options & JK_OPT_DISABLEREUSE)
         s->disable_reuse = 1;
 

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=1174289&r1=1174288&r2=1174289&view=diff
==============================================================================
--- tomcat/jk/trunk/native/apache-2.0/mod_jk.c (original)
+++ tomcat/jk/trunk/native/apache-2.0/mod_jk.c Thu Sep 22 18:01:31 2011
@@ -114,6 +114,7 @@
 #define JK_ENV_KEY_SIZE             ("SSL_CIPHER_USEKEYSIZE")
 #define JK_ENV_CERTCHAIN_PREFIX     ("SSL_CLIENT_CERT_CHAIN_")
 #define JK_ENV_REPLY_TIMEOUT        ("JK_REPLY_TIMEOUT")
+#define JK_ENV_STICKY_IGNORE        ("JK_STICKY_IGNORE")
 #define JK_ENV_WORKER_NAME          ("JK_WORKER_NAME")
 #define JK_NOTE_WORKER_NAME         ("JK_WORKER_NAME")
 #define JK_NOTE_WORKER_TYPE         ("JK_WORKER_TYPE")
@@ -734,6 +735,7 @@ static int init_ws_service(apache_privat
     request_rec *r = private_data->r;
     char *ssl_temp = NULL;
     const char *reply_timeout = NULL;
+    const char *sticky_ignore = NULL;
     rule_extension_t *e;
 
     /* Copy in function pointers (which are really methods) */
@@ -780,6 +782,7 @@ static int init_ws_service(apache_privat
     e = (rule_extension_t *)ap_get_module_config(r->request_config, 
&jk_module);
     if (e) {
         s->extension.reply_timeout = e->reply_timeout;
+        s->extension.sticky_ignore = e->sticky_ignore;
         s->extension.use_server_error_pages = e->use_server_error_pages;
         if (e->activation) {
             s->extension.activation = apr_palloc(r->pool, e->activation_size * 
sizeof(int));
@@ -798,6 +801,22 @@ static int init_ws_service(apache_privat
             s->extension.reply_timeout = r;
     }
 
+    sticky_ignore = apr_table_get(r->subprocess_env, JK_ENV_STICKY_IGNORE);
+    if (sticky_ignore) {
+        if (*sticky_ignore == '\0') {
+            s->extension.reply_timeout = JK_TRUE;
+        }
+        else {
+            int r = atoi(sticky_ignore);
+            if (r) {
+                s->extension.reply_timeout = JK_TRUE;
+            }
+            else {
+                s->extension.reply_timeout = JK_FALSE;
+            }
+        }
+    }
+
     if (conf->options & JK_OPT_DISABLEREUSE)
         s->disable_reuse = 1;
 

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=1174289&r1=1174288&r2=1174289&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_lb_worker.c (original)
+++ tomcat/jk/trunk/native/common/jk_lb_worker.c Thu Sep 22 18:01:31 2011
@@ -1118,9 +1118,9 @@ static int JK_METHOD service(jk_endpoint
     jk_b_reset(s->reco_buf);
     s->reco_status = RECO_INITED;
 
-    if (p->worker->sticky_session) {
+    if (p->worker->sticky_session && s->extension.sticky_ignore != JK_TRUE) {
         /* Use sessionid only if sticky_session is
-         * defined for this load balancer
+         * defined and not overwritten for this load balancer
          */
         sessionid = get_sessionid(s, p->worker, l);
     }

Modified: tomcat/jk/trunk/native/common/jk_service.h
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_service.h?rev=1174289&r1=1174288&r2=1174289&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_service.h (original)
+++ tomcat/jk/trunk/native/common/jk_service.h Thu Sep 22 18:01:31 2011
@@ -82,6 +82,8 @@ struct svc_extension
 {
     /* reply_timeout overwrite */
     int reply_timeout;
+    /* Whether to ignore session routing info */
+    int sticky_ignore;
     /* activation state overwrites for load balancers */
     /* Dynamically allocated array with one entry per lb member. */
     int *activation;

Modified: tomcat/jk/trunk/native/common/jk_status.c
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_status.c?rev=1174289&r1=1174288&r2=1174289&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_status.c (original)
+++ tomcat/jk/trunk/native/common/jk_status.c Thu Sep 22 18:01:31 2011
@@ -231,10 +231,10 @@
 #define JK_STATUS_FORM_START               "<form method=\"%s\" 
action=\"%s\">\n"
 #define JK_STATUS_FORM_HIDDEN_INT          "<input type=\"hidden\" name=\"%s\" 
value=\"%d\"/>\n"
 #define JK_STATUS_FORM_HIDDEN_STRING       "<input type=\"hidden\" name=\"%s\" 
value=\"%s\"/>\n"
-#define JK_STATUS_URI_MAP_TABLE_HEAD       
"<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>\n"
-#define JK_STATUS_URI_MAP_TABLE_ROW        
"<tr><td>%s</td><td>%s</td><td>%s</td><td>%d</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%d</td></tr>\n"
-#define JK_STATUS_URI_MAP_TABLE_HEAD2      
"<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>\n"
-#define JK_STATUS_URI_MAP_TABLE_ROW2       
"<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%d</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%d</td></tr>\n"
+#define JK_STATUS_URI_MAP_TABLE_HEAD       
"<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>\n"
+#define JK_STATUS_URI_MAP_TABLE_ROW        
"<tr><td>%s</td><td>%s</td><td>%s</td><td>%d</td><td>%d</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%d</td></tr>\n"
+#define JK_STATUS_URI_MAP_TABLE_HEAD2      
"<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>\n"
+#define JK_STATUS_URI_MAP_TABLE_ROW2       
"<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%d</td><td>%d</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%d</td></tr>\n"
 #define JK_STATUS_SHOW_AJP_CONF_HEAD       "<tr>" \
                                            "<th>Type</th>" \
                                            "<th>" 
JK_STATUS_ARG_AJP_TEXT_HOST_STR "</th>" \
@@ -1549,6 +1549,7 @@ static void display_map(jk_ws_service_t 
                           uri_worker_map_get_match(uwr, buf, l),
                           uri_worker_map_get_source(uwr, l),
                           uwr->extensions.reply_timeout,
+                          uwr->extensions.sticky_ignore,
                           uwr->extensions.fail_on_status_str ? 
uwr->extensions.fail_on_status_str : "-",
                           uwr->extensions.active ? uwr->extensions.active : 
"-",
                           uwr->extensions.disabled ? uwr->extensions.disabled 
: "-",
@@ -1560,6 +1561,7 @@ static void display_map(jk_ws_service_t 
                           uri_worker_map_get_match(uwr, buf, l),
                           uri_worker_map_get_source(uwr, l),
                           uwr->extensions.reply_timeout,
+                          uwr->extensions.sticky_ignore,
                           uwr->extensions.fail_on_status_str ? 
uwr->extensions.fail_on_status_str : "-",
                           uwr->extensions.active ? uwr->extensions.active : 
"-",
                           uwr->extensions.disabled ? uwr->extensions.disabled 
: "-",
@@ -1575,6 +1577,7 @@ static void display_map(jk_ws_service_t 
             jk_print_xml_att_string(s, 8, "type", 
uri_worker_map_get_match(uwr, buf, l));
             jk_print_xml_att_string(s, 8, "source", 
uri_worker_map_get_source(uwr, l));
             jk_print_xml_att_int(s, 8, "reply_timeout", 
uwr->extensions.reply_timeout);
+            jk_print_xml_att_int(s, 8, "sticky_ignore", 
uwr->extensions.sticky_ignore);
             jk_print_xml_att_string(s, 8, "fail_on_status", 
uwr->extensions.fail_on_status_str);
             jk_print_xml_att_string(s, 8, "active", uwr->extensions.active);
             jk_print_xml_att_string(s, 8, "disabled", 
uwr->extensions.disabled);
@@ -1591,6 +1594,7 @@ static void display_map(jk_ws_service_t 
             jk_printf(s, " type=\"%s\"", uri_worker_map_get_match(uwr, buf, 
l));
             jk_printf(s, " source=\"%s\"", uri_worker_map_get_source(uwr, l));
             jk_printf(s, " reply_timeout=\"%d\"", 
uwr->extensions.reply_timeout);
+            jk_printf(s, " sticky_ignore=\"%d\"", 
uwr->extensions.sticky_ignore);
             jk_printf(s, " fail_on_status=\"%s\"", 
uwr->extensions.fail_on_status_str ? uwr->extensions.fail_on_status_str : "");
             jk_printf(s, " active=\"%s\"", uwr->extensions.active ? 
uwr->extensions.active : "");
             jk_printf(s, " disabled=\"%s\"", uwr->extensions.disabled ? 
uwr->extensions.disabled : "");
@@ -1605,6 +1609,7 @@ static void display_map(jk_ws_service_t 
             jk_print_prop_item_string(s, w, worker, "map", count, "type", 
uri_worker_map_get_match(uwr, buf, l));
             jk_print_prop_item_string(s, w, worker, "map", count, "source", 
uri_worker_map_get_source(uwr, l));
             jk_print_prop_item_int(s, w, worker, "map", count, 
"reply_timeout", uwr->extensions.reply_timeout);
+            jk_print_prop_item_int(s, w, worker, "map", count, 
"sticky_ignore", uwr->extensions.sticky_ignore);
             jk_print_prop_item_string(s, w, worker, "map", count, 
"fail_on_status", uwr->extensions.fail_on_status_str);
             jk_print_prop_item_string(s, w, worker, "map", count, "active", 
uwr->extensions.active);
             jk_print_prop_item_string(s, w, worker, "map", count, "disabled", 
uwr->extensions.disabled);
@@ -1659,10 +1664,10 @@ static void display_maps(jk_ws_service_t
             jk_puts(s, "]</h3><table>\n");
             if (has_server_iterator)
                 jk_printf(s, JK_STATUS_URI_MAP_TABLE_HEAD2,
-                          "Server", "URI", "Match Type", "Source", "Reply 
Timeout", "Fail on Status", "Active", "Disabled", "Stopped", "Use Server 
Errors");
+                          "Server", "URI", "Match Type", "Source", "Reply 
Timeout", "Sticky Ignore", "Fail on Status", "Active", "Disabled", "Stopped", 
"Use Server Errors");
             else
                 jk_printf(s, JK_STATUS_URI_MAP_TABLE_HEAD,
-                          "URI", "Match Type", "Source", "Reply Timeout", 
"Fail on Status", "Active", "Disabled", "Stopped", "Use Server Errors");
+                          "URI", "Match Type", "Source", "Reply Timeout", 
"Sticky Ignore", "Fail on Status", "Active", "Disabled", "Stopped", "Use Server 
Errors");
         }
         count = 0;
         if (has_server_iterator) {

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=1174289&r1=1174288&r2=1174289&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_uri_worker_map.c (original)
+++ tomcat/jk/trunk/native/common/jk_uri_worker_map.c Thu Sep 22 18:01:31 2011
@@ -40,6 +40,7 @@
 #endif
 
 #define JK_UWMAP_EXTENSION_REPLY_TIMEOUT  "reply_timeout="
+#define JK_UWMAP_EXTENSION_STICKY_IGNORE  "sticky_ignore="
 #define JK_UWMAP_EXTENSION_ACTIVE         "active="
 #define JK_UWMAP_EXTENSION_DISABLED       "disabled="
 #define JK_UWMAP_EXTENSION_STOPPED        "stopped="
@@ -637,6 +638,7 @@ int uri_worker_map_add(jk_uri_worker_map
 
         w = jk_pool_strdup(p, worker);
         uwr->extensions.reply_timeout = -1;
+        uwr->extensions.sticky_ignore = JK_FALSE;
         uwr->extensions.active = NULL;
         uwr->extensions.disabled = NULL;
         uwr->extensions.stopped = NULL;
@@ -661,6 +663,15 @@ int uri_worker_map_add(jk_uri_worker_map
                 if (!strncmp(param, JK_UWMAP_EXTENSION_REPLY_TIMEOUT, 
strlen(JK_UWMAP_EXTENSION_REPLY_TIMEOUT))) {
                     uwr->extensions.reply_timeout = atoi(param + 
strlen(JK_UWMAP_EXTENSION_REPLY_TIMEOUT));
                 }
+                else if (!strncmp(param, JK_UWMAP_EXTENSION_STICKY_IGNORE, 
strlen(JK_UWMAP_EXTENSION_STICKY_IGNORE))) {
+                    int val = atoi(param + 
strlen(JK_UWMAP_EXTENSION_STICKY_IGNORE));
+                    if (val) {
+                        uwr->extensions.sticky_ignore = JK_TRUE;
+                    }
+                    else {
+                        uwr->extensions.sticky_ignore = JK_FALSE;
+                    }
+                }
                 else if (!strncmp(param, JK_UWMAP_EXTENSION_USE_SRV_ERRORS, 
strlen(JK_UWMAP_EXTENSION_USE_SRV_ERRORS))) {
                     uwr->extensions.use_server_error_pages = atoi(param + 
strlen(JK_UWMAP_EXTENSION_USE_SRV_ERRORS));
                 }

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=1174289&r1=1174288&r2=1174289&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_uri_worker_map.h (original)
+++ tomcat/jk/trunk/native/common/jk_uri_worker_map.h Thu Sep 22 18:01:31 2011
@@ -73,6 +73,8 @@ struct rule_extension
 {
     /* reply_timeout overwrite */
     int reply_timeout;
+    /* Whether to ignore session routing info */
+    int sticky_ignore;
     /* activation state overwrites for load balancers */
     /* Number of elements in the array activations. */
     int activation_size;

Modified: tomcat/jk/trunk/native/common/jk_util.c
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_util.c?rev=1174289&r1=1174288&r2=1174289&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_util.c (original)
+++ tomcat/jk/trunk/native/common/jk_util.c Thu Sep 22 18:01:31 2011
@@ -2075,6 +2075,7 @@ void jk_init_ws_service(jk_ws_service_t 
     s->flush_packets = JK_FALSE;
     s->flush_header = JK_FALSE;
     s->extension.reply_timeout = -1;
+    s->extension.sticky_ignore = JK_FALSE;
     s->extension.use_server_error_pages = 0;
     s->extension.activation = NULL;
     s->extension.fail_on_status_size = 0;

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=1174289&r1=1174288&r2=1174289&view=diff
==============================================================================
--- tomcat/jk/trunk/native/iis/jk_isapi_plugin.c (original)
+++ tomcat/jk/trunk/native/iis/jk_isapi_plugin.c Thu Sep 22 18:01:31 2011
@@ -3084,6 +3084,7 @@ static int init_ws_service(isapi_private
         if (JK_IS_DEBUG_LEVEL(logger))
             jk_log(logger, JK_LOG_DEBUG, "Applying service extensions" );
         s->extension.reply_timeout = e->reply_timeout;
+        s->extension.sticky_ignore = e->sticky_ignore;
         s->extension.use_server_error_pages = e->use_server_error_pages;
         if (e->activation) {
             s->extension.activation = jk_pool_alloc(s->pool, 
e->activation_size * sizeof(int));

Modified: tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml?rev=1174289&r1=1174288&r2=1174289&view=diff
==============================================================================
--- tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml (original)
+++ tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml Thu Sep 22 18:01:31 2011
@@ -40,6 +40,22 @@
   new documentation project for JK was started.
   </p>
 </section>
+<section name="Changes between 1.2.32 and 1.2.33">
+  <br />
+  <subsection name="Native">
+    <changelog>
+      <add>
+        URI Map: Add "sticky_ignore" extension attributes to uri worker map.
+        It allows to disable stickyness for individual mounts. (rjung)
+      </add>
+      <add>
+        HTTPD: Allow dynamic disabling of stickyness using the environment
+        variable JK_STICKY_IGNORE. This can be useful to break cookie 
stickyness
+        for non-sticky requests like login forms. (rjung)
+      </add>
+    </changelog>
+  </subsection>
+</section>
 <section name="Changes between 1.2.31 and 1.2.32">
   <br />
   <subsection name="Native">

Modified: tomcat/jk/trunk/xdocs/reference/apache.xml
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/xdocs/reference/apache.xml?rev=1174289&r1=1174288&r2=1174289&view=diff
==============================================================================
--- tomcat/jk/trunk/xdocs/reference/apache.xml (original)
+++ tomcat/jk/trunk/xdocs/reference/apache.xml Thu Sep 22 18:01:31 2011
@@ -1120,6 +1120,24 @@ for more complex rules to change the <b>
 to request properties like e.g. the request URI.
 This is available since version 1.2.27.
 </p>
+<p>
+The environment variable
+<b>JK_IGNORE_STICKY</b> can be set to disable session stickyness
+for individual requests. If the variable is set to an empty string
+or a nonzero number, session stickyness will be disabled. Setting
+it to <b>0</b> will reset to the behaviour defined by the worker
+configuration.
+This is available since version 1.2.33.
+</p>
+<p>
+This feature can be useful to optimize load balancing when using
+cookie based session stickyness. In this case, as long as she keeps
+her browser open, any request by a user who started a session will
+be send to the same Tomcat instance, even if he left the part of
+the application which uses the session. You can for instance
+set this environment variable when a user requests a login form
+to ensure, that this initial session request is balanced non-sticky.
+</p>
 </subsection>
  </section>
 </body>

Modified: tomcat/jk/trunk/xdocs/reference/uriworkermap.xml
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/xdocs/reference/uriworkermap.xml?rev=1174289&r1=1174288&r2=1174289&view=diff
==============================================================================
--- tomcat/jk/trunk/xdocs/reference/uriworkermap.xml (original)
+++ tomcat/jk/trunk/xdocs/reference/uriworkermap.xml Thu Sep 22 18:01:31 2011
@@ -246,6 +246,27 @@ For a general description of reply timeo
 <a href="../generic_howto/timeouts.html#Reply Timeout">timeouts</a> 
documentation.
 </p>
 </subsection>
+<subsection name="Extension sticky_ignore">
+<br/>
+<p>
+The extension <code>sticky_ignore</code> can disable session stickyness for a 
single mapping rule.
+<source>
+  # Disable session stickyness
+  # only for this mapping.
+  /myapp/loginform.jsp=myworker;sticky_ignore=1
+</source>
+This extension can be useful to optimize load balancing when using
+cookie based session stickyness. In this case, as long as she keeps
+her browser open, any request by a user who started a session will
+be send to the same Tomcat instance, even if he left the part of
+the application which uses the session. You can for instance
+set this environment variable when a user requests a login form
+to ensure, that this initial session request is balanced non-sticky.
+</p>
+<p>
+This extension is available since version 1.2.33.
+</p>
+</subsection>
 <subsection name="Extensions active/disabled/stopped">
 <br/>
 <p>

Modified: tomcat/jk/trunk/xdocs/reference/workers.xml
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/xdocs/reference/workers.xml?rev=1174289&r1=1174288&r2=1174289&view=diff
==============================================================================
--- tomcat/jk/trunk/xdocs/reference/workers.xml (original)
+++ tomcat/jk/trunk/xdocs/reference/workers.xml Thu Sep 22 18:01:31 2011
@@ -503,6 +503,11 @@ Tomcat worker. If sticky_session is set 
 sticky_session is set to <b>False</b>. Set sticky_session to <b>False</b> when 
Tomcat
 is using a Session Manager which can persist session data across multiple
 instances of Tomcat.
+<p>
+The <b>sticky_session</b> setting can be overwritten using the Apache httpd
+environment variable <b>JK_STICKY_IGNORE</b> and the worker map extension for
+<b>sticky_ignore</b>. This has been added in version <b>1.2.33</b>.
+</p>
 </directive>
 
 <directive name="sticky_session_force" default="False" required="false">



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to