[Bug 4656] New: LookupError when calculating branch cache updates after strip

mercurial-bugs at selenic.com mercurial-bugs at selenic.com
Fri May 8 21:09:51 UTC 2015


http://bz.selenic.com/show_bug.cgi?id=4656

          Priority: normal
            Bug ID: 4656
                CC: mercurial-devel at selenic.com,
                    pierre-yves.david at ens-lyon.org
          Assignee: bugzilla at selenic.com
           Summary: LookupError when calculating branch cache updates
                    after strip
          Severity: bug
    Classification: Unclassified
                OS: All
          Reporter: gregory.szorc at gmail.com
          Hardware: All
            Status: UNCONFIRMED
           Version: 3.4
         Component: Mercurial
           Product: Mercurial

I wrote some funky extension code that rewrites some changesets, rebases
childen, then strips the old commits. It works most of the time. But as part of
deploying it, I ran into a funky crash:

  $ hg push -r 1 --debug --traceback
  pushing to ssh://*:$HGPORT6/test-repo (glob)
  running /Users/gps/src/hgcustom/version-control-tools/testing/mozreview-ssh
192.168.59.103 -p 20065 'hg -R test-repo serve --stdio'
  sending hello command
  sending between command
  remote: 203
  remote: capabilities: lookup changegroupsubset branchmap pushkey known
getbundle unbundlehash batch streamreqs=revlogv1,generaldelta
unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 reviewboard pullreviews pushlog
  remote: 1
  tip: bef76c5ef027241e9682606ae723732a18e2be0f
  committing files:
  foo
  committing manifest
  committing changelog
  {'o\x06\xb4\xacn\xfeyK,\xed\xa6s\xc3\x07\xe3\xce\xed\x85\xefM':
'\xf4"\x84\x1a\x13\xf8\xec\xb9\x95\x89;d\xb9\xacn\xe9\x8e\xa3\t\x94'}
  stripping ['o\x06\xb4\xacn\xfeyK,\xed\xa6s\xc3\x07\xe3\xce\xed\x85\xefM']
  1 changesets found
  list of changesets:
  6f06b4ac6efe794b2ceda673c307e3ceed85ef4d
  bundling: 1/1 changesets (100.00%)
  bundling: 1/1 manifests (100.00%)
  bundling: foo 1/1 files (100.00%)
  saved backup bundle to
$TESTTMP/client/.hg/strip-backup/6f06b4ac6efe-a579e256-replacing.hg (glob)
  6 changesets found
  list of changesets:
  6a5e0303525672de1b4adaa85bf42601a910312d
  afef2b530106d00832a59244a852230bd88a70a7
  773ae5edc39985853a8f396765fd5b65e951cbc4
  659bcc59ed36f1a82f17545c97d0322b16422d5b
  bef76c5ef027241e9682606ae723732a18e2be0f
  f422841a13f8ecb995893b64b9ac6ee98ea30994
  bundling: 1/6 changesets (16.67%)
  bundling: 2/6 changesets (33.33%)
  bundling: 3/6 changesets (50.00%)
  bundling: 4/6 changesets (66.67%)
  bundling: 5/6 changesets (83.33%)
  bundling: 6/6 changesets (100.00%)
  bundling: 1/6 manifests (16.67%)
  bundling: 2/6 manifests (33.33%)
  bundling: 3/6 manifests (50.00%)
  bundling: 4/6 manifests (66.67%)
  bundling: 5/6 manifests (83.33%)
  bundling: 6/6 manifests (100.00%)
  bundling: foo 1/1 files (100.00%)
  adding branch
  adding changesets
  changesets: 1 chunks
  add changeset 6a5e03035256
  changesets: 2 chunks
  add changeset afef2b530106
  changesets: 3 chunks
  add changeset 773ae5edc399
  changesets: 4 chunks
  add changeset 659bcc59ed36
  changesets: 5 chunks
  add changeset bef76c5ef027
  changesets: 6 chunks
  add changeset f422841a13f8
  adding manifests
  manifests: 1/6 chunks (16.67%)
  manifests: 2/6 chunks (33.33%)
  manifests: 3/6 chunks (50.00%)
  manifests: 4/6 chunks (66.67%)
  manifests: 5/6 chunks (83.33%)
  manifests: 6/6 chunks (100.00%)
  adding file changes
  adding foo revisions
  files: 1/1 chunks (100.00%)
  added 6 changesets with 6 changes to 1 files (+4 heads)
  removing unknown node 6f06b4ac6efe from 1-phase boundary
  invalid branchheads cache (served): tip differs
  truncating cache/rbc-revs-v1 to 56
  truncating cache/rbc-revs-v1 to 8
  query 1; heads
  sending batch command
  searching for changes
  all remote heads known locally
  preparing listkeys for "phases"
  sending listkeys command
  checking for updated bookmarks
  preparing listkeys for "bookmarks"
  sending listkeys command
  1 changesets found
  list of changesets:
  f422841a13f8ecb995893b64b9ac6ee98ea30994
  sending unbundle command
  bundling: 1/1 changesets (100.00%)
  bundling: 1/1 manifests (100.00%)
  bundling: foo 1/1 files (100.00%)
  remote: adding changesets
  remote: adding manifests
  remote: adding file changes
  remote: added 1 changesets with 1 changes to 1 files
  remote: Trying to insert into pushlog.
  remote: Inserted into the pushlog db successfully.
  preparing listkeys for "phases"
  sending listkeys command
  preparing pushkey for "phases:3a9f6899ef84c99841f546030b036d0124a863cf"
  sending pushkey command
  try to push obsolete markers to remote
  submitting 1 changesets for review
  sending pushreview command
 
