annotate tests/test-convert-clonebranches.t @ 39561:d06834e0f48e

wireprotov2peer: stream decoded responses Previously, wire protocol version 2 would buffer all response data. Only once all data was received did we CBOR decode it and resolve the future associated with the command. This was obviously not desirable. In future commits that introduce large response payloads, this caused significant memory bloat and slowed down client operations due to waiting on the server. This commit refactors the response handling code so that response data can be streamed. Command response objects now contain a buffered CBOR decoder. As new data arrives, it is fed into the decoder. Decoded objects are made available to the generator as they are decoded. Because there is a separate thread processing incoming frames and feeding data into the response object, there is the potential for race conditions when mutating response objects. So a lock has been added to guard access to critical state variables. Because the generator emitting decoded objects needs to wait on those objects to become available, we've added an Event for the generator to wait on so it doesn't busy loop. This does mean there is the potential for deadlocks. And I'm pretty sure they can occur in some scenarios. We already have a handful of TODOs around this. But I've added some more. Fixing this will likely require moving the background thread receiving frames into clienthandler. We likely would have done this anyway when implementing the client bits for the SSH transport. Test output changes because the initial CBOR map holding the overall response state is now always handled internally by the response object. Differential Revision: https://phab.mercurial-scm.org/D4474
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 29 Aug 2018 15:17:11 -0700
parents 794f7bb739be
children 5abc47d4ca6b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5934
e495f3f35b2d convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
1
23172
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 18373
diff changeset
2 $ cat <<EOF >> $HGRCPATH
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 18373
diff changeset
3 > [extensions]
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 18373
diff changeset
4 > convert =
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 18373
diff changeset
5 > [convert]
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 18373
diff changeset
6 > hg.tagsbranch = 0
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 18373
diff changeset
7 > EOF
12518
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
8 $ hg init source
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
9 $ cd source
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
10 $ echo a > a
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
11 $ hg ci -qAm adda
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
12
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
13 Add a merge with one parent in the same branch
5934
e495f3f35b2d convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
14
12518
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
15 $ echo a >> a
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
16 $ hg ci -qAm changea
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
17 $ hg up -qC 0
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
18 $ hg branch branch0
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
19 marked working directory as branch branch0
15615
41885892796e branch: warn on branching
Matt Mackall <mpm@selenic.com>
parents: 12518
diff changeset
20 (branches are permanent and global, did you want a bookmark?)
12518
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
21 $ echo b > b
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
22 $ hg ci -qAm addb
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
23 $ hg up -qC
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
24 $ hg merge default
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
25 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
26 (branch merge, don't forget to commit)
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
27 $ hg ci -qm mergeab
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
28 $ hg tag -ql mergeab
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
29 $ cd ..
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
30
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
31 Miss perl... sometimes
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
32
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
33 $ cat > filter.py <<EOF
33952
794f7bb739be tests: update test-convert-clonebranches to pass our import checker
Augie Fackler <raf@durin42.com>
parents: 32940
diff changeset
34 > from __future__ import absolute_import
794f7bb739be tests: update test-convert-clonebranches to pass our import checker
Augie Fackler <raf@durin42.com>
parents: 32940
diff changeset
35 > import re
794f7bb739be tests: update test-convert-clonebranches to pass our import checker
Augie Fackler <raf@durin42.com>
parents: 32940
diff changeset
36 > import sys
12518
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
37 >
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
38 > r = re.compile(r'^(?:\d+|pulling from)')
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
39 > sys.stdout.writelines([l for l in sys.stdin if r.search(l)])
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
40 > EOF
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
41
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
42 convert
5934
e495f3f35b2d convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
43
12518
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
44 $ hg convert -v --config convert.hg.clonebranches=1 source dest |
32940
75be14993fda cleanup: use $PYTHON to run python in many more tests
Augie Fackler <augie@google.com>
parents: 25295
diff changeset
45 > $PYTHON filter.py
12518
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
46 3 adda
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
47 2 changea
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
48 1 addb
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
49 pulling from default into branch0
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
50 1 changesets found
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
51 0 mergeab
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
52 pulling from default into branch0
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
53 1 changesets found
5934
e495f3f35b2d convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
54
12518
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
55 Add a merge with both parents and child in different branches
5934
e495f3f35b2d convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
56
12518
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
57 $ cd source
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
58 $ hg branch branch1
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
59 marked working directory as branch branch1
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
60 $ echo a > file1
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
61 $ hg ci -qAm c1
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
62 $ hg up -qC mergeab
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
63 $ hg branch branch2
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
64 marked working directory as branch branch2
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
65 $ echo a > file2
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
66 $ hg ci -qAm c2
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
67 $ hg merge branch1
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
68 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
69 (branch merge, don't forget to commit)
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
70 $ hg branch branch3
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
71 marked working directory as branch branch3
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
72 $ hg ci -qAm c3
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
73 $ cd ..
5934
e495f3f35b2d convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
74
12518
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
75 incremental conversion
5934
e495f3f35b2d convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
76
12518
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
77 $ hg convert -v --config convert.hg.clonebranches=1 source dest |
32940
75be14993fda cleanup: use $PYTHON to run python in many more tests
Augie Fackler <augie@google.com>
parents: 25295
diff changeset
78 > $PYTHON filter.py
12518
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
79 2 c1
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
80 pulling from branch0 into branch1
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
81 4 changesets found
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
82 1 c2
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
83 pulling from branch0 into branch2
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
84 4 changesets found
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
85 0 c3
18373
687ed69f6fdf convert: process missing branches in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents: 15615
diff changeset
86 pulling from branch1 into branch3
12518
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
87 5 changesets found
18373
687ed69f6fdf convert: process missing branches in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents: 15615
diff changeset
88 pulling from branch2 into branch3
12518
89f1210a1238 tests: unify test-convert-clonebranches
Matt Mackall <mpm@selenic.com>
parents: 10119
diff changeset
89 1 changesets found