##// END OF EJS Templates
test-transaction-safety: glog out irrelevant flag...
test-transaction-safety: glog out irrelevant flag The test is focussing on the inline flag, so we glob out the other to highlight that fact and prevent noise in the future.

File last commit:

r52073:2e0b2a38 default
r52073:2e0b2a38 default
Show More
test-transaction-safety.t
287 lines | 6.3 KiB | text/troff | Tads3Lexer
/ tests / test-transaction-safety.t
revlog: add a new test file focussed on testing transactionally issue...
r48010 Test transaction safety
=======================
changelogv2: introduce a "changelogv2" feature...
r48037 #testcases revlogv1 revlogv2 changelogv2
revlogv2: also test transactionality of revlog v2...
r48011
#if revlogv1
$ cat << EOF >> $HGRCPATH
> [experimental]
> revlogv2=no
> EOF
#endif
#if revlogv2
$ cat << EOF >> $HGRCPATH
> [experimental]
> revlogv2=enable-unstable-format-and-corrupt-my-data
> EOF
#endif
changelogv2: introduce a "changelogv2" feature...
r48037 #if changelogv2
$ cat << EOF >> $HGRCPATH
> [format]
> exp-use-changelog-v2=enable-unstable-format-and-corrupt-my-data
> EOF
#endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 This test basic case to make sure external process do not see transaction
content until it is committed.
# TODO: also add an external reader accessing revlog files while they are written
# (instead of during transaction finalisation)
# TODO: also add stream clone and hardlink clone happening during these transaction.
setup
-----
test-transaction-safety: document the test schedule...
r48585 synchronisation+output script using the following schedule:
[A1] "external" is started
[A2] "external" waits on EXT_UNLOCK
[A2] "external" + creates EXT_WAITING unlocks [C1]
[B1] "hg commit/pull" is started
[B2] "hg commit/pull" is ready to be committed
[B3] "hg commit/pull" spawn "internal" using a pretxnclose hook (need [C4])
[C1] "internal" waits on EXT_WAITING (need [A2])
test-transaction-safety: relax some of the synchronisation schedule...
r48586 [C2] "internal" creates EXT_UNLOCK unlocks [A2]
[C3] "internal" show the tipmost revision (inside of the transaction)
[C4] "internal" waits on EXT_DONE (need [A4])
test-transaction-safety: document the test schedule...
r48585 [A3] "external" show the tipmost revision (outside of the transaction)
test-transaction-safety: relax some of the synchronisation schedule...
r48586 [A4] "external" creates EXT_DONE unlocks [C4]
[C5] "internal" end of execution -> unlock [B3]
test-transaction-safety: document the test schedule...
r48585 [B4] "hg commit/pull" transaction is committed on disk
revlog: add a new test file focussed on testing transactionally issue...
r48010
$ mkdir sync
$ mkdir output
$ mkdir script
$ HG_TEST_FILE_EXT_WAITING=$TESTTMP/sync/ext_waiting
$ export HG_TEST_FILE_EXT_WAITING
$ HG_TEST_FILE_EXT_UNLOCK=$TESTTMP/sync/ext_unlock
$ export HG_TEST_FILE_EXT_UNLOCK
$ HG_TEST_FILE_EXT_DONE=$TESTTMP/sync/ext_done
$ export HG_TEST_FILE_EXT_DONE
$ cat << EOF > script/external.sh
> #!/bin/sh
Matt Harbison
tests: fix test-transaction-safety.t on Windows...
r48094 > "$RUNTESTDIR/testlib/wait-on-file" 5 "$HG_TEST_FILE_EXT_UNLOCK" "$HG_TEST_FILE_EXT_WAITING"
> hg log --rev 'tip' -T 'external: {rev} {desc}\n' > "$TESTTMP/output/external.out"
> touch "$HG_TEST_FILE_EXT_DONE"
revlog: add a new test file focussed on testing transactionally issue...
r48010 > EOF
$ cat << EOF > script/internal.sh
> #!/bin/sh
test-transaction-safety: document the test schedule...
r48585 > "$RUNTESTDIR/testlib/wait-on-file" 5 "$HG_TEST_FILE_EXT_WAITING"
test-transaction-safety: relax some of the synchronisation schedule...
r48586 > touch "$HG_TEST_FILE_EXT_UNLOCK"
Matt Harbison
tests: fix test-transaction-safety.t on Windows...
r48094 > hg log --rev 'tip' -T 'internal: {rev} {desc}\n' > "$TESTTMP/output/internal.out"
test-transaction-safety: relax some of the synchronisation schedule...
r48586 > "$RUNTESTDIR/testlib/wait-on-file" 5 "$HG_TEST_FILE_EXT_DONE"
revlog: add a new test file focussed on testing transactionally issue...
r48010 > EOF
Automated commands:
$ make_one_commit() {
> rm -f $TESTTMP/sync/*
> rm -f $TESTTMP/output/*
> hg log --rev 'tip' -T 'pre-commit: {rev} {desc}\n'
test-transaction-safety: perform the test on a filelog...
r52072 > echo x >> of
Matt Harbison
tests: fix test-transaction-safety.t on Windows...
r48094 > sh $TESTTMP/script/external.sh & hg commit -m "$1"
revlog: add a new test file focussed on testing transactionally issue...
r48010 > cat $TESTTMP/output/external.out
> cat $TESTTMP/output/internal.out
> hg log --rev 'tip' -T 'post-tr: {rev} {desc}\n'
> }
$ make_one_pull() {
> rm -f $TESTTMP/sync/*
> rm -f $TESTTMP/output/*
> hg log --rev 'tip' -T 'pre-commit: {rev} {desc}\n'
test-transaction-safety: perform the test on a filelog...
r52072 > echo x >> of
Matt Harbison
tests: fix test-transaction-safety.t on Windows...
r48094 > sh $TESTTMP/script/external.sh & hg pull ../other-repo/ --rev "$1" --force --quiet
revlog: add a new test file focussed on testing transactionally issue...
r48010 > cat $TESTTMP/output/external.out
> cat $TESTTMP/output/internal.out
> hg log --rev 'tip' -T 'post-tr: {rev} {desc}\n'
> }
prepare a large source to which to pull from:
The source is large to unsure we don't use inline more after the pull
$ hg init other-repo
test-transaction-safety: perform the test on a filelog...
r52072 $ hg -R other-repo debugbuilddag .+500 --overwritten-file
revlog: add a new test file focussed on testing transactionally issue...
r48010
prepare an empty repository where to make test:
$ hg init repo
$ cd repo
test-transaction-safety: perform the test on a filelog...
r52072 $ touch of
$ hg add of
revlog: add a new test file focussed on testing transactionally issue...
r48010
prepare a small extension to controll inline size
$ mkdir $TESTTMP/ext
$ cat << EOF > $TESTTMP/ext/small_inline.py
> from mercurial import revlog
test-transaction-safety: perform the test on a filelog...
r52072 > revlog._maxinline = 3 * 100
revlog: add a new test file focussed on testing transactionally issue...
r48010 > EOF
$ cat << EOF >> $HGRCPATH
> [extensions]
> small_inline=$TESTTMP/ext/small_inline.py
> [hooks]
Matt Harbison
tests: fix test-transaction-safety.t on Windows...
r48094 > pretxnclose = sh $TESTTMP/script/internal.sh
revlog: add a new test file focussed on testing transactionally issue...
r48010 > EOF
check this is true for the initial commit (inline → inline)
-----------------------------------------------------------
the repository should still be inline (for relevant format)
$ make_one_commit first
pre-commit: -1
revlogv2: delay the update of the changelog docket to transaction end...
r48013 external: -1
revlogv2: track pending write in the docket and expose it to hooks...
r48015 internal: 0 first
revlog: add a new test file focussed on testing transactionally issue...
r48010 post-tr: 0 first
revlogv2: also test transactionality of revlog v2...
r48011
#if revlogv1
test-transaction-safety: perform the test on a filelog...
r52072 $ hg debugrevlog of | grep inline
test-transaction-safety: glog out irrelevant flag...
r52073 flags : inline, * (glob)
revlog: add a new test file focussed on testing transactionally issue...
r48010
revlogv2: also test transactionality of revlog v2...
r48011 #endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 check this is true for extra commit (inline → inline)
-----------------------------------------------------
the repository should still be inline (for relevant format)
revlogv2: also test transactionality of revlog v2...
r48011 #if revlogv1
test-transaction-safety: perform the test on a filelog...
r52072 $ hg debugrevlog of | grep inline
test-transaction-safety: glog out irrelevant flag...
r52073 flags : inline, * (glob)
revlogv2: also test transactionality of revlog v2...
r48011
#endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ make_one_commit second
pre-commit: 0 first
revlogv2: delay the update of the changelog docket to transaction end...
r48013 external: 0 first
revlogv2: track pending write in the docket and expose it to hooks...
r48015 internal: 1 second
revlog: add a new test file focussed on testing transactionally issue...
r48010 post-tr: 1 second
revlogv2: also test transactionality of revlog v2...
r48011
#if revlogv1
test-transaction-safety: perform the test on a filelog...
r52072 $ hg debugrevlog of | grep inline
test-transaction-safety: glog out irrelevant flag...
r52073 flags : inline, * (glob)
revlog: add a new test file focussed on testing transactionally issue...
r48010
revlogv2: also test transactionality of revlog v2...
r48011 #endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 check this is true for a small pull (inline → inline)
-----------------------------------------------------
the repository should still be inline (for relevant format)
revlogv2: also test transactionality of revlog v2...
r48011 #if revlogv1
test-transaction-safety: perform the test on a filelog...
r52072 $ hg debugrevlog of | grep inline
test-transaction-safety: glog out irrelevant flag...
r52073 flags : inline, * (glob)
revlogv2: also test transactionality of revlog v2...
r48011
#endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ make_one_pull 3
pre-commit: 1 second
warning: repository is unrelated
revlogv2: delay the update of the changelog docket to transaction end...
r48013 external: 1 second
revlogv2: track pending write in the docket and expose it to hooks...
r48015 internal: 5 r3
revlog: add a new test file focussed on testing transactionally issue...
r48010 post-tr: 5 r3
revlogv2: also test transactionality of revlog v2...
r48011
#if revlogv1
test-transaction-safety: perform the test on a filelog...
r52072 $ hg debugrevlog of | grep inline
test-transaction-safety: glog out irrelevant flag...
r52073 flags : inline, * (glob)
revlog: add a new test file focussed on testing transactionally issue...
r48010
revlogv2: also test transactionality of revlog v2...
r48011 #endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 Make a large pull (inline → no-inline)
---------------------------------------
the repository should no longer be inline (for relevant format)
revlogv2: also test transactionality of revlog v2...
r48011 #if revlogv1
test-transaction-safety: perform the test on a filelog...
r52072 $ hg debugrevlog of | grep inline
test-transaction-safety: glog out irrelevant flag...
r52073 flags : inline, * (glob)
revlogv2: also test transactionality of revlog v2...
r48011
#endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ make_one_pull 400
pre-commit: 5 r3
revlogv2: delay the update of the changelog docket to transaction end...
r48013 external: 5 r3
revlogv2: track pending write in the docket and expose it to hooks...
r48015 internal: 402 r400
revlog: add a new test file focussed on testing transactionally issue...
r48010 post-tr: 402 r400
revlogv2: also test transactionality of revlog v2...
r48011
#if revlogv1
test-transaction-safety: perform the test on a filelog...
r52072 $ hg debugrevlog of | grep inline
revlog: add a new test file focussed on testing transactionally issue...
r48010 [1]
revlogv2: also test transactionality of revlog v2...
r48011 #endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 check this is true for extra commit (no-inline → no-inline)
-----------------------------------------------------------
the repository should no longer be inline (for relevant format)
revlogv2: also test transactionality of revlog v2...
r48011
#if revlogv1
test-transaction-safety: perform the test on a filelog...
r52072 $ hg debugrevlog of | grep inline
revlog: add a new test file focussed on testing transactionally issue...
r48010 [1]
revlogv2: also test transactionality of revlog v2...
r48011
#endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ make_one_commit third
pre-commit: 402 r400
revlogv2: delay the update of the changelog docket to transaction end...
r48013 external: 402 r400
revlogv2: track pending write in the docket and expose it to hooks...
r48015 internal: 403 third
revlog: add a new test file focussed on testing transactionally issue...
r48010 post-tr: 403 third
revlogv2: also test transactionality of revlog v2...
r48011
#if revlogv1
test-transaction-safety: perform the test on a filelog...
r52072 $ hg debugrevlog of | grep inline
revlog: add a new test file focussed on testing transactionally issue...
r48010 [1]
revlogv2: also test transactionality of revlog v2...
r48011 #endif
revlog: add a new test file focussed on testing transactionally issue...
r48010
Make a pull (not-inline → no-inline)
-------------------------------------
the repository should no longer be inline (for relevant format)
revlogv2: also test transactionality of revlog v2...
r48011 #if revlogv1
test-transaction-safety: perform the test on a filelog...
r52072 $ hg debugrevlog of | grep inline
revlog: add a new test file focussed on testing transactionally issue...
r48010 [1]
revlogv2: also test transactionality of revlog v2...
r48011
#endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ make_one_pull tip
pre-commit: 403 third
revlogv2: delay the update of the changelog docket to transaction end...
r48013 external: 403 third
revlogv2: track pending write in the docket and expose it to hooks...
r48015 internal: 503 r500
revlog: add a new test file focussed on testing transactionally issue...
r48010 post-tr: 503 r500
revlogv2: also test transactionality of revlog v2...
r48011
#if revlogv1
test-transaction-safety: perform the test on a filelog...
r52072 $ hg debugrevlog of | grep inline
revlog: add a new test file focussed on testing transactionally issue...
r48010 [1]
revlogv2: also test transactionality of revlog v2...
r48011
#endif