OrderedDict([('\xf4"\x84\x1a\x13\xf8\xec\xb9\x95\x89;d\xb9\xacn\xe9\x8e\xa3\t\x94',
'2')])
  adding review metadata to 1 changesets
  tip: f422841a13f8ecb995893b64b9ac6ee98ea30994
  rewriting f422841a13f8ecb995893b64b9ac6ee98ea30994
  committing files:
  foo
  committing manifest
  committing changelog
  {'\xf4"\x84\x1a\x13\xf8\xec\xb9\x95\x89;d\xb9\xacn\xe9\x8e\xa3\t\x94':
'\xbezG\xe82\x84\xc41\xf8\x8a\xe1P{\t\xdf_fh\xf0\x1a'}
  tip: be7a47e83284c431f88ae1507b09df5f6668f01a
  stripping
['\xf4"\x84\x1a\x13\xf8\xec\xb9\x95\x89;d\xb9\xacn\xe9\x8e\xa3\t\x94']
  1 changesets found
  list of changesets:
  f422841a13f8ecb995893b64b9ac6ee98ea30994
  bundling: 1/1 changesets (100.00%)
  bundling: 1/1 manifests (100.00%)
  bundling: foo 1/1 files (100.00%)
  saved backup bundle to
$TESTTMP/client/.hg/strip-backup/f422841a13f8-dd95891a-replacing.hg (glob)
  6 changesets found
  list of changesets:
  6a5e0303525672de1b4adaa85bf42601a910312d
  afef2b530106d00832a59244a852230bd88a70a7
  773ae5edc39985853a8f396765fd5b65e951cbc4
  659bcc59ed36f1a82f17545c97d0322b16422d5b
  bef76c5ef027241e9682606ae723732a18e2be0f
  be7a47e83284c431f88ae1507b09df5f6668f01a
  bundling: 1/6 changesets (16.67%)
  bundling: 2/6 changesets (33.33%)
  bundling: 3/6 changesets (50.00%)
  bundling: 4/6 changesets (66.67%)
  bundling: 5/6 changesets (83.33%)
  bundling: 6/6 changesets (100.00%)
  bundling: 1/6 manifests (16.67%)
  bundling: 2/6 manifests (33.33%)
  bundling: 3/6 manifests (50.00%)
  bundling: 4/6 manifests (66.67%)
  bundling: 5/6 manifests (83.33%)
  bundling: 6/6 manifests (100.00%)
  bundling: foo 1/1 files (100.00%)
  adding branch
  adding changesets
  changesets: 1 chunks
  add changeset 6a5e03035256
  changesets: 2 chunks
  add changeset afef2b530106
  changesets: 3 chunks
  add changeset 773ae5edc399
  changesets: 4 chunks
  add changeset 659bcc59ed36
  changesets: 5 chunks
  add changeset bef76c5ef027
  changesets: 6 chunks
  add changeset be7a47e83284
  adding manifests
  manifests: 1/1 chunks (100.00%)
  manifests: 2/1 chunks (200.00%)
  manifests: 3/1 chunks (300.00%)
  manifests: 4/1 chunks (400.00%)
  manifests: 5/1 chunks (500.00%)
  manifests: 6/1 chunks (600.00%)
  adding file changes
  adding foo revisions
  files: 1/1 chunks (100.00%)
  added 1 changesets with 6 changes to 1 files (+1 heads)
  invalid branchheads cache (served): tip differs
  strip failed, full bundle stored in
