tests/test-transaction-rollback-on-revlog-split.t
author Pierre-Yves David <pierre-yves.david@octobus.net>
Fri, 17 Mar 2023 02:46:51 +0100
branchstable
changeset 50343 b0cdd0bea103
parent 50342 c185545a4c69
child 50344 6487737e0f00
permissions -rw-r--r--
revlog: test possible read race condition with splitting This is currently working fine, but could break with another approach (for example, with the one we are about to use in the next changesets…) So we make sure the case is covered.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
47284
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
     1
Test correctness of revlog inline -> non-inline transition
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
     2
----------------------------------------------------------
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
     3
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
     4
Helper extension to intercept renames and kill process
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
     5
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
     6
  $ cat > $TESTTMP/intercept_before_rename.py << EOF
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
     7
  > import os
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
     8
  > import signal
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
     9
  > from mercurial import extensions, util
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
    10
  > 
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
    11
  > def extsetup(ui):
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
    12
  >     def close(orig, *args, **kwargs):
47561
8e9295912573 compat: normalise path before comparison in revlog splitting test
Raphaël Gomès <rgomes@octobus.net>
parents: 47314
diff changeset
    13
  >         path = util.normpath(args[0]._atomictempfile__name)
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
    14
  >         if path.endswith(b'/.hg/store/data/file.i'):
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    15
  >             os.kill(os.getpid(), signal.SIGKILL)
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
    16
  >         return orig(*args, **kwargs)
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
    17
  >     extensions.wrapfunction(util.atomictempfile, 'close', close)
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
    18
  > EOF
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
    19
50342
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
    20
  $ cat > $TESTTMP/intercept_after_rename.py << EOF
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
    21
  > import os
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
    22
  > import signal
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
    23
  > from mercurial import extensions, util
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
    24
  > 
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
    25
  > def extsetup(ui):
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
    26
  >     def close(orig, *args, **kwargs):
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
    27
  >         path = util.normpath(args[0]._atomictempfile__name)
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
    28
  >         r = orig(*args, **kwargs)
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
    29
  >         if path.endswith(b'/.hg/store/data/file.i'):
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
    30
  >             os.kill(os.getpid(), signal.SIGKILL)
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
    31
  >         return r
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
    32
  >     extensions.wrapfunction(util.atomictempfile, 'close', close)
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
    33
  > EOF
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
    34
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    35
  $ cat > $TESTTMP/killme.py << EOF
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    36
  > import os
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    37
  > import signal
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    38
  > 
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    39
  > def killme(ui, repo, hooktype, **kwargs):
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    40
  >     os.kill(os.getpid(), signal.SIGKILL)
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    41
  > EOF
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    42
50343
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
    43
  $ cat > $TESTTMP/reader_wait_split.py << EOF
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
    44
  > import os
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
    45
  > import signal
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
    46
  > from mercurial import extensions, revlog, testing
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
    47
  > def _wait_post_load(orig, self, *args, **kwargs):
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
    48
  >     wait = b'data/file' in self.radix
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
    49
  >     if wait:
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
    50
  >         testing.wait_file(b"$TESTTMP/writer-revlog-split")
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
    51
  >     r = orig(self, *args, **kwargs)
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
    52
  >     if wait:
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
    53
  >         testing.write_file(b"$TESTTMP/reader-index-read")
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
    54
  >         testing.wait_file(b"$TESTTMP/writer-revlog-unsplit")
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
    55
  >     return r
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
    56
  > 
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
    57
  > def extsetup(ui):
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
    58
  >     extensions.wrapfunction(revlog.revlog, '_loadindex', _wait_post_load)
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
    59
  > EOF
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
    60
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    61
setup a repository for tests
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    62
----------------------------
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    63
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    64
  $ cat >> $HGRCPATH << EOF
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    65
  > [format]
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    66
  > revlog-compression=none
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    67
  > EOF
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    68
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    69
  $ hg init troffset-computation
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    70
  $ cd troffset-computation
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    71
  $ printf '%20d' '1' > file
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    72
  $ hg commit -Aqma
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    73
  $ printf '%1024d' '1' > file
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    74
  $ hg commit -Aqmb
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    75
  $ printf '%20d' '1' > file
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    76
  $ hg commit -Aqmc
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    77
  $ dd if=/dev/zero of=file bs=1k count=128 > /dev/null 2>&1
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    78
  $ hg commit -AqmD
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    79
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    80
Reference size:
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    81
  $ f -s file
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    82
  file: size=131072
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    83
  $ f -s .hg/store/data/file*
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    84
  .hg/store/data/file.d: size=132139
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    85
  .hg/store/data/file.i: size=256
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    86
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    87
  $ cd ..
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    88
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    89
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    90
Test a hard crash after the file was split but before the transaction was committed
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    91
===================================================================================
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
    92
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
    93
