Ошибка проверки кода Gerrit MissingObjectException при отправке изменения

Я исследовал этот вопрос в течение нескольких дней без везения. Я нашел много сообщений, сообщающих о подобных проблемах, но не с обзором кода Gerrit.

Дело в том, что у нас есть репо, которое содержит много веток. Только одна ветка (dev) показывает эту проблему.

org.eclipse.jgit.errors.MissingObjectException: Missing unknown 5f3190e131541cec4ef7176262eaf4a03c4a4e6c
        at com.google.gerrit.server.git.MergeOp.integrateIntoHistory(MergeOp.java:497)
        at com.google.gerrit.server.git.MergeOp.merge(MergeOp.java:433)
        at com.google.gerrit.server.change.Submit.apply(Submit.java:225)
        at com.google.gerrit.server.change.Submit.apply(Submit.java:83)
        at com.google.gerrit.httpd.restapi.RestApiServlet.service(RestApiServlet.java:341)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:286)
        at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:276)
        at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:181)
        at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)

Чтобы воспроизвести ошибку, просто внесите изменения. Зафиксируйте и нажмите на gerrit refs/for/dev. Как только я нажимаю Submit в Gerrit, я получаю указанную выше ошибку.

Ревизии на сервере следующие:

  • Обзор кода Геррита (2.13.1)
  • Гит-2.1.0
  • Ява 1.7.0_71

Запуск git fsck на стороне сервера возвращает OK.

Запуск git show 5f3190e131541cec4ef7176262eaf4a03c4a4e6c возвращает

fatal: bad object 5f3190e131541cec4ef7176262eaf4a03c4a4e6c

Изменение предпочтения проекта в Gerrit с Merge if necessary на Rebase if necessary привело к этому исключению.

Caused by: com.google.gerrit.server.git.UpdateException: org.eclipse.jgit.errors.MissingObjectException: Missing unknown 5f3190e131541cec4ef7176262eaf4a03c4a4e6c
        at com.google.gerrit.server.git.BatchUpdate.executeUpdateRepo(BatchUpdate.java:673)
        at com.google.gerrit.server.git.BatchUpdate.execute(BatchUpdate.java:400)
        at com.google.gerrit.server.git.MergeOp.integrateIntoHistory(MergeOp.java:478)
        ... 43 more
Caused by: org.eclipse.jgit.errors.MissingObjectException: Missing unknown 5f3190e131541cec4ef7176262eaf4a03c4a4e6c
        at org.eclipse.jgit.internal.storage.file.WindowCursor.open(WindowCursor.java:158)
        at org.eclipse.jgit.lib.ObjectReader.open(ObjectReader.java:227)
        at org.eclipse.jgit.revwalk.RevWalk.parseAny(RevWalk.java:859)
        at org.eclipse.jgit.revwalk.RevWalk.parseCommit(RevWalk.java:772)
        at com.google.gerrit.server.git.CodeReviewCommit$CodeReviewRevWalk.parseCommit(CodeReviewCommit.java:110)
        at com.google.gerrit.server.git.SubmoduleOp.updateSubmodule(SubmoduleOp.java:461)
        at com.google.gerrit.server.git.SubmoduleOp.composeGitlinksCommit(SubmoduleOp.java:369)
        at com.google.gerrit.server.git.SubmoduleOp$GitlinkOp.updateRepo(SubmoduleOp.java:85)
        at com.google.gerrit.server.git.BatchUpdate.executeUpdateRepo(BatchUpdate.java:661)
        ... 45 more

Стоит отметить, что хэш 5f3190e131541cec4ef7176262eaf4a03c4a4e6c нигде не отображается на странице обзора кода Gerrit (только в сообщении об ошибке). Любая новая фиксация вызовет эту ошибку.


person ayakout    schedule 16.01.2017    source источник
comment
Отображается ли SHA 5f3190e131541cec4ef7176262eaf4a03c4a4e6c в поле Commit (между полями Commiter и Parent(s)) на экране изменений? Или там другой ША?   -  person Marcelo Ávila de Oliveira    schedule 16.01.2017
comment
Нет, это нигде не отображается на странице gerrit. Только в сообщении об ошибке. Я также обновил пост с этим комментарием.   -  person ayakout    schedule 16.01.2017


Ответы (2)


Поиск в Gerrit Bug Tracker покажет вам эта проблема

Был ли толчок одним разработчиком в этой ветке?

Вы можете проверить это, перейдя к установке папки gerrit, затем папку git вашего проекта и посмотреть историю. Я подозреваю, что один разработчик заставил нажать 5f3190e131541cec4ef7176262eaf4a03c4a4e6c

person Flows    schedule 17.01.2017
comment
Я создал новый проект Gerrit project-1 и скопировал содержимое проблемного project.git в project-1.git. После этого я проверил ветку dev и смог внести изменения и объединить их без проблем. Проблема, о которой вы упомянули, похоже, сообщает об очень похожей проблеме, разница в том, что в моем проекте нет подмодулей. - person ayakout; 17.01.2017

Индекс Геррита, по-видимому, является причиной этой ошибки. Индекс указывает на несуществующий объект, даже перестроение индекса не помогло решить эту проблему.

Поиск всех объектов git не нашел совпадений. Я использовал метод, описанный здесь.

Я думаю, что моя проблема связана с этим отчетом об ошибке здесь

Возможные решения для рассмотрения — создать новую ветку, поскольку эта проблема наблюдалась только в определенной ветке. Я бы также пометил и удалил проблемную ветку, так как ее больше нельзя использовать.

Удаление проекта в Gerrit и его повторное создание, кажется, работает (если это легко сделать), но плагин удаления проекта имеет некоторые ограничения в отношении подписки на подмодули.

Выполнение ручного удаления repo.git на диске с последующей очисткой кеша Gerrit действительно приведет к удалению проекта, однако Gerrit не позволит создать другой проект с тем же именем.

person ayakout    schedule 24.01.2017