设为首页 收藏本站
查看: 1142|回复: 0

[经验分享] 解决Gerrit的git unpack error问题

[复制链接]

尚未签到

发表于 2018-1-15 21:56:34 | 显示全部楼层 |阅读模式
  今天上午同事和我说neutron项目要换成全新的内部代码,原先仓库里的代码要全部废弃掉。于是我就简单地创建了一个空项目使用git push --force将其置空。
  下午的时候,麻烦事情就来了,同事发现提交patch的时候,会发现如下报错:
  

remote: Resolving deltas: 100% (2/2)  
error: unpack failed: error Missing unknown 613fd2557fba30aff2dbd51c3807cc57561bab08
  
fatal: Unpack error, check server log
  
To ssh:
//newptone@review.ustack.com:29418/neutron.git  
! [remote rejected] HEAD -> refs/publish/datong (n/a (unpacker error))
  
error: failed to push some refs to 'ssh://newptone@review.ustack.com:29418/neutron.git'
  

  通过google我找到了两篇文章:
  《Gerrit Code Review - Unpack error Missing unknown》一文是说git的某object受损导致:
  http://asheepapart.blogspot.jp/2011/10/gerrit-code-review-unpack-error-missing.html
  我使用文提供的方法发现根本就不存在 613fd2557fba30aff2dbd51c3807cc57561bab08 object。
  然后我又搜到了一个在stackoverflow上的相关提问:
  http://stackoverflow.com/questions/16586642/git-unpack-error-on-push-to-gerrit
  提问指出如果你使用了git 1.8 + gerrit 2.7版本的组合,就会出现这样的问题,可惜的是我所使用的git和gerrit版本均低于此。
  鉴于网上没有靠谱的解决办法,只能自己去查问题所在了。先查看了gerrit的日志:
  

[2014-01-07 03:57:15,400] ERROR com.google.gerrit.sshd.BaseCommand : 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
  
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:
1146)  
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:
615)  
at java.lang.Thread.run(Thread.java:
701)  
Caused by: java.io.IOException: Unpack error on project
"neutron":  
AdvertiseRefsHook: org.eclipse.jgit.transport.AdvertiseRefsHookChain@77348c71class 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 unknown 613fd2557fba30aff2dbd51c3807cc57561bab08
  
at org.eclipse.jgit.storage.file.WindowCursor.open(WindowCursor.java:
125)  
at org.eclipse.jgit.lib.ObjectReader.open(ObjectReader.java:
228)  
at org.eclipse.jgit.revwalk.RevWalk.parseAny(RevWalk.java:
812)  
at org.eclipse.jgit.transport.BaseReceivePack.checkConnectivity(BaseReceivePack.java:
956)  
at org.eclipse.jgit.transport.BaseReceivePack.receivePackAndCheckConnectivity(BaseReceivePack.java:
756)  
at org.eclipse.jgit.transport.ReceivePack.service(ReceivePack.java:
167)  
...
15 more  

  那么就定义到613fd2557fba30aff2dbd51c3807cc57561bab08这串哈希值,为什么会丢失这个object ?
  我顺手敲了一个 git review -l,发现gerrit上居然有一个还没有关闭的patch:
  

1974  master  Add two interfaces for manipulate forwarding individually  

  我打开Gerrit web界面,点击这个patchset,跳出一段错误说明:613fd2557fba30aff2dbd51c3807cc57561bab08 cannot  found.
  啊哈,到这里真相就大白了。原因就是上午我在删除原先的旧有neutron代码时,忘记把gerrit上相关的neutron提交做关闭处理,而输入git review命令时,gerrit会先做一个rebase操作,再做提交,然而neutron仓库发生变化后,存在数据库中的1974号patch_set找不到对应的object了,所以在执行:git push gerrit HEAD:refs/publish/datong 操作时发生了前面的问题。
  事已至此,解决的办法就是到reviewdb数据库里,先从patch_sets表中找出change_id是1974的记录,确定无误后,我们从changes表中找出对应的记录:
  

mysql> select * from changes where change_id=1974\G;  

*************************** 1. row ***************************  
change_key: I6596720099473969b19675f8fbb97a2db29b5532
  
created_on:
2014-01-06 12:20:07  
last_updated_on:
2014-01-07 03:02:09  
sort_key: 002a4736000007b6
  
owner_account_id:
25  
dest_project_name: neutron
  
dest_branch_name: refs
/heads/master  
open: Y
  
status: n
  
nbr_patch_sets:
1  
current_patch_set_id:
1  
subject: Add two interfaces
for manipulate forwarding individually  
topic: portforwarding
-api  
last_sha1_merge_tested: NULL
  
mergeable: N
  
row_version:
2  
change_id:
1974  
1 row in set (0.00 sec)
  

  我们要做的是将其关闭,并把状态置为Abandon。(友情提醒,涉及重要业务,注意备份数据库)
  

mysql> update changes set open='N',status='A' where change_id=1974;  
Query OK,
1 row affected (0.05 sec)  
Rows matched:
1  Changed: 1  Warnings: 0  

  OK,现在neutron的提交已经恢复正常,我可以安心地去做其他事情了:)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-435494-1-1.html 上篇帖子: window上使用GIT的个人经验(入门级) 下篇帖子: XCode与Git的完美融合,不再依赖其它Git客户端
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表