annotate tests/test-websub.t @ 39638:d292328e0143

exchangev2: fetch manifest revisions Now that the server has support for retrieving manifest data, we can implement the client bits to call it. We teach the changeset fetching code to capture the manifest revisions that are encountered on incoming changesets. We then feed this into a new function which filters out known manifests and then batches up manifest data requests to the server. This is different from the previous wire protocol in a few notable ways. First, the client fetches manifest data separately and explicitly. Before, we'd ask the server for data pertaining to some changesets (via a "getbundle" command) and manifests (and files) would be sent automatically. Providing an API for looking up just manifest data separately gives clients much more flexibility for manifest management. For example, a client may choose to only fetch manifest data on demand instead of prefetching it (i.e. partial clone). Second, we send N commands to the server for manifest retrieval instead of 1. This property has a few nice side-effects. One is that the deterministic nature of the requests lends itself to server-side caching. For example, say the remote has 50,000 manifests. If the server is configured to cache responses, each time a new commit arrives, you will have a cache miss and need to regenerate all outgoing data. But if you makes N requests requesting 10,000 manifests each, a new commit will still yield cache hits on the initial, unchanged manifest batches/requests. A derived benefit from these properties is that resumable clone is conceptually simpler to implement. When making a monolithic request for all of the repository data, recovering from an interrupted clone is hard because the server was in the driver's seat and was maintaining state about all the data that needed transferred. With the client driving fetching, the client can persist the set of unfetched entities and retry/resume a fetch if something goes wrong. Or we can fetch all data N changesets at a time and slowly build up a repository. This approach is drastically easier to implement when we have server APIs exposing low-level repository primitives (such as manifests and files). We don't yet support tree manifests. But it should be possible to implement that with the existing wire protocol command. Differential Revision: https://phab.mercurial-scm.org/D4489
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 05 Sep 2018 09:09:57 -0700
parents 4d2b9b304ad0
children 6ccf539aec71
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22046
7a9cbb315d84 tests: replace exit 80 with #require
Matt Mackall <mpm@selenic.com>
parents: 18629
diff changeset
1 #require serve
15446
c5c9ca3719f9 tests: use 'hghave serve' to guard tests that requires serve daemon management
Mads Kiilerich <mads@kiilerich.com>
parents: 12126
diff changeset
2
12126
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
3 $ hg init test
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
4 $ cd test
10473
634b0e7561ec test-interhg: test the extension
Martin Geisler <mg@lazybytes.net>
parents:
diff changeset
5
12126
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
6 $ cat > .hg/hgrc <<EOF
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
7 > [extensions]
18629
013fcd112f13 extensions: obsolete and remove interhg extension
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 17017
diff changeset
8 > # this is only necessary to check that the mapping from
013fcd112f13 extensions: obsolete and remove interhg extension
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 17017
diff changeset
9 > # interhg to websub works
12126
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
10 > interhg =
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
11 >
18629
013fcd112f13 extensions: obsolete and remove interhg extension
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 17017
diff changeset
12 > [websub]
013fcd112f13 extensions: obsolete and remove interhg extension
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 17017
diff changeset
13 > issues = s|Issue(\d+)|<a href="http://bts.example.org/issue\1">Issue\1</a>|
013fcd112f13 extensions: obsolete and remove interhg extension
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 17017
diff changeset
14 >
12126
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
15 > [interhg]
18629
013fcd112f13 extensions: obsolete and remove interhg extension
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 17017
diff changeset
16 > # check that we maintain some interhg backwards compatibility...
12126
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
17 > # yes, 'x' is a weird delimiter...
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
18 > markbugs = sxbugx<i class="\x">bug</i>x
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
19 > EOF
10473
634b0e7561ec test-interhg: test the extension
Martin Geisler <mg@lazybytes.net>
parents:
diff changeset
20
12126
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
21 $ touch foo
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
22 $ hg add foo
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
23 $ hg commit -d '1 0' -m 'Issue123: fixed the bug!'
10473
634b0e7561ec test-interhg: test the extension
Martin Geisler <mg@lazybytes.net>
parents:
diff changeset
24
12126
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
25 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
26 $ cat hg.pid >> $DAEMON_PIDS
10473
634b0e7561ec test-interhg: test the extension
Martin Geisler <mg@lazybytes.net>
parents:
diff changeset
27
12126
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
28 log
10473
634b0e7561ec test-interhg: test the extension
Martin Geisler <mg@lazybytes.net>
parents:
diff changeset
29
25472
4d2b9b304ad0 tests: drop explicit $TESTDIR from executables
Matt Mackall <mpm@selenic.com>
parents: 22046
diff changeset
30 $ get-with-headers.py localhost:$HGPORT "rev/tip" | grep bts
18629
013fcd112f13 extensions: obsolete and remove interhg extension
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 17017
diff changeset
31 <div class="description"><a href="http://bts.example.org/issue123">Issue123</a>: fixed the <i class="x">bug</i>!</div>
12126
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
32 errors
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
33
779098953457 tests: unify test-interhg
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10473
diff changeset
34 $ cat errors.log
16913
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 15446
diff changeset
35
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 15446
diff changeset
36 $ cd ..