Test offset computation to correctly factor in the index entries themselves.
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
    94
Also test that the new data size has the correct size if the transaction is aborted
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
    95
after the index has been replaced.
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
    96
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
    97
Test repo has commits a, b, c, D, where D is large (grows the revlog enough that it
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
    98
transitions to non-inline storage). The clone initially has changes a, b
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
    99
and will transition to non-inline storage when adding c, D.
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
   100
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
   101
If the transaction adding c, D is rolled back, then we don't undo the revlog split,
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
   102
but truncate the index and the data to remove both c and D.
47284
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
   103
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
   104
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   105
  $ hg clone --quiet --rev 1 troffset-computation troffset-computation-copy
47284
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
   106
  $ cd troffset-computation-copy
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   107
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   108
Reference size:
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   109
  $ f -s file
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   110
  file: size=1024
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   111
  $ f -s .hg/store/data/file*
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   112
  .hg/store/data/file.i: size=1174
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   113
47284
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
   114
  $ cat > .hg/hgrc <<EOF
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
   115
  > [hooks]
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   116
  > pretxnchangegroup = python:$TESTTMP/killme.py:killme
47284
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
   117
  > EOF
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
   118
#if chg
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
   119
  $ hg pull ../troffset-computation
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
   120
  pulling from ../troffset-computation
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
   121
  [255]
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
   122
#else
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
   123
  $ hg pull ../troffset-computation
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
   124
  pulling from ../troffset-computation
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   125
  Killed
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   126
  [137]
47284
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
   127
#endif
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   128
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   129
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   130
The revlog have been split on disk
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   131
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   132
  $ f -s .hg/store/data/file*
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   133
  .hg/store/data/file.d: size=132139
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   134
  .hg/store/data/file.i: size=256
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   135
47284
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
   136
  $ cat .hg/store/journal | tr -s '\000' ' ' | grep data/file | tail -1
48571
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
   137
  data/file.i 128
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   138
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
   139
The first file.i entry should match the "Reference size" above.
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   140
The first file.d entry is the temporary record during the split,
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   141
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   142
The second entry after the split happened. The sum of the second file.d
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   143
and the second file.i entry should match the first file.i entry.
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   144
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   145
  $ cat .hg/store/journal | tr -s '\000' ' ' | grep data/file
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   146
  data/file.i 1174
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   147
  data/file.d 0
48571
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
   148
  data/file.d 1046
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
   149
  data/file.i 128
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   150
  $ hg recover
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   151
  rolling back interrupted transaction
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   152
  (verify step skipped, run `hg verify` to check your repository content)
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   153
  $ f -s .hg/store/data/file*
48571
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
   154
  .hg/store/data/file.d: size=1046
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
   155
  .hg/store/data/file.i: size=128
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   156
  $ hg tip
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
   157
  changeset:   1:cfa8d6e60429
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   158
  tag:         tip
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   159
  user:        test
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   160
  date:        Thu Jan 01 00:00:00 1970 +0000
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
   161
  summary:     b
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   162
  
47874
308e843f24b1 test: reduce noise, so the important bits stand out
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47561
diff changeset
   163
  $ hg verify -q
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   164
   warning: revlog 'data/file.d' not in fncache!
48571
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
   165
  1 warnings encountered!
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   166
  hint: run "hg debugrebuildfncache" to recover from corrupt fncache
