Patchwork D10084: copies: tests and fix parallel computation of changed file information

login
register
mail settings
Submitter phabricator
Date March 1, 2021, 7:11 p.m.
Message ID <differential-rev-PHID-DREV-bm7csgxafehurcb2dypv-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/48399/
State Superseded
Headers show

Comments

phabricator - March 1, 2021, 7:11 p.m.
marmoute created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  The code was mixing variable name and misbehaving in some case. This changeset
  fix it and also add a tests to validate it does not regress. Without the fix,
  the parallel-upgrade misbehavior in random ways.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D10084

AFFECTED FILES
  mercurial/metadata.py
  tests/test-copies-chain-merge.t

CHANGE DETAILS




To: marmoute, #hg-reviewers
Cc: mercurial-patches, mercurial-devel

Patch

diff --git a/tests/test-copies-chain-merge.t b/tests/test-copies-chain-merge.t
--- a/tests/test-copies-chain-merge.t
+++ b/tests/test-copies-chain-merge.t
@@ -1,4 +1,4 @@ 
-#testcases filelog compatibility changeset sidedata upgraded
+#testcases filelog compatibility changeset sidedata upgraded upgraded-parallel
 
 =====================================================
 Test Copy tracing for chain of copies involving merge
@@ -1486,6 +1486,44 @@ 
   
 #endif
 
+#if upgraded-parallel
+  $ cat >> $HGRCPATH << EOF
+  > [format]
+  > exp-use-side-data = yes
+  > exp-use-copies-side-data-changeset = yes
+  > [experimental]
+  > worker.repository-upgrade=yes
+  > [worker]
+  > enabled=yes
+  > numcpus=8
+  > EOF
+  $ hg debugformat -v
+  format-variant     repo config default
+  fncache:            yes    yes     yes
+  dotencode:          yes    yes     yes
+  generaldelta:       yes    yes     yes
+  share-safe:          no     no      no
+  sparserevlog:       yes    yes     yes
+  sidedata:            no    yes      no
+  persistent-nodemap:  no     no      no
+  copies-sdc:          no    yes      no
+  plain-cl-delta:     yes    yes     yes
+  compression:        * (glob)
+  compression-level:  default default default
+  $ hg debugupgraderepo --run --quiet
+  upgrade will perform the following actions:
+  
+  requirements
+     preserved: * (glob)
+     added: exp-copies-sidedata-changeset, exp-sidedata-flag
+  
+  processed revlogs:
+    - all-filelogs
+    - changelog
+    - manifest
+  
+#endif
+
 
 #if no-compatibility no-filelog no-changeset
 
@@ -3172,18 +3210,21 @@ 
     a (filelog !)
     a (sidedata !)
     a (upgraded !)
+    a (upgraded-parallel !)
 
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE,Km")' f
   A f
     a (filelog !)
     a (sidedata !)
     a (upgraded !)
+    a (upgraded-parallel !)
 
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mK,AEm")' f
   A f
     a (filelog !)
     a (sidedata !)
     a (upgraded !)
+    a (upgraded-parallel !)
 
 
 The result from mEAm is the same for the subsequent merge:
@@ -3193,18 +3234,21 @@ 
     a (filelog !)
     b (sidedata !)
     b (upgraded !)
+    b (upgraded-parallel !)
 
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA,Jm")' f
   A f
     a (filelog !)
     b (sidedata !)
     b (upgraded !)
+    b (upgraded-parallel !)
 
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mJ,EAm")' f
   A f
     a (filelog !)
     b (sidedata !)
     b (upgraded !)
+    b (upgraded-parallel !)
 
 Subcase: chaining conflicting rename resolution
 ```````````````````````````````````````````````
@@ -3221,18 +3265,21 @@ 
     r (filelog !)
     p (sidedata !)
     p (upgraded !)
+    p (upgraded-parallel !)
 
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mPQ,Tm")' v
   A v
     r (filelog !)
     p (sidedata !)
     p (upgraded !)
+    p (upgraded-parallel !)
 
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mT,PQm")' v
   A v
     r (filelog !)
     p (sidedata !)
     p (upgraded !)
+    p (upgraded-parallel !)
 
 
 The result from mQPm is the same for the subsequent merge:
@@ -3250,6 +3297,7 @@ 
     r (filelog !)
     r (sidedata !)
     r (upgraded !)
+    r (upgraded-parallel !)
 
 
 Subcase: chaining salvage information during a merge
@@ -3330,11 +3378,13 @@ 
     a (filelog !)
     h (sidedata !)
     h (upgraded !)
+    h (upgraded-parallel !)
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGFm")' d
   A d
     a (filelog !)
     a (sidedata !)
     a (upgraded !)
+    a (upgraded-parallel !)
 
 Chained output
 
@@ -3343,11 +3393,13 @@ 
     a (filelog !)
     h (sidedata !)
     h (upgraded !)
+    h (upgraded-parallel !)
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFG,Om")' d
   A d
     a (filelog !)
     h (sidedata !)
     h (upgraded !)
+    h (upgraded-parallel !)
 
 
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGF,Nm")' d
@@ -3373,12 +3425,14 @@ 
     a (filelog !)
     a (sidedata !)
     a (upgraded !)
+    a (upgraded-parallel !)
 
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE-change,Km")' f
   A f
     a (filelog !)
     a (sidedata !)
     a (upgraded !)
+    a (upgraded-parallel !)
 
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mK,AE-change-m")' f
   A f
@@ -3392,15 +3446,18 @@ 
     a (filelog !)
     b (sidedata !)
     b (upgraded !)
+    b (upgraded-parallel !)
 
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA-change,Jm")' f
   A f
     a (filelog !)
     b (sidedata !)
     b (upgraded !)
+    b (upgraded-parallel !)
 
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mJ,EA-change-m")' f
   A f
     a (filelog !)
     b (sidedata !)
     b (upgraded !)
+    b (upgraded-parallel !)
diff --git a/mercurial/metadata.py b/mercurial/metadata.py
--- a/mercurial/metadata.py
+++ b/mercurial/metadata.py
@@ -882,14 +882,14 @@ 
         data = {}, False
         if util.safehasattr(revlog, b'filteredrevs'):  # this is a changelog
             # Is the data previously shelved ?
-            sidedata = staging.pop(rev, None)
-            if sidedata is None:
+            data = staging.pop(rev, None)
+            if data is None:
                 # look at the queued result until we find the one we are lookig
                 # for (shelve the other ones)
                 r, data = sidedataq.get()
                 while r != rev:
                     staging[r] = data
-                    r, sidedata = sidedataq.get()
+                    r, data = sidedataq.get()
             tokens.release()
         sidedata, has_copies_info = data
         new_flag = 0