]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: h2: expose tune.h2.max-concurrent-streams to limit the number of streams
authorWilly Tarreau <w@1wt.eu>
Thu, 27 Jul 2017 09:47:28 +0000 (11:47 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 31 Oct 2017 17:03:24 +0000 (18:03 +0100)
This will be advertised in the settings frame.

doc/configuration.txt
src/mux_h2.c

index e64cd32020e47df7408b761b6cb35e363ea5b593..8ac1fb601827c60541933ce3572a699751caf18f 100644 (file)
@@ -601,6 +601,7 @@ The following keywords are supported in the "global" section :
    - tune.comp.maxlevel
    - tune.h2.header-table-size
    - tune.h2.initial-window-size
+   - tune.h2.max-concurrent-streams
    - tune.http.cookielen
    - tune.http.logurilen
    - tune.http.maxhdr
@@ -1386,6 +1387,15 @@ tune.h2.initial-window-size <number>
   faster uploads, or to reduce it to increase fairness when dealing with many
   clients. It doesn't affect resource usage.
 
+tune.h2.max-concurrent-streams <number>
+  Sets the HTTP/2 maximum number of concurrent streams per connection (ie the
+  number of outstanding requests on a single connection). The default value is
+  100. A larger one may slightly improve page load time for complex sites when
+  visited over high latency networks, but increases the amount of resources a
+  single client may allocate. A value of zero disables the limit so a single
+  client may create as many streams as allocatable by haproxy. It is highly
+  recommended not to change this value.
+
 tune.http.cookielen <number>
   Sets the maximum length of captured cookies. This is the maximum value that
   the "capture cookie xxx len yyy" will be allowed to take, and any upper value
index 6143d3bf274b2c70f746d11f68ecd51c7a70b761..ff870a118db47a470377830010ec9f025c47a928 100644 (file)
@@ -19,6 +19,7 @@
 /* a few settings from the global section */
 static int h2_settings_header_table_size      =  4096; /* initial value */
 static int h2_settings_initial_window_size    = 65535; /* initial value */
+static int h2_settings_max_concurrent_streams =   100;
 
 
 /*****************************************************************/
@@ -163,6 +164,22 @@ static int h2_parse_initial_window_size(char **args, int section_type, struct pr
        return 0;
 }
 
+/* config parser for global "tune.h2.max-concurrent-streams" */
+static int h2_parse_max_concurrent_streams(char **args, int section_type, struct proxy *curpx,
+                                           struct proxy *defpx, const char *file, int line,
+                                           char **err)
+{
+       if (too_many_args(1, args, err, NULL))
+               return -1;
+
+       h2_settings_max_concurrent_streams = atoi(args[1]);
+       if (h2_settings_max_concurrent_streams < 0) {
+               memprintf(err, "'%s' expects a positive numeric value.", args[0]);
+               return -1;
+       }
+       return 0;
+}
+
 
 /****************************************/
 /* MUX initialization and instanciation */
@@ -193,6 +210,7 @@ static struct alpn_mux_list alpn_mux_h2 =
 static struct cfg_kw_list cfg_kws = {ILH, {
        { CFG_GLOBAL, "tune.h2.header-table-size",      h2_parse_header_table_size      },
        { CFG_GLOBAL, "tune.h2.initial-window-size",    h2_parse_initial_window_size    },
+       { CFG_GLOBAL, "tune.h2.max-concurrent-streams", h2_parse_max_concurrent_streams },
        { 0, NULL, NULL }
 }};