annotate tests/test-merge6.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 d0abd7949ea3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
1 $ cat <<EOF > merge
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
2 > import sys, os
33721
24849d53697d tests: clean up many print statements to be print functions instead
Augie Fackler <augie@google.com>
parents: 33286
diff changeset
3 > print("merging for", os.path.basename(sys.argv[1]))
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
4 > EOF
33286
2428e8ec0793 tests: clean up even more direct `python` calls with $PYTHON
Augie Fackler <augie@google.com>
parents: 16913
diff changeset
5 $ HGMERGE="$PYTHON ../merge"; export HGMERGE
616
d45d1c90032e Fix zombie files in merge
maf46@burn.cl.cam.ac.uk
parents:
diff changeset
6
13956
ffb5c09ba822 tests: remove redundant mkdir
Martin Geisler <mg@lazybytes.net>
parents: 12156
diff changeset
7 $ hg init A1
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
8 $ cd A1
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
9 $ echo This is file foo1 > foo
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
10 $ echo This is file bar1 > bar
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
11 $ hg add foo bar
12156
4c94b6d0fb1c tests: remove unneeded -d flags
Martin Geisler <mg@lazybytes.net>
parents: 11979
diff changeset
12 $ hg commit -m "commit text"
616
d45d1c90032e Fix zombie files in merge
maf46@burn.cl.cam.ac.uk
parents:
diff changeset
13
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
14 $ cd ..
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
15 $ hg clone A1 B1
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
16 updating to branch default
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
17 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
616
d45d1c90032e Fix zombie files in merge
maf46@burn.cl.cam.ac.uk
parents:
diff changeset
18
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
19 $ cd A1
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
20 $ rm bar
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
21 $ hg remove bar
12156
4c94b6d0fb1c tests: remove unneeded -d flags
Martin Geisler <mg@lazybytes.net>
parents: 11979
diff changeset
22 $ hg commit -m "commit test"
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
23
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
24 $ cd ../B1
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
25 $ echo This is file foo22 > foo
12156
4c94b6d0fb1c tests: remove unneeded -d flags
Martin Geisler <mg@lazybytes.net>
parents: 11979
diff changeset
26 $ hg commit -m "commit test"
616
d45d1c90032e Fix zombie files in merge
maf46@burn.cl.cam.ac.uk
parents:
diff changeset
27
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
28 $ cd ..
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
29 $ hg clone A1 A2
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
30 updating to branch default
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
31 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
32 $ hg clone B1 B2
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
33 updating to branch default
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
34 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
616
d45d1c90032e Fix zombie files in merge
maf46@burn.cl.cam.ac.uk
parents:
diff changeset
35
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
36 $ cd A1
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
37 $ hg pull ../B1
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
38 pulling from ../B1
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
39 searching for changes
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
40 adding changesets
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
41 adding manifests
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
42 adding file changes
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
43 added 1 changesets with 1 changes to 1 files (+1 heads)
34661
eb586ed5d8ce transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33721
diff changeset
44 new changesets b90e70beeb58
38250
d0abd7949ea3 phases: use "published" in the phase movement message
Boris Feld <boris.feld@octobus.net>
parents: 38249
diff changeset
45 1 local changesets published
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
46 (run 'hg heads' to see heads, 'hg merge' to merge)
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
47 $ hg merge
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
48 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
49 (branch merge, don't forget to commit)
12156
4c94b6d0fb1c tests: remove unneeded -d flags
Martin Geisler <mg@lazybytes.net>
parents: 11979
diff changeset
50 $ hg commit -m "commit test"
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
51 bar should remain deleted.
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
52 $ hg manifest --debug
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
53 f9b0e817f6a48de3564c6b2957687c5e7297c5a0 644 foo
616
d45d1c90032e Fix zombie files in merge
maf46@burn.cl.cam.ac.uk
parents:
diff changeset
54
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
55 $ cd ../B2
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
56 $ hg pull ../A2
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
57 pulling from ../A2
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
58 searching for changes
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
59 adding changesets
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
60 adding manifests
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
61 adding file changes
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
62 added 1 changesets with 0 changes to 0 files (+1 heads)
34661
eb586ed5d8ce transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33721
diff changeset
63 new changesets e1adc944e717
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
64 (run 'hg heads' to see heads, 'hg merge' to merge)
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
65 $ hg merge
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
66 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
67 (branch merge, don't forget to commit)
12156
4c94b6d0fb1c tests: remove unneeded -d flags
Martin Geisler <mg@lazybytes.net>
parents: 11979
diff changeset
68 $ hg commit -m "commit test"
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
69 bar should remain deleted.
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
70 $ hg manifest --debug
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
71 f9b0e817f6a48de3564c6b2957687c5e7297c5a0 644 foo
16913
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 13956
diff changeset
72
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 13956
diff changeset
73 $ cd ..