On push of a new branch to a gerrit server we encounter the following error:
de@roma:~/git-hate/www$ git push origin landingpage
Counting objects: 149, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (73/73), done.
Writing objects: 100% (111/111), 2.77 MiB, done.
Total 111 (delta 68), reused 80 (delta 38)
remote: Resolving deltas: 100% (68/68)
error: unpack failed: error Missing tree 30c4809ade0b4b0c81cb7f882450774862b82361
fatal: Unpack error, check server log
To ssh://user@git-server/repository
! [remote rejected] landingpage -> landingpage (n/a (unpacker error))
error: failed to push some refs to 'ssh://user@git-server/repository'
We tried to copy the mentioned tree object to the remote git manually without success.
On gerrit side we get a stacktrace:
[2013-05-16 13:43:42,753] ERROR com.google.gerrit.sshd.BaseCommand : Internal server error (user de account 1000000) during git-receive-pack '/repository'
com.google.gerrit.sshd.BaseCommand$Failure: fatal: Unpack error, check server log
at com.google.gerrit.sshd.commands.Receive.runImpl(Receive.java:157)
at com.google.gerrit.sshd.AbstractGitCommand.service(AbstractGitCommand.java:106)
at com.google.gerrit.sshd.AbstractGitCommand.access$000(AbstractGitCommand.java:34)
at com.google.gerrit.sshd.AbstractGitCommand$1.run(AbstractGitCommand.java:72)
at com.google.gerrit.sshd.BaseCommand$TaskThunk.run(BaseCommand.java:430)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:165)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:266)
at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:337)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:636)
Caused by: java.io.IOException: Unpack error on project "repository":
AdvertiseRefsHook: org.eclipse.jgit.transport.AdvertiseRefsHookChain@7047125class org.eclipse.jgit.transport.AdvertiseRefsHookChain
at com.google.gerrit.sshd.commands.Receive.runImpl(Receive.java:156)
... 13 more
Caused by: org.eclipse.jgit.errors.UnpackException: Exception while parsing pack stream
at org.eclipse.jgit.transport.ReceivePack.service(ReceivePack.java:202)
at org.eclipse.jgit.transport.ReceivePack.receive(ReceivePack.java:142)
at com.google.gerrit.sshd.commands.Receive.runImpl(Receive.java:98)
... 13 more
Caused by: org.eclipse.jgit.errors.MissingObjectException: Missing tree 30c4809ade0b4b0c81cb7f882450774862b82361
at org.eclipse.jgit.transport.BaseReceivePack.checkConnectivity(BaseReceivePack.java:996)
at org.eclipse.jgit.transport.BaseReceivePack.receivePackAndCheckConnectivity(BaseReceivePack.java:756)
at org.eclipse.jgit.transport.ReceivePack.service(ReceivePack.java:167)
... 15 more
Folks: any ideas what to do?
Pushing with --no-thin
argument works as a workaround for me:
git push --no-thin omnigerrit HEAD:refs/for/android-4.4
Are you using git > 1.8.4.2 ?
I found incompatibility between git 1.8.4.3+ and gerrit 2.6, because of https://github.com/git/git/commit/fbd4a7036dfa71ec89e7c441cef1ac9aaa59a315
With this enhancement, if git finds out that the tree sha1 already exists in the server, it wont send it again, but gerrit wants to search the tree sha1 associated with the commit sha1 in the uploaded pack.
It looks like I cannot reproduce it with gerrit 2.8-rc3, not with latest version of scm-manager. I would say this has been resolved in jgit, but cannot find which version yet.
my case
I also encounter this problem too, and this take a long time to fix this problem.
First, I notice one error info in gerrit log:
Internal server error (user newptone account 1) during git-receive-pack '/neutron.git'
com.google.gerrit.sshd.BaseCommand$Failure: fatal: Unpack error, check server log
......
... Missing unknown 613fd2557fba30aff2dbd51c3807cc57561bab08
What is 613fd2557fba30aff2dbd51c3807cc57561bab08 object?
Then I use git review -l to search all opened patchset for this project neutron:
1974 master Add two interfaces for manipulate forwarding individually
Then I find this patchset in gerrit dashboard by searching, I click the link and it seems error:
613fd2557fba30aff2dbd51c3807cc57561bab08 cannot found
Aha, that's the reason!
But why this object missing?
The reason is my colleague tell me neutron project will use a new repo to replace the old, I delete the the old repo but didn't close all open patchset in gerrit. The open patchset will disappear in gerrit dashboard, but it still exist in gerrit database.
how to fix it
Login in your reviewdb sql and find this record:
First, make sure this is the one we want to modify:
select * from changes where change_id=1974\G;
Then update this record:
update changes set open='N',status='A' where change_id=1974;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With