annotate tests/test-extra-filelog-entry.t @ 37631:2f626233859b

wireproto: implement batching on peer executor interface This is a bit more complicated than non-batch requests because we need to buffer sends until the last request arrives *and* we need to support resolving futures as data arrives from the remote. In a classical concurrent.futures executor model, the future "starts" as soon as it is submitted. However, we have nothing to start until the last command is submitted. If we did nothing, calling result() would deadlock, since the future hasn't "started." So in the case where we queue the command, we return a special future type whose result() will trigger sendcommands(). This eliminates the deadlock potential. It also serves as a check against callers who may be calling result() prematurely, as it will prevent any subsequent callcommands() from working. This behavior is slightly annoying and a bit restrictive. But it's the world that half duplex connections forces on us. In order to support streaming responses, we were previously using a generator. But with a futures-based API, we're using futures and not generators. So in order to get streaming, we need a background thread to read data from the server. The approach taken in this patch is to leverage the ThreadPoolExecutor from concurrent.futures for managing a background thread. We create an executor and future that resolves when all response data is processed (or an error occurs). When exiting the context manager, we wait on that background reading before returning. I was hoping we could manually spin up a threading.Thread and this would be simple. But I ran into a few deadlocks when implementing. After looking at the source code to concurrent.futures, I figured it would just be easier to use a ThreadPoolExecutor than implement all the code needed to manually manage a thread. To prove this works, a use of the batch API in discovery has been updated. Differential Revision: https://phab.mercurial-scm.org/D3269
author Gregory Szorc <gregory.szorc@gmail.com>
date Fri, 13 Apr 2018 11:02:34 -0700
parents d4e62df1c73d
children ccd76e292be5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12399
4fee1fd3de9a tests: added a short description to issue numbers
Martin Geisler <mg@aragost.com>
parents: 12328
diff changeset
1 Issue351: mq: qrefresh can create extra revlog entry
4531
b51a8138292a Avoid extra filelogs entries.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
2
12305
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
3 $ echo "[extensions]" >> $HGRCPATH
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
4 $ echo "mq=" >> $HGRCPATH
4531
b51a8138292a Avoid extra filelogs entries.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
5
12305
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
6 $ hg init
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
7 $ hg qinit
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
8
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
9 $ echo b > b
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
10 $ hg ci -A -m foo
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
11 adding b
4531
b51a8138292a Avoid extra filelogs entries.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
12
12305
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
13 $ echo cc > b
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
14 $ hg qnew -f foo.diff
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
15 $ echo b > b
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
16 $ hg qrefresh
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
17
14182
ec5886db9dc6 tests: fix deprecated use of hg debugdata/debugindex
Sune Foldager <cryo@cyanite.org>
parents: 12399
diff changeset
18 $ hg debugindex b
37283
d4e62df1c73d debugcommands: drop offset and length from debugindex by default
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37282
diff changeset
19 rev linkrev nodeid p1 p2
d4e62df1c73d debugcommands: drop offset and length from debugindex by default
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37282
diff changeset
20 0 0 1e88685f5dde 000000000000 000000000000
12305
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
21