[Bug 6149] New: Remote traceback after repeated amend on hg.sr.ht and possible remote repo obsstore corruption

mercurial-bugs at mercurial-scm.org mercurial-bugs at mercurial-scm.org
Thu Jun 6 11:33:44 UTC 2019


https://bz.mercurial-scm.org/show_bug.cgi?id=6149

            Bug ID: 6149
           Summary: Remote traceback after repeated amend on hg.sr.ht and
                    possible remote repo obsstore corruption
           Product: Mercurial
           Version: unspecified
          Hardware: PC
                OS: Linux
            Status: UNCONFIRMED
          Severity: feature
          Priority: wish
         Component: evolution
          Assignee: bugzilla at mercurial-scm.org
          Reporter: zash at zash.se
                CC: mercurial-devel at mercurial-scm.org,
                    pierre-yves.david at ens-lyon.org

This happens on hg.sr.ht and might be specific to that service.

Also see https://todo.sr.ht/~sircmpwn/hg.sr.ht/20

Have been unable to reproduce elsewhere so far.

Script that triggers the traceback:

```
#!/bin/bash

set -v
# Create repo 'test' via web ui at https://hg.sr.ht/create

# Enable non-publishing / evolve in settings -> features

hg clone ssh://hg@hg.sr.ht/~SR_HT_USER/test
cd test

# An initial commit to avoid "repo is unrelated" when pushing amended commit

echo 1 > file
hg ci -A -m initial

# Another commit which we'll amend some

echo 2 > file
hg ci -m change
hg push

# Amend and push once

echo 3 > file
hg amend
hg push


# Amend and push again

echo 4 > file
hg amend
hg push

# And now it's broken?

hg push
hg pull
```

Last command(s) produce a traceback like:

```
pushing to ssh://hg@hg.sr.ht/~zash/test
searching for changes
remote: ** Unknown exception encountered with possibly-broken third-party
extension srht
remote: ** which supports versions unknown of Mercurial.
remote: ** Please disable srht and try your action again.
remote: ** If that fixes the bug please report it to the extension author.
remote: ** Python 2.7.16 (default, May  6 2019, 19:35:26) [GCC 8.3.0]
remote: ** Mercurial Distributed SCM (version 4.9.1)
remote: ** Extensions loaded: srht, clonebundles, strip, evolve.serveronly
remote: Traceback (most recent call last):
remote:   File "/usr/bin/hg-ssh", line 97, in <module>
remote:     main()
remote:   File "/usr/bin/hg-ssh", line 82, in main
remote:     dispatch.dispatch(req)
remote:   File "/usr/lib/python2.7/site-packages/mercurial/dispatch.py", line
225, in dispatch
remote:     ret = _runcatch(req) or 0
remote:   File "/usr/lib/python2.7/site-packages/mercurial/dispatch.py", line
376, in _runcatch
remote:     return _callcatch(ui, _runcatchfunc)
remote:   File "/usr/lib/python2.7/site-packages/mercurial/dispatch.py", line
384, in _callcatch
remote:     return scmutil.callcatch(ui, func)
remote:   File "/usr/lib/python2.7/site-packages/mercurial/scmutil.py", line
165, in callcatch
remote:     return func()
remote:   File "/usr/lib/python2.7/site-packages/mercurial/dispatch.py", line
367, in _runcatchfunc
remote:     return _dispatch(req)
remote:   File "/usr/lib/python2.7/site-packages/mercurial/dispatch.py", line
1021, in _dispatch
remote:     cmdpats, cmdoptions)
remote:   File "/usr/lib/python2.7/site-packages/mercurial/dispatch.py", line
756, in runcommand
remote:     ret = _runcommand(ui, options, cmd, d)
remote:   File "/usr/lib/python2.7/site-packages/mercurial/dispatch.py", line
1030, in _runcommand
remote:     return cmdfunc()
remote:   File "/usr/lib/python2.7/site-packages/mercurial/dispatch.py", line
1018, in <lambda>
remote:     d = lambda: util.checksignature(func)(ui, *args, **strcmdopt)
remote:   File "/usr/lib/python2.7/site-packages/mercurial/util.py", line 1670,
in check
remote:     return func(*args, **kwargs)
remote:   File "/usr/lib/python2.7/site-packages/mercurial/commands.py", line
5270, in serve
remote:     s.serve_forever()
remote:   File "/usr/lib/python2.7/site-packages/mercurial/wireprotoserver.py",
line 794, in serve_forever
remote:     self.serveuntil(threading.Event())
remote:   File "/usr/lib/python2.7/site-packages/mercurial/wireprotoserver.py",
line 800, in serveuntil
remote:     _runsshserver(self._ui, self._repo, self._fin, self._fout, ev)
remote:   File "/usr/lib/python2.7/site-packages/mercurial/wireprotoserver.py",
line 655, in _runsshserver
remote:     rsp = wireprotov1server.dispatch(repo, proto, request)
remote:   File
"/usr/lib/python2.7/site-packages/mercurial/wireprotov1server.py", line 74, in
dispatch
remote:     return func(repo, proto, *args)
remote:   File
"/usr/lib/python2.7/site-packages/hgext3rd/evolve/obsdiscovery.py", line 778,
in srv_obshashrange_v1
remote:     hashes = _obshashrange_v0(repo, ranges)
remote:   File
"/usr/lib/python2.7/site-packages/hgext3rd/evolve/obsdiscovery.py", line 736,
in _obshashrange_v0
remote:     repo.obsstore.rangeobshashcache.update(repo)
remote:   File "/usr/lib/python2.7/site-packages/hgext3rd/evolve/obscache.py",
line 175, in update
remote:     upgrade = self._upgradeneeded(repo)
remote:   File "/usr/lib/python2.7/site-packages/hgext3rd/evolve/obscache.py",
line 279, in _upgradeneeded
remote:     markers = markersfrom(obsstore, keyobssize, keyobslength)
remote:   File "/usr/lib/python2.7/site-packages/hgext3rd/evolve/obscache.py",
line 90, in markersfrom
remote:     return obsolete._readmarkers(obsdata, byteoffset)[1]
remote:   File "/usr/lib/python2.7/site-packages/mercurial/util.py", line 1621,
in wrapper
remote:     return func(*args, **kwargs)
remote:   File "/usr/lib/python2.7/site-packages/mercurial/obsolete.py", line
475, in _readmarkers
remote:     return diskversion, formats[diskversion][0](data, off, stop)
remote:   File "/usr/lib/python2.7/site-packages/mercurial/obsolete.py", line
454, in _fm1readmarkers
remote:     return native(data, off, stop)
remote: ValueError: overflow in obsstore
abort: unexpected response: empty string
```

Local version of hg & evolve:

```
$ hg version -v
Mercurial Distributed SCM (version 5.0)
(see https://mercurial-scm.org for more information)

Copyright (C) 2005-2019 Matt Mackall and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Enabled extensions:

  evolve  external  8.5.1
```

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


More information about the Mercurial-devel mailing list