annotate tests/test-convert-authormap.t @ 30764:e75463e3179f

protocol: send application/mercurial-0.2 responses to capable clients With this commit, the HTTP transport now parses the X-HgProto-<N> header to determine what media type and compression engine to use for responses. So far, we only compress responses that are already being compressed with zlib today (stream response types to specific commands). We can expand things to cover additional response types later. The practical side-effect of this commit is that non-zlib compression engines will be used if both ends support them. This means if both ends have zstd support, zstd - not zlib - will be used to compress data! When cloning the mozilla-unified repository between a local HTTP server and client, the benefits of non-zlib compression are quite noticeable: engine server CPU (s) client CPU (s) bundle size zlib (l=6) 174.1 283.2 1,148,547,026 zstd (l=1) 99.2 267.3 1,127,513,841 zstd (l=3) 103.1 266.9 1,018,861,363 zstd (l=7) 128.3 269.7 919,190,278 zstd (l=10) 162.0 - 894,547,179 none 95.3 277.2 4,097,566,064 The default zstd compression level is 3. So if you deploy zstd capable Mercurial to your clients and servers and CPU time on your server is dominated by "getbundle" requests (clients cloning and pulling) - and my experience at Mozilla tells me this is often the case - this commit could drastically reduce your server-side CPU usage *and* save on bandwidth costs! Another benefit of this change is that server operators can install *any* compression engine. While it isn't enabled by default, the "none" compression engine can now be used to disable wire protocol compression completely. Previously, commands like "getbundle" always zlib compressed output, adding considerable overhead to generating responses. If you are on a high speed network and your server is under high load, it might be advantageous to trade bandwidth for CPU. Although, zstd at level 1 doesn't use that much CPU, so I'm not convinced that disabling compression wholesale is worthwhile. And, my data seems to indicate a slow down on the client without compression. I suspect this is due to a lack of buffering resulting in an increase in socket read() calls and/or the fact we're transferring an extra 3 GB of data (parsing HTTP chunked transfer and processing extra TCP packets can add up). This is definitely worth investigating and optimizing. But since the "none" compressor isn't enabled by default, I'm inclined to punt on this issue. This commit introduces tons of tests. Some of these should arguably have been implemented on previous commits. But it was difficult to test without the server functionality in place.
author Gregory Szorc <gregory.szorc@gmail.com>
date Sat, 24 Dec 2016 15:29:32 -0700
parents a0cbbf78c31a
children 4441705b7111
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7961
52e442fe43f4 convert: Add testcase for convert authormap.
Marti Raudsepp <marti@juffo.org>
parents:
diff changeset
1
12511
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
2 $ cat >> $HGRCPATH <<EOF
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
3 > [extensions]
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
4 > convert=
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
5 > EOF
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
6
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
7 Prepare orig repo
7961
52e442fe43f4 convert: Add testcase for convert authormap.
Marti Raudsepp <marti@juffo.org>
parents:
diff changeset
8
12511
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
9 $ hg init orig
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
10 $ cd orig
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
11 $ echo foo > foo
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
12 $ HGUSER='user name' hg ci -qAm 'foo'
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
13 $ cd ..
7961
52e442fe43f4 convert: Add testcase for convert authormap.
Marti Raudsepp <marti@juffo.org>
parents:
diff changeset
14
12511
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
15 Explicit --authors
7962
62154415821f convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents: 7961
diff changeset
16
12511
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
17 $ cat > authormap.txt <<EOF
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
18 > user name = Long User Name
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
19 >
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
20 > # comment
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
21 > this line is ignored
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
22 > EOF
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
23 $ hg convert --authors authormap.txt orig new
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
24 initializing destination new repository
16925
eaf6a6d7f015 convert: lowercase status and abort messages
Martin Geisler <mg@aragost.com>
parents: 15447
diff changeset
25 ignoring bad line in author map file authormap.txt: this line is ignored
12511
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
26 scanning source...
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
27 sorting...
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
28 converting...
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
29 0 foo
16948
a0cbbf78c31a tests: reintroduce globs in test-convert-authormap.t
Mads Kiilerich <mads@kiilerich.com>
parents: 16925
diff changeset
30 writing author map file $TESTTMP/new/.hg/authormap (glob)
12511
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
31 $ cat new/.hg/authormap
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
32 user name=Long User Name
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
33 $ hg -Rnew log
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
34 changeset: 0:d89716e88087
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
35 tag: tip
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
36 user: Long User Name
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
37 date: Thu Jan 01 00:00:00 1970 +0000
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
38 summary: foo
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
39
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
40 $ rm -rf new
7961
52e442fe43f4 convert: Add testcase for convert authormap.
Marti Raudsepp <marti@juffo.org>
parents:
diff changeset
41
12511
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
42 Implicit .hg/authormap
7961
52e442fe43f4 convert: Add testcase for convert authormap.
Marti Raudsepp <marti@juffo.org>
parents:
diff changeset
43
12511
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
44 $ hg init new
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
45 $ mv authormap.txt new/.hg/authormap
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
46 $ hg convert orig new
16948
a0cbbf78c31a tests: reintroduce globs in test-convert-authormap.t
Mads Kiilerich <mads@kiilerich.com>
parents: 16925
diff changeset
47 ignoring bad line in author map file $TESTTMP/new/.hg/authormap: this line is ignored (glob)
12511
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
48 scanning source...
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
49 sorting...
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
50 converting...
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
51 0 foo
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
52 $ hg -Rnew log
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
53 changeset: 0:d89716e88087
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
54 tag: tip
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
55 user: Long User Name
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
56 date: Thu Jan 01 00:00:00 1970 +0000
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
57 summary: foo
0fefeb4fff49 tests: unify test-convert-authormap
Matt Mackall <mpm@selenic.com>
parents: 8167
diff changeset
58