Closed Bug 573264 Opened 14 years ago Closed 14 years ago

cannot push to hg.mozilla.org/tracemonkey

Categories

(mozilla.org Graveyard :: Server Operations, task)

x86
Linux
task
Not set
critical

Tracking

(Not tracked)

RESOLVED FIXED

People

(Reporter: igor, Assigned: aravind)

References

Details

I tried to push to hg.mozilla.org/tracemokey and got the following error:

remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 4 changes to 4 files
remote: error: pretxnchangegroup.z_linearhistory hook raised an exception: column rev is not unique
remote: transaction abort!
remote: rollback completed
remote: ** unknown exception encountered, details follow
remote: ** report bug details to http://mercurial.selenic.com/bts/
remote: ** or mercurial@selenic.com
remote: ** Python 2.4.3 (#1, Jun 11 2009, 14:09:58) [GCC 4.1.2 20080704 (Red Hat 4.1.2-44)]
remote: ** Mercurial Distributed SCM (version 1.5.4)
remote: ** Extensions loaded: hgwebjson, pushlog-feed, buglink
remote: Traceback (most recent call last):
remote:   File "/usr/bin/hg", line 27, in ?
remote:     mercurial.dispatch.run()
remote:   File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 16, in run
remote:     sys.exit(dispatch(sys.argv[1:]))
remote:   File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 30, in dispatch
remote:     return _runcatch(u, args)
remote:   File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 50, in _runcatch
remote:     return _dispatch(ui, args)
remote:   File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 471, in _dispatch
remote:     return runcommand(lui, repo, cmd, fullargs, ui, options, d)
remote:   File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 341, in runcommand
remote:     ret = _runcommand(ui, options, cmd, d)
remote:   File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 522, in _runcommand
remote:     return checkargs()
remote:   File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 476, in checkargs
remote:     return cmdfunc()
remote:   File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 470, in <lambda>
remote:     d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
remote:   File "/usr/lib/python2.4/site-packages/mercurial/util.py", line 401, in check
remote:     return func(*args, **kwargs)
remote:   File "/usr/lib/python2.4/site-packages/mercurial/commands.py", line 2904, in serve
remote:     s.serve_forever()
remote:   File "/usr/lib/python2.4/site-packages/mercurial/sshserver.py", line 45, in serve_forever
remote:     while self.serve_one():
remote:   File "/usr/lib/python2.4/site-packages/mercurial/sshserver.py", line 57, in serve_one
remote:     impl()
remote:   File "/usr/lib/python2.4/site-packages/mercurial/sshserver.py", line 208, in do_unbundle
remote:     r = self.repo.addchangegroup(fp, 'serve', self.client_url())
remote:   File "/usr/lib/python2.4/site-packages/mercurial/localrepo.py", line 2120, in addchangegroup
remote:     url=url, pending=p)
remote:   File "/usr/lib/python2.4/site-packages/mercurial/localrepo.py", line 152, in hook
remote:     return hook.hook(self.ui, self, name, throw, **args)
remote:   File "/usr/lib/python2.4/site-packages/mercurial/hook.py", line 139, in hook
remote:     r = _pythonhook(ui, repo, name, hname, hookfn, args, throw) or r
remote:   File "/usr/lib/python2.4/site-packages/mercurial/hook.py", line 68, in _pythonhook
remote:     r = obj(ui=ui, repo=repo, hooktype=name, **args)
remote:   File "/usr/lib/python2.4/site-packages/mozhghooks/pushlog.py", line 56, in log
remote:     (pushid, ctx.rev(), hex(ctx.node())))
remote: pysqlite2.dbapi2.IntegrityError: column rev is not unique
abort: unexpected response: empty string
Assignee: nobody → server-ops
Component: Hg: Customizations → Server Operations
QA Contact: hg.customizations → mrz
Severity: normal → critical
Assignee: server-ops → aravind
Paged Ted, this seems related to the Hg upgrade yesterday.  We can roll back if needed, but I'd rather not.
Blocks: 551015
Aren't you missing an 'n' ?
http://hg.mozilla.org/tracemonkey
(In reply to comment #2)
> Aren't you missing an 'n' ?
> http://hg.mozilla.org/tracemonkey

I misspelled the repository in bug's title report but not during the push.
Summary: cannot push to hg.mozilla.org/tracemokey → cannot push to hg.mozilla.org/tracemonkey
The pushlog db in the repo seems to have gotten corrupt, it had entries in it for rev b0f13006282537b671d4b410fd9849215154ae18, which wasn't in the repo.  I deleted those entries from pushlog db, you please try your push again?
I tried to push again but got the same response:

~/m/tm/js/src> hg pull -u
pulling from ssh://hg.mozilla.org/tracemonkey
searching for changes
no changes found
~/m/tm/js/src> hg push
pushing to ssh://hg.mozilla.org/tracemonkey
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 4 changes to 4 files
remote: Trying to insert into pushlog...
remote: error: pretxnchangegroup.z_linearhistory hook raised an exception: column rev is not unique
remote: transaction abort!
remote: rollback completed
remote: ** unknown exception encountered, details follow
remote: ** report bug details to http://mercurial.selenic.com/bts/
remote: ** or mercurial@selenic.com
remote: ** Python 2.4.3 (#1, Jun 11 2009, 14:09:58) [GCC 4.1.2 20080704 (Red Hat 4.1.2-44)]
remote: ** Mercurial Distributed SCM (version 1.5.4)
remote: ** Extensions loaded: hgwebjson, pushlog-feed, buglink
remote: Traceback (most recent call last):
remote:   File "/usr/bin/hg", line 27, in ?
remote:     mercurial.dispatch.run()
remote:   File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 16, in run
remote:     sys.exit(dispatch(sys.argv[1:]))
remote:   File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 30, in dispatch
remote:     return _runcatch(u, args)
remote:   File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 50, in _runcatch
remote:     return _dispatch(ui, args)
remote:   File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 471, in _dispatch
remote:     return runcommand(lui, repo, cmd, fullargs, ui, options, d)
remote:   File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 341, in runcommand
remote:     ret = _runcommand(ui, options, cmd, d)
remote:   File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 522, in _runcommand
remote:     return checkargs()
remote:   File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 476, in checkargs
remote:     return cmdfunc()
remote:   File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 470, in <lambda>
remote:     d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
remote:   File "/usr/lib/python2.4/site-packages/mercurial/util.py", line 401, in check
remote:     return func(*args, **kwargs)
remote:   File "/usr/lib/python2.4/site-packages/mercurial/commands.py", line 2904, in serve
remote:     s.serve_forever()
remote:   File "/usr/lib/python2.4/site-packages/mercurial/sshserver.py", line 45, in serve_forever
remote:     while self.serve_one():
remote:   File "/usr/lib/python2.4/site-packages/mercurial/sshserver.py", line 57, in serve_one
remote:     impl()
remote:   File "/usr/lib/python2.4/site-packages/mercurial/sshserver.py", line 208, in do_unbundle
remote:     r = self.repo.addchangegroup(fp, 'serve', self.client_url())
remote:   File "/usr/lib/python2.4/site-packages/mercurial/localrepo.py", line 2120, in addchangegroup
remote:     url=url, pending=p)
remote:   File "/usr/lib/python2.4/site-packages/mercurial/localrepo.py", line 152, in hook
remote:     return hook.hook(self.ui, self, name, throw, **args)
remote:   File "/usr/lib/python2.4/site-packages/mercurial/hook.py", line 139, in hook
remote:     r = _pythonhook(ui, repo, name, hname, hookfn, args, throw) or r
remote:   File "/usr/lib/python2.4/site-packages/mercurial/hook.py", line 68, in _pythonhook
remote:     r = obj(ui=ui, repo=repo, hooktype=name, **args)
remote:   File "/usr/lib/python2.4/site-packages/mozhghooks/pushlog.py", line 77, in log
remote:     (pushid, ctx.rev(), hex(ctx.node())))
remote: pysqlite2.dbapi2.IntegrityError: column rev is not unique
abort: unexpected response: empty string
Yup, There are a couple of problems here.

