So we're running 2.6.1 (we'll be upgrading hopefully to 2.8.4 soon) with a MySQL backend.
We have a setup with 4 mirrors. Call them "A", "B", "C" and "D". Mirrors "A" and "B" have their own git storage. Mirrors "C" and "D" NFS-mount mirror "A"s storage. All 4 run the GerritCodeReview process in slave mode and all four lock out pushes (allow pulls/clones only).
[2014-05-05 09:06:25,576] ERROR com.google.gerrit.sshd.BaseCommand : Internal server error (user <USER1> account 1001120) during git-upload-pack '/<PROJECT1>'
org.eclipse.jgit.transport.UploadPackInternalServerErrorException
at org.eclipse.jgit.transport.UploadPack.sendPack(UploadPack.java:1041)
at org.eclipse.jgit.transport.UploadPack.service(UploadPack.java:612)
at org.eclipse.jgit.transport.UploadPack.upload(UploadPack.java:521)
at com.google.gerrit.sshd.commands.Upload.runImpl(Upload.java:57)
at com.google.gerrit.sshd.AbstractGitCommand.service(AbstractGitCommand.java:101)
at com.google.gerrit.sshd.AbstractGitCommand.access$000(AbstractGitCommand.java:32)
at com.google.gerrit.sshd.AbstractGitCommand$1.run(AbstractGitCommand.java:70)
at com.google.gerrit.sshd.BaseCommand$TaskThunk.run(BaseCommand.java:429)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:337)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: org.eclipse.jgit.errors.MissingObjectException: Missing tree 5c96af9445e1b4c7ba1814b21ef26487f90b0bca
at org.eclipse.jgit.internal.storage.file.WindowCursor.open(WindowCursor.java:149)
at org.eclipse.jgit.revwalk.ObjectWalk.markTreeUninteresting(ObjectWalk.java:673)
at org.eclipse.jgit.revwalk.ObjectWalk.next(ObjectWalk.java:268)
at org.eclipse.jgit.internal.storage.pack.PackWriter.findObjectsToPack(PackWriter.java:1753)
at org.eclipse.jgit.internal.storage.pack.PackWriter.preparePack(PackWriter.java:797)
at org.eclipse.jgit.transport.UploadPack.sendPack(UploadPack.java:1150)
at org.eclipse.jgit.transport.UploadPack.sendPack(UploadPack.java:1035)
... 15 more
This is followed some time later by this exception signature:
[2014-05-05 09:07:08,719] WARN com.google.gerrit.server.git.TagSet : Error on refs/heads/<BRANCH1> of <PROJECT1>
org.eclipse.jgit.errors.MissingObjectException: Missing unknown 82519f1a3fc974908b3a87b2fe7e4beb929d2924
at org.eclipse.jgit.internal.storage.file.WindowCursor.open(WindowCursor.java:148)
at org.eclipse.jgit.lib.ObjectReader.open(ObjectReader.java:229)
at org.eclipse.jgit.revwalk.RevWalk.parseAny(RevWalk.java:809)
at org.eclipse.jgit.revwalk.RevWalk.parseCommit(RevWalk.java:722)
at com.google.gerrit.server.git.TagSet.addRef(TagSet.java:318)
at com.google.gerrit.server.git.TagSet.build(TagSet.java:172)
at com.google.gerrit.server.git.TagSetHolder.rebuild(TagSetHolder.java:88)
at com.google.gerrit.server.git.TagSetHolder.matcher(TagSetHolder.java:54)
at com.google.gerrit.server.git.VisibleRefFilter.filter(VisibleRefFilter.java:108)
at com.google.gerrit.server.git.VisibleRefFilter.filter(VisibleRefFilter.java:129)
at com.google.gerrit.server.git.VisibleRefFilter.getAdvertisedRefs(VisibleRefFilter.java:125)
at org.eclipse.jgit.transport.AbstractAdvertiseRefsHook.advertiseRefs(AbstractAdvertiseRefsHook.java:62)
at org.eclipse.jgit.transport.UploadPack.sendAdvertisedRefs(UploadPack.java:669)
at org.eclipse.jgit.transport.UploadPack.service(UploadPack.java:554)
at org.eclipse.jgit.transport.UploadPack.upload(UploadPack.java:521)
at com.google.gerrit.sshd.commands.Upload.runImpl(Upload.java:57)
at com.google.gerrit.sshd.AbstractGitCommand.service(AbstractGitCommand.java:101)
at com.google.gerrit.sshd.AbstractGitCommand.access$000(AbstractGitCommand.java:32)
at com.google.gerrit.sshd.AbstractGitCommand$1.run(AbstractGitCommand.java:70)
at com.google.gerrit.sshd.BaseCommand$TaskThunk.run(BaseCommand.java:429)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:337)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
[2014-05-05 09:07:08,720] WARN com.google.gerrit.server.git.TagSet : Error on refs/heads/<BRANCH1> of <PROJECT1>
org.eclipse.jgit.errors.MissingObjectException: Missing unknown ffb873887bcb264db66f02e7c600d405acd5cf57
at org.eclipse.jgit.internal.storage.file.WindowCursor.open(WindowCursor.java:148)
at org.eclipse.jgit.lib.ObjectReader.open(ObjectReader.java:229)
at org.eclipse.jgit.revwalk.RevWalk.parseAny(RevWalk.java:809)
at org.eclipse.jgit.revwalk.RevWalk.parseCommit(RevWalk.java:722)
at com.google.gerrit.server.git.TagSet.addRef(TagSet.java:318)
at com.google.gerrit.server.git.TagSet.build(TagSet.java:172)
at com.google.gerrit.server.git.TagSetHolder.rebuild(TagSetHolder.java:88)
at com.google.gerrit.server.git.TagSetHolder.matcher(TagSetHolder.java:54)
at com.google.gerrit.server.git.VisibleRefFilter.filter(VisibleRefFilter.java:108)
at com.google.gerrit.server.git.VisibleRefFilter.filter(VisibleRefFilter.java:129)
at com.google.gerrit.server.git.VisibleRefFilter.getAdvertisedRefs(VisibleRefFilter.java:125)
at org.eclipse.jgit.transport.AbstractAdvertiseRefsHook.advertiseRefs(AbstractAdvertiseRefsHook.java:62)
at org.eclipse.jgit.transport.UploadPack.sendAdvertisedRefs(UploadPack.java:669)
at org.eclipse.jgit.transport.UploadPack.service(UploadPack.java:554)
at org.eclipse.jgit.transport.UploadPack.upload(UploadPack.java:521)
at com.google.gerrit.sshd.commands.Upload.runImpl(Upload.java:57)
at com.google.gerrit.sshd.AbstractGitCommand.service(AbstractGitCommand.java:101)
at com.google.gerrit.sshd.AbstractGitCommand.access$000(AbstractGitCommand.java:32)
at com.google.gerrit.sshd.AbstractGitCommand$1.run(AbstractGitCommand.java:70)
at com.google.gerrit.sshd.BaseCommand$TaskThunk.run(BaseCommand.java:429)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:337)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Once this starts the same exception pattern starts occurring at a very high rate. Yesterday we saw in excess of 200,000 of these in 16 hours of operation.
When this happens the projects start to disappear from the project listing on that mirror. And the problem starts to spread. When we found it yesterday we were up to 178 missing projects out of several thousand.
When we see it happen only 2 things fix it:
1) A git gc (we tried several other commands - none of which seemed to help - including doing things like "find . -exec cat {} \; > /dev/null", "git fsck", "git repack" from inside the git). Also a "gerrit flush-caches" followed by a "gerrit ls-projects" also did nothing.
2) A server process restart.
The git gc will only fix the one git whereas the server process restart seems to take care of everything at once.
The other two mirrors "A" and "B" that host their own storage are not affected.
There appears to be no correlation to server load / thread load on the Gerrit process as all four mirrors had a light to moderate load at the time the problem started.
I suspect some kind of NFS related stale file kind of problem. But I am not an expert on NFS and have no way to prove the assertion. It would seem to be corroborated by other posts related to this error.
In this post Shawn suggests that a similar error could be caused by: