]> source.dussan.org Git - jgit.git/commit
Speedup GC listing objects referenced from reflogs 68/199468/3
authorMatthias Sohn <matthias.sohn@sap.com>
Wed, 18 Jan 2023 16:39:19 +0000 (17:39 +0100)
committerMatthias Sohn <matthias.sohn@sap.com>
Mon, 23 Jan 2023 16:19:14 +0000 (17:19 +0100)
commitcd3fc7a2995c06cf2425f51758094e039c938559
tree1d7d96ea014697116a55976f2dbd97c7a35805d2
parent2011fe06d2cbc15159342b263704f95a39f937c4
Speedup GC listing objects referenced from reflogs

GC needs to get a ReflogReader for all existing refs to list all objects
referenced from reflogs. The existing Repository#getReflogReader method
accepts the ref name and then resolves the Ref to create a ReflogReader.
GC calling that for a huge number of Refs one by one is very slow. GC
first gets all Refs in bulk and then calls getReflogReader for each of
them.

Fix this by adding another getReflogReader method to Repository which
accepts a Ref directly.

This speeds up running JGit gc on a mirror clone of the Gerrit
repository from 15:36 min to 1:08 min. The repository used in this test
had 45k refs, 275k commits and 1.2m git objects.

Change-Id: I474897fdc6652923e35d461c065a29f54d9949f4
org.eclipse.jgit.http.server/.settings/.api_filters [deleted file]
org.eclipse.jgit/.settings/.api_filters
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java
org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java