[PATCH] wireproto: add config knob for http header length limit

Mike Edgar adgar at google.com
Mon Jun 29 11:49:37 CDT 2015

# HG changeset patch
# User Mike Edgar <adgar at google.com>
# Date 1435595731 14400
#      Mon Jun 29 12:35:31 2015 -0400
# Node ID e3909b550d63b8f8c00ac322c24947f63dd1b468
# Parent  ff5172c830022b64cc5bd1bae36b2276e9dc6e5d
wireproto: add config knob for http header length limit

Well-behaved Mercurial clients will respect the httpheader capability by not
sending http headers longer than the given limit in bytes. The limit is
currently hard-coded at 1024 bytes, a safe value for any web server.

Since parsing headers is a notable factor in web server performance, tuning
header size can nontrivially improve performance for request-heavy operations
(eg. obsolete marker negotiation). Exposing the maximum header length limit
as a configuration setting is a simple way to enable such tuning.

diff -r ff5172c83002 -r e3909b550d63 mercurial/wireproto.py
--- a/mercurial/wireproto.py	Wed Jun 24 13:41:27 2015 -0500
+++ b/mercurial/wireproto.py	Mon Jun 29 12:35:31 2015 -0400
@@ -624,7 +624,8 @@
         capsblob = bundle2.encodecaps(bundle2.getrepocaps(repo))
         caps.append('bundle2=' + urllib.quote(capsblob))
     caps.append('unbundle=%s' % ','.join(changegroupmod.bundlepriority))
-    caps.append('httpheader=1024')
+    caps.append(
+        'httpheader=%d' % repo.ui.configint('server', 'maxhttpheaderlen', 1024))
     return caps
 # If you are writing an extension and consider wrapping this function. Wrap

More information about the Mercurial-devel mailing list