47875
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47874
diff changeset
   167
  $ hg debugrebuildfncache --only-data
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47874
diff changeset
   168
  adding data/file.d
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47874
diff changeset
   169
  1 items added, 0 removed from fncache
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47874
diff changeset
   170
  $ hg verify -q
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   171
  $ cd ..
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   172
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   173
Test a hard crash right before the index is move into place
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   174
===========================================================
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   175
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   176
Now retry the procedure but intercept the rename of the index and check that
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   177
the journal does not contain the new index size. This demonstrates the edge case
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   178
where the data file is left as garbage.
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   179
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   180
  $ hg clone --quiet --rev 1 troffset-computation troffset-computation-copy2
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   181
  $ cd troffset-computation-copy2
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   182
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   183
Reference size:
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   184
  $ f -s file
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   185
  file: size=1024
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   186
  $ f -s .hg/store/data/file*
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   187
  .hg/store/data/file.i: size=1174
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   188
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   189
  $ cat > .hg/hgrc <<EOF
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   190
  > [extensions]
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   191
  > intercept_rename = $TESTTMP/intercept_before_rename.py
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   192
  > [hooks]
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   193
  > pretxnchangegroup = python:$TESTTMP/killme.py:killme
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   194
  > EOF
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   195
#if chg
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   196
  $ hg pull ../troffset-computation
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   197
  pulling from ../troffset-computation
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   198
  [255]
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   199
#else
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   200
  $ hg pull ../troffset-computation
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   201
  pulling from ../troffset-computation
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   202
  Killed
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   203
  [137]
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   204
#endif
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   205
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   206
The data file is created, but the revlog is still inline
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   207
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   208
  $ f -s .hg/store/data/file*
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   209
  .hg/store/data/file.d: size=132139
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   210
  .hg/store/data/file.i: size=132395
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   211
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   212
  $ cat .hg/store/journal | tr -s '\000' ' ' | grep data/file
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   213
  data/file.i 1174
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   214
  data/file.d 0
48571
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
   215
  data/file.d 1046
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   216
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   217
  $ hg recover
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   218
  rolling back interrupted transaction
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   219
  (verify step skipped, run `hg verify` to check your repository content)
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   220
  $ f -s .hg/store/data/file*
48571
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
   221
  .hg/store/data/file.d: size=1046
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   222
  .hg/store/data/file.i: size=1174
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   223
  $ hg tip
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
   224
  changeset:   1:cfa8d6e60429
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   225
  tag:         tip
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   226
  user:        test
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   227
  date:        Thu Jan 01 00:00:00 1970 +0000
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
   228
  summary:     b
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   229
  
47874
308e843f24b1 test: reduce noise, so the important bits stand out
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47561
diff changeset
   230
  $ hg verify -q
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
   231
  $ cd ..
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   232
50342
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   233
Test a hard crash right after the index is move into place
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   234
===========================================================
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   235
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   236
Now retry the procedure but intercept the rename of the index.
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   237
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   238
Things get corrupted /o\
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   239
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   240
  $ hg clone --quiet --rev 1 troffset-computation troffset-computation-crash-after-rename
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   241
  $ cd troffset-computation-crash-after-rename
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   242
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   243
Reference size:
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   244
  $ f -s file
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   245
  file: size=1024
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   246
  $ f -s .hg/store/data/file*
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   247
  .hg/store/data/file.i: size=1174
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   248
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   249
  $ cat > .hg/hgrc <<EOF
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   250
  > [extensions]
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   251
  > intercept_rename = $TESTTMP/intercept_after_rename.py
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   252
  > [hooks]
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   253
  > pretxnchangegroup = python:$TESTTMP/killme.py:killme
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   254
  > EOF
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   255
#if chg
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   256
  $ hg pull ../troffset-computation
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   257
  pulling from ../troffset-computation
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   258
  [255]
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   259
#else
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   260
  $ hg pull ../troffset-computation
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   261
  pulling from ../troffset-computation
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   262
  Killed
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   263
  [137]
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   264
#endif
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   265
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   266
the revlog has been split on disk
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   267
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   268
  $ f -s .hg/store/data/file*
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   269
  .hg/store/data/file.d: size=132139
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   270
  .hg/store/data/file.i: size=256
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   271
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   272
  $ cat .hg/store/journal | tr -s '\000' ' ' | grep data/file
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   273
  data/file.i 1174
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   274
  data/file.d 0
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   275
  data/file.d 1046
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   276
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   277
  $ hg recover
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   278
  rolling back interrupted transaction
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   279
  abort: attempted to truncate data/file.i to 1174 bytes, but it was already 256 bytes
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   280
  
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   281
  [255]
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   282
  $ f -s .hg/store/data/file*
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   283
  .hg/store/data/file.d: size=1046
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   284
  .hg/store/data/file.i: size=256
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   285
  $ hg tip
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   286
  changeset:   1:cfa8d6e60429
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   287
  tag:         tip
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   288
  user:        test
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   289
  date:        Thu Jan 01 00:00:00 1970 +0000
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   290
  summary:     b
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   291
  
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   292
  $ hg verify -q
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   293
  abandoned transaction found - run hg recover
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   294
   warning: revlog 'data/file.d' not in fncache!
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   295
   file@0: data length off by -131093 bytes
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   296
   file@2: unpacking fa1120531cc1: partial read of revlog data/file.d; expected 21 bytes from offset 1046, got 0
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   297
   file@3: unpacking a631378adaa3: partial read of revlog data/file.d; expected 131072 bytes from offset 1067, got -21
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   298
   file@?: rev 2 points to nonexistent changeset 2
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   299
   (expected )
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   300
   file@?: fa1120531cc1 not in manifests
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   301
   file@?: rev 3 points to nonexistent changeset 3
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   302
   (expected )
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   303
   file@?: a631378adaa3 not in manifests
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   304
  not checking dirstate because of previous errors
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   305
  3 warnings encountered!
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   306
  hint: run "hg debugrebuildfncache" to recover from corrupt fncache
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   307
  7 integrity errors encountered!
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   308
  (first damaged changeset appears to be 0)
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   309
  [1]
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   310
  $ cd ..
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50341
diff changeset
   311
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   312
Have the transaction rollback itself without any hard crash
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   313
===========================================================
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   314
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   315
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   316
Repeat the original test but let hg rollback the transaction.
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   317
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   318
  $ hg clone --quiet --rev 1 troffset-computation troffset-computation-copy-rb
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   319
  $ cd troffset-computation-copy-rb
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   320
  $ cat > .hg/hgrc <<EOF
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   321
  > [hooks]
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   322
  > pretxnchangegroup = false
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   323
  > EOF
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   324
  $ hg pull ../troffset-computation
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   325
  pulling from ../troffset-computation
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   326
  searching for changes
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   327
  adding changesets
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   328
  adding manifests
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   329
  adding file changes
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   330
  transaction abort!
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   331
  rollback completed
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   332
  abort: pretxnchangegroup hook exited with status 1
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   333
  [40]
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   334
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   335
File are still split on disk, with the expected size.
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   336
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   337
  $ f -s .hg/store/data/file*
