Mercurial > hg
view tests/test-bookmarks-push-race.t @ 51977:42a116f1cdc1
branchmap-v3: introduce a "stop_rev" argument to `headsrevs`
The `headsrevs` method of the revlog already have a `revs` argument to compute
the headrevs of a limited set of heads. However, it disable the use of the
native compiled code to compute the heads, which slows down the branchmap v3
code a lot.
The branchmap v3 usage is actually quite constrained as we will always only
ignores a part at the top of the graph. So we could be significantly faster.
We start by making small change to the python side to improve the situation and
introduce the new API. More collaboration with the native code are coming later.
This massively speedup operation and close most of the remaining gaps between
branchmap-v3 and branchmap-v2. especially on repository with many revs like
mozilla-try. A small overhead remains mostly because the `headrevs` logic
currently has some inefficiently. We will look into them from there.
### benchmark.name = hg.command.unbundle
# bin-env-vars.hg.py-re2-module = default
# benchmark.variants.issue6528 = disabled
# benchmark.variants.resource-usage = default
# benchmark.variants.reuse-external-delta-parent = yes
# benchmark.variants.revs = any-1-extra-rev
# benchmark.variants.source = unbundle
# benchmark.variants.validate = default
# benchmark.variants.verbosity = quiet
## data-env-vars.name = netbeans-2018-08-01-zstd-sparse-revlog
# bin-env-vars.hg.flavor = default
branch-v2: 0.233711 ~~~~~
branch-v3 before: 0.368769 (+57.79%, +0.14)
branch-v3 after: 0.239857 (+2.63%, +0.01)
# bin-env-vars.hg.flavor = rust
branch-v2: 0.235230 ~~~~~
branch-v3 before: 0.372460 (+58.34%, +0.14)
branch-v3 after: 0.240972 (+2.44%, +0.01)
## data-env-vars.name = netbeans-2018-08-01-ds2-pnm
# bin-env-vars.hg.flavor = rust
branch-v2: 0.255586 ~~~~~
branch-v3 before: 0.318907 (+24.78%, +0.06)
branch-v3 after: 0.268560 (+5.08%, +0.01)
## data-env-vars.name = mozilla-central-2024-03-22-zstd-sparse-revlog
# bin-env-vars.hg.flavor = default
branch-v2: 0.339010 ~~~~~
branch-v3 before: 0.349752 (+3.17%, +0.01)
branch-v3 after: 0.349389 (+3.06%, +0.01)
# bin-env-vars.hg.flavor = rust
branch-v2: 0.346525 ~~~~~
branch-v3 before: 0.354300 (+2.24%, +0.01)
branch-v3 after: 0.355661 (+2.64%, +0.01)
## data-env-vars.name = mozilla-central-2024-03-22-ds2-pnm
# bin-env-vars.hg.flavor = rust
branch-v2: 0.380202 ~~~~~
branch-v3 before: 0.396293 (+4.23%, +0.02)
branch-v3 after: 0.408851 (+7.54%, +0.03)
## data-env-vars.name = mozilla-unified-2024-03-22-zstd-sparse-revlog
# bin-env-vars.hg.flavor = default
branch-v2: 0.412165 ~~~~~
branch-v3 before: 0.424769 (+3.06%, +0.01)
branch-v3 after: 0.427782 (+3.79%, +0.02)
# bin-env-vars.hg.flavor = rust
branch-v2: 0.412397 ~~~~~
branch-v3 before: 0.421796 (+2.28%, +0.01)
branch-v3 after: 0.422354 (+2.41%, +0.01)
## data-env-vars.name = mozilla-unified-2024-03-22-ds2-pnm
# bin-env-vars.hg.flavor = rust
branch-v2: 0.429501 ~~~~~
branch-v3 before: 0.443849 (+3.34%, +0.01)
branch-v3 after: 0.443197 (+3.19%, +0.01)
## data-env-vars.name = mozilla-try-2024-03-26-zstd-sparse-revlog
# bin-env-vars.hg.flavor = default
branch-v2: 3.403171 ~~~~~
branch-v3 before: 6.234055 (+83.18%, +2.83)
branch-v3 after: 3.819477 (+12.23%, +0.42)
# bin-env-vars.hg.flavor = rust
branch-v2: 3.454876 ~~~~~
branch-v3 before: 6.307813 (+82.58%, +2.85)
branch-v3 after: 3.590284 (+3.92%, +0.14)
## data-env-vars.name = mozilla-try-2024-03-26-ds2-pnm
# bin-env-vars.hg.flavor = rust
branch-v2: 3.465435 ~~~~~
branch-v3 before: 5.176076 (+49.36%, +1.71)
branch-v3 after: 3.633278 (+4.84%, +0.17)
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 03 Sep 2024 11:11:17 +0200 |
parents | 553eb132366f |
children |
line wrap: on
line source
============================================ Testing various race condition while pushing ============================================ $ cat << EOF >> $HGRCPATH > [command-templates] > log={rev}:{node|short} {desc|firstline} {bookmarks} > [ui] > timeout = 20 > [phases] > publish=False > EOF Initial Setup ============= $ hg init dst $ echo a > dst/a-file $ hg --cwd dst add a-file $ hg --cwd dst commit -m root $ hg --cwd dst bookmark my-book $ hg --cwd dst bookmarks * my-book 0:a64e49638499 $ hg --cwd dst log -G @ 0:a64e49638499 root my-book $ hg clone ssh://user@dummy/dst src requesting all changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files new changesets a64e49638499 (1 drafts) updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg --cwd src update my-book 0 files updated, 0 files merged, 0 files removed, 0 files unresolved (activating bookmark my-book) $ hg --cwd src log -G @ 0:a64e49638499 root my-book $ echo b > src/a-file $ hg --cwd src commit -m cA0_ $ hg --cwd src log -G @ 1:e89d3a6ed79b cA0_ my-book | o 0:a64e49638499 root Race condition while pushing a forward moving bookmarks ======================================================= This is currently slightly broken as we eventually don't push the bookmark. However at least we do not delete the remote one. $ echo c > src/a-file $ hg --cwd src push -B my-book --config hooks.prelock="hg commit -m cA1_" pushing to ssh://user@dummy/dst searching for changes remote: adding changesets remote: adding manifests remote: adding file changes remote: added 1 changesets with 1 changes to 1 files $ hg --cwd src log -G @ 2:08d837bbfe8d cA1_ my-book | o 1:e89d3a6ed79b cA0_ | o 0:a64e49638499 root $ hg --cwd dst log -G o 1:e89d3a6ed79b cA0_ | @ 0:a64e49638499 root my-book create a side-moving bookmark Race condition while pushing a side moving bookmarks ======================================================= resynchronize the repo and setup test ------------------------------------- $ hg --cwd src push -B my-book pushing to ssh://user@dummy/dst searching for changes remote: adding changesets remote: adding manifests remote: adding file changes remote: added 1 changesets with 1 changes to 1 files updating bookmark my-book $ hg --cwd dst log -G o 2:08d837bbfe8d cA1_ my-book | o 1:e89d3a6ed79b cA0_ | @ 0:a64e49638499 root $ hg --cwd src up 'desc("root")' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (leaving bookmark my-book) $ echo d > src/a-file $ hg --cwd src commit -m cB0_ created new head $ hg --cwd src bookmark --force my-book $ echo e > src/a-file $ hg --cwd src log -G @ 3:726401661fe5 cB0_ my-book | | o 2:08d837bbfe8d cA1_ | | | o 1:e89d3a6ed79b cA0_ |/ o 0:a64e49638499 root Push the bookmark while a commit is being made ---------------------------------------------- This is currently slightly broken as we eventually don't push the bookmark. However at least we do not delete the remote one. $ hg --cwd src push -f -r 'desc("cB0_")' -B my-book --config hooks.prelock="hg commit -m cB1_" pushing to ssh://user@dummy/dst searching for changes remote: adding changesets remote: adding manifests remote: adding file changes remote: added 1 changesets with 1 changes to 1 files (+1 heads) $ hg --cwd src log -G @ 4:a7f9cbf631a0 cB1_ my-book | o 3:726401661fe5 cB0_ | | o 2:08d837bbfe8d cA1_ | | | o 1:e89d3a6ed79b cA0_ |/ o 0:a64e49638499 root $ hg --cwd dst log -G o 3:726401661fe5 cB0_ | | o 2:08d837bbfe8d cA1_ my-book | | | o 1:e89d3a6ed79b cA0_ |/ @ 0:a64e49638499 root