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] |