48571
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
   338
  .hg/store/data/file.d: size=1046
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
   339
  .hg/store/data/file.i: size=128
50341
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
   340
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   341
  $ hg tip
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
   342
  changeset:   1:cfa8d6e60429
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   343
  tag:         tip
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   344
  user:        test
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   345
  date:        Thu Jan 01 00:00:00 1970 +0000
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
   346
  summary:     b
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   347
  
47874
308e843f24b1 test: reduce noise, so the important bits stand out
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47561
diff changeset
   348
  $ hg verify -q
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   349
   warning: revlog 'data/file.d' not in fncache!
48571
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
   350
  1 warnings encountered!
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   351
  hint: run "hg debugrebuildfncache" to recover from corrupt fncache
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   352
  $ cd ..
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
   353
50343
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   354
Read race
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   355
=========
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   356
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   357
We check that a client that started reading a revlog (its index) after the
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   358
split and end reading (the data) after the rollback should be fine
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   359
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   360
  $ hg clone --quiet --rev 1 troffset-computation troffset-computation-race
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   361
  $ cd troffset-computation-race
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   362
  $ cat > .hg/hgrc <<EOF
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   363
  > [hooks]
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   364
  > pretxnchangegroup=$RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/reader-index-read $TESTTMP/writer-revlog-split
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   365
  > pretxnclose = false
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   366
  > EOF
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   367
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   368
start a reader
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   369
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   370
  $ hg cat --rev 0 file \
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   371
  > --config "extensions.wait_read=$TESTTMP/reader_wait_split.py" \
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   372
  > 2> $TESTTMP/reader.stderr \
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   373
  > > $TESTTMP/reader.stdout &
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   374
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   375
Do a failed pull in //
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   376
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   377
  $ hg pull ../troffset-computation
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   378
  pulling from ../troffset-computation
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   379
  searching for changes
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   380
  adding changesets
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   381
  adding manifests
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   382
  adding file changes
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   383
  transaction abort!
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   384
  rollback completed
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   385
  abort: pretxnclose hook exited with status 1
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   386
  [40]
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   387
  $ touch $TESTTMP/writer-revlog-unsplit
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   388
  $ wait
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   389
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   390
The reader should be fine
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   391
  $ cat $TESTTMP/reader.stderr
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   392
  $ cat $TESTTMP/reader.stdout
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   393
                     1 (no-eol)
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50342
diff changeset
   394
  $ cd ..