tests/test-persistent-nodemap.t
branchstable
changeset 48038 52018f8ef020
parent 48037 016081cca1fb
child 48039 c094e829e848
equal deleted inserted replaced
48037:016081cca1fb 48038:52018f8ef020
   611   $ hg --config extensions.strip= strip -r . --no-backup
   611   $ hg --config extensions.strip= strip -r . --no-backup
   612   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   612   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   613   $ hg id -r . --traceback
   613   $ hg id -r . --traceback
   614   90d5d3ba2fc4 tip
   614   90d5d3ba2fc4 tip
   615 
   615 
       
   616 (be a good citizen and regenerate the nodemap)
       
   617   $ hg debugupdatecaches
       
   618   $ hg debugnodemap --metadata
       
   619   uid: * (glob)
       
   620   tip-rev: 5005
       
   621   tip-node: 90d5d3ba2fc47db50f712570487cb261a68c8ffe
       
   622   data-length: 121088
       
   623   data-unused: 0
       
   624   data-unused: 0.000%
       
   625 
       
   626 Check race condition when multiple process write new data to the repository
       
   627 ---------------------------------------------------------------------------
       
   628 
       
   629 In this test, we check that two writers touching the repositories will not
       
   630 overwrite each other data. This test is prompted by the existent of issue6554.
       
   631 Where a writer ended up using and outdated docket to update the repository. See
       
   632 the dedicated extension for details on the race windows and read/write schedule
       
   633 necessary to end up in this situation: testlib/persistent-nodemap-race-ext.py
       
   634 
       
   635 The issue was initially observed on a server with a high push trafic, but it
       
   636 can be reproduced using a share and two commiting process which seems simpler.
       
   637 
       
   638 The test is Rust only as the other implementation does not use the same
       
   639 read/write patterns.
       
   640 
       
   641   $ cd ..
       
   642 
       
   643 #if rust
       
   644 
       
   645   $ cp -R test-repo race-repo
       
   646   $ hg share race-repo ./other-wc --config format.use-share-safe=yes
       
   647   updating working directory
       
   648   5001 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   649   $ hg debugformat -R ./race-repo | egrep 'share-safe|persistent-nodemap'
       
   650   share-safe:         yes
       
   651   persistent-nodemap: yes
       
   652   $ hg debugformat -R ./other-wc/ | egrep 'share-safe|persistent-nodemap'
       
   653   share-safe:         yes
       
   654   persistent-nodemap: yes
       
   655   $ hg -R ./other-wc update 'min(head())'
       
   656   3 files updated, 0 files merged, 2 files removed, 0 files unresolved
       
   657   $ hg -R ./race-repo debugnodemap --metadata
       
   658   uid: 43c37dde
       
   659   tip-rev: 5005
       
   660   tip-node: 90d5d3ba2fc47db50f712570487cb261a68c8ffe
       
   661   data-length: 121088
       
   662   data-unused: 0
       
   663   data-unused: 0.000%
       
   664   $ hg -R ./race-repo log -G -r 'head()'
       
   665   @  changeset:   5005:90d5d3ba2fc4
       
   666   |  tag:         tip
       
   667   ~  user:        test
       
   668      date:        Thu Jan 01 00:00:00 1970 +0000
       
   669      summary:     a2
       
   670   
       
   671   o  changeset:   5001:16395c3cf7e2
       
   672   |  user:        test
       
   673   ~  date:        Thu Jan 01 00:00:00 1970 +0000
       
   674      summary:     foo
       
   675   
       
   676   $ hg -R ./other-wc log -G -r 'head()'
       
   677   o  changeset:   5005:90d5d3ba2fc4
       
   678   |  tag:         tip
       
   679   ~  user:        test
       
   680      date:        Thu Jan 01 00:00:00 1970 +0000
       
   681      summary:     a2
       
   682   
       
   683   @  changeset:   5001:16395c3cf7e2
       
   684   |  user:        test
       
   685   ~  date:        Thu Jan 01 00:00:00 1970 +0000
       
   686      summary:     foo
       
   687   
       
   688   $ echo left-side-race > race-repo/left-side-race
       
   689   $ hg -R ./race-repo/ add race-repo/left-side-race
       
   690 
       
   691   $ echo right-side-race > ./other-wc/right-side-race
       
   692   $ hg -R ./other-wc/ add ./other-wc/right-side-race
       
   693 
       
   694   $ mkdir sync-files
       
   695   $ mkdir outputs
       
   696   $ (
       
   697   >    hg -R ./race-repo/ commit -m left-side-commit \
       
   698   >    --config "extensions.race=${RUNTESTDIR}/testlib/persistent-nodemap-race-ext.py" \
       
   699   >    --config 'devel.nodemap-race.role=left';
       
   700   >    touch sync-files/left-done
       
   701   > ) > outputs/left.txt 2>&1 &
       
   702   $ (
       
   703   >    hg -R ./other-wc/ commit -m right-side-commit \
       
   704   >    --config "extensions.race=${RUNTESTDIR}/testlib/persistent-nodemap-race-ext.py" \
       
   705   >    --config 'devel.nodemap-race.role=right';
       
   706   >    touch sync-files/right-done
       
   707   > ) > outputs/right.txt 2>&1 &
       
   708   $ (
       
   709   >    hg -R ./race-repo/ check-nodemap-race \
       
   710   >    --config "extensions.race=${RUNTESTDIR}/testlib/persistent-nodemap-race-ext.py" \
       
   711   >    --config 'devel.nodemap-race.role=reader';
       
   712   >    touch sync-files/reader-done
       
   713   > ) > outputs/reader.txt 2>&1 &
       
   714   $ sh "$RUNTESTDIR"/testlib/wait-on-file 10 sync-files/left-done
       
   715   $ cat outputs/left.txt
       
   716   docket-details:
       
   717     uid:         43c37dde
       
   718     actual-tip:  5005
       
   719     tip-rev:     5005
       
   720     data-length: 121088
       
   721   nodemap-race: left side locked and ready to commit
       
   722   docket-details:
       
   723     uid:         43c37dde
       
   724     actual-tip:  5005
       
   725     tip-rev:     5005
       
   726     data-length: 121088
       
   727   finalized changelog write
       
   728   persisting changelog nodemap
       
   729     new data start at 121088
       
   730   persisted changelog nodemap
       
   731   docket-details:
       
   732     uid:         43c37dde
       
   733     actual-tip:  5006
       
   734     tip-rev:     5006
       
   735     data-length: 121280
       
   736   $ sh "$RUNTESTDIR"/testlib/wait-on-file 10 sync-files/right-done
       
   737   $ cat outputs/right.txt
       
   738   nodemap-race: right side start of the locking sequence
       
   739   nodemap-race: right side reading changelog
       
   740   nodemap-race: right side reading of changelog is done
       
   741   docket-details:
       
   742     uid:         43c37dde
       
   743     actual-tip:  5006
       
   744     tip-rev:     5005
       
   745     data-length: 121088
       
   746   nodemap-race: right side ready to wait for the lock
       
   747   nodemap-race: right side locked and ready to commit
       
   748   docket-details:
       
   749     uid:         43c37dde
       
   750     actual-tip:  5006
       
   751     tip-rev:     5005
       
   752     data-length: 121088
       
   753   right ready to write, waiting for reader
       
   754   right proceeding with writing its changelog index and nodemap
       
   755   finalized changelog write
       
   756   persisting changelog nodemap
       
   757     new data start at 121088
       
   758   persisted changelog nodemap
       
   759   docket-details:
       
   760     uid:         43c37dde
       
   761     actual-tip:  5007
       
   762     tip-rev:     5007
       
   763     data-length: 121472
       
   764   $ sh "$RUNTESTDIR"/testlib/wait-on-file 10 sync-files/reader-done
       
   765   $ cat outputs/reader.txt
       
   766   reader: reading changelog
       
   767   reader ready to read the changelog, waiting for right
       
   768   reader: nodemap docket read
       
   769   record-data-length: 121280
       
   770   actual-data-length: 121280
       
   771   file-actual-length: 121472
       
   772   reader: changelog read
       
   773   docket-details:
       
   774     uid:         43c37dde
       
   775     actual-tip:  5006
       
   776     tip-rev:     5006
       
   777     data-length: 121280
       
   778   tip-rev:  5006
       
   779   tip-node: 492901161367
       
   780   node-rev: 5006
       
   781   error while checking revision: 18 (known-bad-output !)
       
   782     Inconsistency: Revision 5007 found in nodemap is not in revlog indexi (known-bad-output !)
       
   783 
       
   784   $ hg -R ./race-repo log -G -r 'head()'
       
   785   o  changeset:   5007:ac4a2abde241
       
   786   |  tag:         tip
       
   787   ~  parent:      5001:16395c3cf7e2
       
   788      user:        test
       
   789      date:        Thu Jan 01 00:00:00 1970 +0000
       
   790      summary:     right-side-commit
       
   791   
       
   792   @  changeset:   5006:492901161367
       
   793   |  user:        test
       
   794   ~  date:        Thu Jan 01 00:00:00 1970 +0000
       
   795      summary:     left-side-commit
       
   796   
       
   797   $ hg -R ./other-wc log -G -r 'head()'
       
   798   @  changeset:   5007:ac4a2abde241
       
   799   |  tag:         tip
       
   800   ~  parent:      5001:16395c3cf7e2
       
   801      user:        test
       
   802      date:        Thu Jan 01 00:00:00 1970 +0000
       
   803      summary:     right-side-commit
       
   804   
       
   805   o  changeset:   5006:492901161367
       
   806   |  user:        test
       
   807   ~  date:        Thu Jan 01 00:00:00 1970 +0000
       
   808      summary:     left-side-commit
       
   809   
       
   810 #endif
       
   811 
   616 Test upgrade / downgrade
   812 Test upgrade / downgrade
   617 ========================
   813 ========================
       
   814 
       
   815   $ cd ./test-repo/
   618 
   816 
   619 downgrading
   817 downgrading
   620 
   818 
   621   $ cat << EOF >> .hg/hgrc
   819   $ cat << EOF >> .hg/hgrc
   622   > [format]
   820   > [format]