1) It appears that stuff gets into pushlog before it gets committed into mercurial.  This shouldn't be happening because this is the list of hooks in the repo.

[hooks]
pretxnchangegroup.a_treeclosure = python:mozhghooks.treeclosure.hook
pretxnchangegroup.a_singlehead = /repo/hg/scripts/hg_require_single_head
pretxnchangegroup.z_linearhistory = python:mozhghooks.pushlog.log

technically the singlehead should be rejecting stuff and we should never get to linearhistory (unless this is no longer true in 1.5.4)

2) The second problem is that the behavior of "hg heads" seems to have changed between 1.2 and 1.5.4.

In 1.2 "hg heads" only lists this
[root@dm-vcview02 tracemonkey]# hg heads
changeset:   43347:7edf86f575bd
tag:         tip
user:        Blake Kaplan <mrbkap@gmail.com>
date:        Fri Jun 18 17:45:33 2010 -0700
summary:     Remove incorrect return. rs=lumpy

In 1.5 "he heads" lists this.
[root@dm-svn02 tracemonkey]# hg heads
changeset:   43347:7edf86f575bd
tag:         tip
user:        Blake Kaplan <mrbkap@gmail.com>
date:        Fri Jun 18 17:45:33 2010 -0700
summary:     Remove incorrect return. rs=lumpy

