tests/test-push-checkheads-superceed-A1.t
author Georges Racinet <georges.racinet@octobus.net>
Tue, 20 Jul 2021 17:20:19 +0200
changeset 47909 de2e04fe4897
parent 42899 34a46d48d24e
child 49203 5996640fc6fe
permissions -rw-r--r--
hgwebdir: avoid systematic full garbage collection Forcing a systematic full garbage collection upon each request can serioulsy harm performance. This is reported as https://bz.mercurial-scm.org/show_bug.cgi?id=6075 With this change we're performing the full collection according to a new setting, `experimental.web.full-garbage-collection-rate`. The default value is 1, which doesn't change the behavior and will allow us to test on real use cases. If the value is 0, no full garbage collection occurs. Regardless of the value of the setting, a partial garbage collection still occurs upon each request (not attempting to collect objects from the oldest generation). This should be enough to take care of reference cycles that have been created by the last request (assessment of this requires changing the setting, not to be 1). In my experience chasing memory leaks in Mercurial servers, the full collection never reclaimed any memory, but this is with Python 3 and biased towards small repositories. On the other hand, as explained in the Python developer docs [1], frequent full collections are very harmful in terms of performance if lots of objects survive the collection, and hence stay in the oldest generation. Note that `gc.collect()` is indeed trying to collect the oldest generation [2]. This happens usually in two cases: - unwanted lingering objects (i.e., an actual memory leak that the GC cannot do anything about). Sadly, we have lots of those these days. - desireable long-term objects, typically in caches (not inner caches carried by repositories, which should be collected with them). This is a subject of interest for the Heptapod project. In short, the flat rate that this change still permits is probably a bad idea in most cases, and the default value can be tweaked later on (or even be set to 0) according to experiments in the wild. The test is inspired from test-hgwebdir-paths.py [1] https://devguide.python.org/garbage_collector/#collecting-the-oldest-generation [2] https://docs.python.org/3/library/gc.html#gc.collect Differential Revision: https://phab.mercurial-scm.org/D11204
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31974
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     1
====================================
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     2
Testing head checking code: Case A-1
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     3
====================================
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     4
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     5
Mercurial checks for the introduction of new heads on push. Evolution comes
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     6
into play to detect if existing branches on the server are being replaced by
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     7
some of the new one we push.
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     8
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     9
This case is part of a series of tests checking this behavior.
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    10
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    11
Category A: simple case involving a branch being superceeded by another.
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    12
TestCase 1: single-changeset branch
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    13
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    14
.. old-state:
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    15
..
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    16
.. * 1 changeset branch
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    17
..
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    18
.. new-state:
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    19
..
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    20
.. * 1 changeset branch succeeding to A
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    21
..
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    22
.. expected-result:
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    23
..
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    24
.. * push allowed
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    25
..
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    26
.. graph-summary:
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    27
..
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    28
..   A ø⇠◔ A'
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    29
..     |/
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    30
..     ●
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    31
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    32
  $ . $TESTDIR/testlib/push-checkheads-util.sh
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    33
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    34
Test setup
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    35
----------
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    36
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    37
  $ mkdir A1
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    38
  $ cd A1
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    39
  $ setuprepos
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    40
  creating basic server and client repo
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    41
  updating to branch default
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    42
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    43
  $ cd client
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    44
  $ hg up 0
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    45
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    46
  $ mkcommit A1
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    47
  created new head
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    48
  $ hg debugobsolete `getid "desc(A0)" ` `getid "desc(A1)"`
42899
34a46d48d24e debugobsolete: also issue the "new obsmarkers" messsage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 35400
diff changeset
    49
  1 new obsolescence markers
33542
b11e8c67fb0f debugobsolete: also report the number of obsoleted changesets
Boris Feld <boris.feld@octobus.net>
parents: 33252
diff changeset
    50
  obsoleted 1 changesets
31974
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    51
  $ hg log -G --hidden
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    52
  @  f6082bc4ffef (draft): A1
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    53
  |
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    54
  | x  8aaa48160adc (draft): A0
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    55
  |/
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    56
  o  1e4be0697311 (public): root
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    57
  
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    58
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    59
Actual testing
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    60
--------------
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    61
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    62
  $ hg push
35400
4441705b7111 tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com>
parents: 33542
diff changeset
    63
  pushing to $TESTTMP/A1/server
31974
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    64
  searching for changes
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    65
  adding changesets
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    66
  adding manifests
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    67
  adding file changes
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    68
  added 1 changesets with 1 changes to 1 files (+1 heads)
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    69
  1 new obsolescence markers
33252
53b3a1968aa6 obsolete: reports the number of local changeset obsoleted when unbundling
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 31974
diff changeset
    70
  obsoleted 1 changesets
31974
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    71
e2848a1b0cc2 obsolescence: add test for the "branch replacement" logic during push, case A1
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    72
  $ cd ../..