'$TESTTMP/client/.hg/strip-backup/f422841a13f8-dd95891a-replacing.hg'
  updating the branch cache
  Traceback (most recent call last):
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/dispatch.py",
line 140, in _runcatch
      return _dispatch(req)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/dispatch.py",
line 863, in _dispatch
      cmdpats, cmdoptions)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/dispatch.py",
line 624, in runcommand
      ret = _runcommand(ui, options, cmd, d)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/dispatch.py",
line 954, in _runcommand
      return checkargs()
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/dispatch.py",
line 925, in checkargs
      return cmdfunc()
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/dispatch.py",
line 860, in <lambda>
      d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/util.py",
line 711, in check
      return func(*args, **kwargs)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/extensions.py",
line 149, in wrap
      util.checksignature(origfn), *args, **kwargs)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/util.py",
line 711, in check
      return func(*args, **kwargs)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/hgext/mq.py",
line 3483, in mqcommand
      return orig(ui, repo, *args, **kwargs)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/util.py",
line 711, in check
      return func(*args, **kwargs)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/extensions.py",
line 149, in wrap
      util.checksignature(origfn), *args, **kwargs)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/util.py",
line 711, in check
      return func(*args, **kwargs)
    File
"/Users/gps/src/hgcustom/version-control-tools/hgext/reviewboard/client.py",
line 101, in pushcommand
      return orig(ui, repo, *args, **kwargs)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/util.py",
line 711, in check
      return func(*args, **kwargs)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/commands.py",
line 5115, in push
      bookmarks=opts.get('bookmark', ()))
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/extensions.py",
line 194, in wrap
      return wrapper(origfn, *args, **kwargs)
    File
"/Users/gps/src/hgcustom/version-control-tools/hgext/reviewboard/client.py",
line 189, in wrappedpush
      **kwargs)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/exchange.py",
line 227, in push
      _pushbookmark(pushop)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/extensions.py",
line 194, in wrap
      return wrapper(origfn, *args, **kwargs)
    File
"/Users/gps/src/hgcustom/version-control-tools/hgext/reviewboard/client.py",
line 326, in wrappedpushbookmark
      doreview(pushop.repo, pushop.ui, pushop.remote, pushop.reviewnodes)
    File
"/Users/gps/src/hgcustom/version-control-tools/hgext/reviewboard/client.py",
line 490, in doreview
      nodemap = replacechangesets(repo, rewritenodes, replacedescription)
    File
"/Users/gps/src/hgcustom/version-control-tools/pylib/mozhg/mozhg/rewrite.py",
line 258, in replacechangesets
      repair.strip(repo.ui, repo, stripnodes, topic=backuptopic)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/repair.py",
line 192, in strip
      True)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/changegroup.py",
line 849, in addchangegroup
      branchmap.updatecache(repo.filtered('served'))
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/branchmap.py",
line 92, in updatecache
      partial = subset.branchmap().copy()
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/localrepo.py",
line 718, in branchmap
      branchmap.updatecache(self)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/branchmap.py",
line 79, in updatecache
      cl = repo.changelog
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/repoview.py",
line 275, in changelog
      revs = filterrevs(unfi, self.filtername)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/repoview.py",
line 222, in filterrevs
      repo.filteredrevcache[filtername] = func(repo.unfiltered())
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/repoview.py",
line 178, in computemutable
      maymutable = filterrevs(repo, 'base')
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/repoview.py",
line 222, in filterrevs
      repo.filteredrevcache[filtername] = func(repo.unfiltered())
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/repoview.py",
line 202, in computeimpactable
      firstmutable = min(firstmutable, min(cl.rev(r) for r in roots))
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/repoview.py",
line 202, in <genexpr>
      firstmutable = min(firstmutable, min(cl.rev(r) for r in roots))
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/changelog.py",
line 197, in rev
      r = super(changelog, self).rev(node)
    File
"/Users/gps/src/hgcustom/version-control-tools/venv/lib/python2.7/site-packages/mercurial/revlog.py",
line 321, in rev
      raise LookupError(node, self.indexfile, _('no node'))
  LookupError: 00changelog.i at f422841a13f8: no node
  abort: 00changelog.i at f422841a13f8: no node!
  transaction abort!
  rollback completed
  [255]

This command actually does 2 rewrites and strips:

1) Rewrite + rebase + strip before discovery
2) vanilla push code
3) Rewrite + rebase + strip in reaction to stuff that happened during push

During the 2nd set of rewrites, we get the error seen.

On IRC, marmoute appeared to immediately understand what the issue is. I'll let
him explain it in more detail because I don't understand what's going on.

I wish I had STR with vanilla Mercurial, but I don't. Sorry :/

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the Mercurial-devel mailing list