changeset:   43217:5f2e4510a213
branch:      dormant-bug-542222
user:        Ehsan Akhgari <ehsan@mozilla.com>
date:        Sat Jun 05 17:42:42 2010 -0400
summary:     Marking the tip of mozilla-central as dormant-branch-bug-542222

changeset:   36331:f80b4464d261
branch:      electrolysis-not-just-plugins
parent:      36244:683dfdc4adf0
user:        Benjamin Smedberg <benjamin@smedbergs.us>
date:        Mon Dec 14 11:26:15 2009 -0500
summary:     Revert the electrolysis-plugins-only branch so that the Electrolysis repository can return to its normal (plugins and tabs) state.

changeset:   36212:cd74c0c4de89
branch:      electrolysis-plugins-only
parent:      36210:9b7c59d4c4cd
parent:      36211:39e0a7b9fc54
user:        Benjamin Smedberg <benjamin@smedbergs.us>
date:        Fri Dec 04 11:42:28 2009 -0500
summary:     Merge additional changes from electrolysis and mozilla-central into the electrolysis-plugins-only tracking branch.

changeset:   15679:76caed42cf7c
branch:      scalable_gc_free_lists_378918
parent:      15678:a1309018611f
parent:      15673:2cbe07bd5857
user:        Igor Bukanov <igor@mir2.org>
date:        Tue Jun 24 14:18:18 2008 +0200
summary:     merge

[root@dm-svn02 tracemonkey]#

This is causing all pushes to tracemonkey to fail.

Blake suggested that we use the hook mozilla-central uses (pretxnchangegroup.b_singlehead = python:mozhghooks.single_head_per_branch.hook
)for tracemonkey, that hook appears to be designed to work with 1.5.4.

We can roll back mercurial to 1.2 (on the push servers), but that seems like the wrong thing to do here.
Jesse suggested that for now, we modify the hook to allow 5 heads so other can continue to push to it.  I made the changes and the new hook looks like this.

pretxnchangegroup.a_fiveheads = /repo/hg/scripts/hg_allow_only_five_heads

[root@dm-svn02 ~]# cat /repo/hg/scripts/hg_allow_only_five_heads
#!/bin/sh

if test $(hg heads --template 'Test_Head\n' | grep -c "^Test_Head") != "5"; then
    printf "You may not push multiple heads to this repository.\n" 1>&2;
    exit 1;
fi
[root@dm-svn02 ~]#

You should now be able to push to the repo (fingers crossed!)
You can get the old behavior from hg heads using the -t/--topo option.
Updated hg_require_single_head to use -t and switched the repo back to this hook.
This issue is resolved, I logged a different bug (573285) for the first problem in comment 6.
Status: NEW → RESOLVED
Closed: 14 years ago
Resolution: --- → FIXED
You could also switch tracemonkey to the single_head_per_branch hook like m-c.
Product: mozilla.org → mozilla.org Graveyard
You need to log in before you can comment on or make changes to this bug.