tests/test-server-view.t
author Pierre-Yves David <pierre-yves.david@octobus.net>
Mon, 20 May 2019 10:06:53 +0200
branchstable
changeset 42167 d2c871b78c36
parent 42106 bcf59ddc6173
child 42261 d345627d104b
permissions -rw-r--r--
bookmark: add a test for a race condition on push Bookmark pointing to unknown nodes are ignored. Later these ignored bookmarks are dropped when writing the file back on disk. On paper, this behavior should be fine, but with the current implementation, it can lead to unexpected bookmark deletions. In theory, to make sure writer as a consistent view, taking the lock also invalidate bookmark data we already loaded into memory. However this invalidation is incomplete. The data are stored in a `filecache` that preserve them if the bookmark related file are untouched. In practice, the bookmark data in memory also depends of the changelog content, because of the step checking if the bookmarks refers to a node known to the changelog. So if the bookmark data were loaded from an up to date bookmark file but filtered with an outdated changelog file this go undetected. This condition is fairly specific, but can occurs very often in practice. We introduce a test recreating the situation. The test comes in an independant changeset to show it actually reproduce the situation. The fix will come soon after. A large share of the initial investigation of this race condition was made by Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41845
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
     1
  $ hg init test
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
     2
  $ cd test
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
     3
  $ hg debugbuilddag '+2'
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
     4
  $ hg phase --public 0
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
     5
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
     6
  $ hg serve -p $HGPORT -d --pid-file=hg.pid -E errors.log
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
     7
  $ cat hg.pid >> $DAEMON_PIDS
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
     8
  $ cd ..
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
     9
  $ hg init test2
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    10
  $ cd test2
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    11
  $ hg incoming http://foo:xyzzy@localhost:$HGPORT/
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    12
  comparing with http://foo:***@localhost:$HGPORT/
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    13
  changeset:   0:1ea73414a91b
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    14
  user:        debugbuilddag
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    15
  date:        Thu Jan 01 00:00:00 1970 +0000
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    16
  summary:     r0
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    17
  
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    18
  changeset:   1:66f7d451a68b
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    19
  tag:         tip
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    20
  user:        debugbuilddag
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    21
  date:        Thu Jan 01 00:00:01 1970 +0000
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    22
  summary:     r1
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    23
  
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    24
  $ killdaemons.py
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    25
42106
bcf59ddc6173 test: minor cleanup to test-server-view.t
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41845
diff changeset
    26
  $ cd ..
bcf59ddc6173 test: minor cleanup to test-server-view.t
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41845
diff changeset
    27
  $ hg -R test --config server.view=immutable serve -p $HGPORT -d --pid-file=hg.pid -E errors.log
41845
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    28
  $ cat hg.pid >> $DAEMON_PIDS
42106
bcf59ddc6173 test: minor cleanup to test-server-view.t
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41845
diff changeset
    29
  $ hg -R test2 incoming http://foo:xyzzy@localhost:$HGPORT/
41845
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    30
  comparing with http://foo:***@localhost:$HGPORT/
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    31
  changeset:   0:1ea73414a91b
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    32
  tag:         tip
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    33
  user:        debugbuilddag
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    34
  date:        Thu Jan 01 00:00:00 1970 +0000
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    35
  summary:     r0
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    36
  
42106
bcf59ddc6173 test: minor cleanup to test-server-view.t
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41845
diff changeset
    37
  $ cat errors.log
41845
d6569f1e9b37 server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
    38
  $ killdaemons.py