Class DfsPackCompactor
- java.lang.Object
-
- org.eclipse.jgit.internal.storage.dfs.DfsPackCompactor
-
public class DfsPackCompactor extends java.lang.Object
Combine several pack files into one pack.The compactor combines several pack files together by including all objects contained in each pack file into the same output pack. If an object appears multiple times, it is only included once in the result. Because the new pack is constructed by enumerating the indexes of the source packs, it is quicker than doing a full repack of the repository, however the result is not nearly as space efficient as new delta compression is disabled.
This method is suitable for quickly combining several packs together after receiving a number of small fetch or push operations into a repository, allowing the system to maintain reasonable read performance without expending a lot of time repacking the entire repository.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
DfsPackCompactor.ObjectIdWithOffset
-
Field Summary
Fields Modifier and Type Field Description private RevFlag
added
private int
autoAddSize
private java.util.List<ObjectIdSet>
exclude
private RevFlag
isBase
private PackStatistics
newStats
private DfsPackDescription
outDesc
private ReftableConfig
reftableConfig
private DfsRepository
repo
private RevWalk
rw
private java.util.List<DfsPackFile>
srcPacks
private java.util.List<DfsReftable>
srcReftables
-
Constructor Summary
Constructors Constructor Description DfsPackCompactor(DfsRepository repository)
Initialize a pack compactor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description DfsPackCompactor
add(DfsPackFile pack)
Add a pack to be compacted.DfsPackCompactor
add(DfsReftable table)
Add a reftable to be compacted.private void
addObjectsToPack(PackWriter pw, DfsReader ctx, ProgressMonitor pm)
DfsPackCompactor
autoAdd()
Automatically select pack and reftables to be included, and add them.void
compact(ProgressMonitor pm)
Compact the pack files together.private void
compactPacks(DfsReader ctx, ProgressMonitor pm)
private void
compactReftables(DfsReader ctx)
(package private) static ReftableConfig
configureReftable(ReftableConfig cfg, DfsOutputStream out)
private long
estimatePackSize()
DfsPackCompactor
exclude(DfsPackFile pack)
Exclude objects from the compacted pack.DfsPackCompactor
exclude(ObjectIdSet set)
Exclude objects from the compacted pack.java.util.List<DfsPackDescription>
getNewPacks()
Get new packs created by this compaction.java.util.List<PackStatistics>
getNewPackStatistics()
Get statistics corresponding to thegetNewPacks()
.java.util.Collection<DfsPackDescription>
getSourcePacks()
Get all of the source packs that fed into this compaction.private void
initOutDesc(DfsObjDatabase objdb)
DfsPackCompactor
setReftableConfig(ReftableConfig cfg)
Set configuration to write a reftable.private java.util.List<DfsPackCompactor.ObjectIdWithOffset>
toInclude(DfsPackFile src, DfsReader ctx)
private java.util.Collection<DfsPackDescription>
toPrune()
private static void
writeIndex(DfsObjDatabase objdb, DfsPackDescription pack, PackWriter pw)
private static void
writePack(DfsObjDatabase objdb, DfsPackDescription pack, PackWriter pw, ProgressMonitor pm)
-
-
-
Field Detail
-
repo
private final DfsRepository repo
-
srcPacks
private final java.util.List<DfsPackFile> srcPacks
-
srcReftables
private final java.util.List<DfsReftable> srcReftables
-
exclude
private final java.util.List<ObjectIdSet> exclude
-
newStats
private PackStatistics newStats
-
outDesc
private DfsPackDescription outDesc
-
autoAddSize
private int autoAddSize
-
reftableConfig
private ReftableConfig reftableConfig
-
rw
private RevWalk rw
-
added
private RevFlag added
-
isBase
private RevFlag isBase
-
-
Constructor Detail
-
DfsPackCompactor
public DfsPackCompactor(DfsRepository repository)
Initialize a pack compactor.- Parameters:
repository
- repository objects to be packed will be read from.
-
-
Method Detail
-
setReftableConfig
public DfsPackCompactor setReftableConfig(ReftableConfig cfg)
Set configuration to write a reftable.- Parameters:
cfg
- configuration to write a reftable. Reftable compacting is disabled (default) whencfg
isnull
.- Returns:
this
-
add
public DfsPackCompactor add(DfsPackFile pack)
Add a pack to be compacted.All of the objects in this pack will be copied into the resulting pack. The resulting pack will order objects according to the source pack's own description ordering (which is based on creation date), and then by the order the objects appear in the source pack.
- Parameters:
pack
- a pack to combine into the resulting pack.- Returns:
this
-
add
public DfsPackCompactor add(DfsReftable table)
Add a reftable to be compacted.- Parameters:
table
- a reftable to combine.- Returns:
this
-
autoAdd
public DfsPackCompactor autoAdd() throws java.io.IOException
Automatically select pack and reftables to be included, and add them.Packs are selected based on size, smaller packs get included while bigger ones are omitted.
- Returns:
this
- Throws:
java.io.IOException
- existing packs cannot be read.
-
exclude
public DfsPackCompactor exclude(ObjectIdSet set)
Exclude objects from the compacted pack.- Parameters:
set
- objects to not include.- Returns:
this
.
-
exclude
public DfsPackCompactor exclude(DfsPackFile pack) throws java.io.IOException
Exclude objects from the compacted pack.- Parameters:
pack
- objects to not include.- Returns:
this
.- Throws:
java.io.IOException
- pack index cannot be loaded.
-
compact
public void compact(ProgressMonitor pm) throws java.io.IOException
Compact the pack files together.- Parameters:
pm
- progress monitor to receive updates on as packing may take a while, depending on the size of the repository.- Throws:
java.io.IOException
- the packs cannot be compacted.
-
compactPacks
private void compactPacks(DfsReader ctx, ProgressMonitor pm) throws java.io.IOException, IncorrectObjectTypeException
- Throws:
java.io.IOException
IncorrectObjectTypeException
-
estimatePackSize
private long estimatePackSize()
-
compactReftables
private void compactReftables(DfsReader ctx) throws java.io.IOException
- Throws:
java.io.IOException
-
initOutDesc
private void initOutDesc(DfsObjDatabase objdb) throws java.io.IOException
- Throws:
java.io.IOException
-
getSourcePacks
public java.util.Collection<DfsPackDescription> getSourcePacks()
Get all of the source packs that fed into this compaction.- Returns:
- all of the source packs that fed into this compaction.
-
getNewPacks
public java.util.List<DfsPackDescription> getNewPacks()
Get new packs created by this compaction.- Returns:
- new packs created by this compaction.
-
getNewPackStatistics
public java.util.List<PackStatistics> getNewPackStatistics()
Get statistics corresponding to thegetNewPacks()
. May be null if statistics are not available.- Returns:
- statistics corresponding to the
getNewPacks()
.
-
toPrune
private java.util.Collection<DfsPackDescription> toPrune()
-
addObjectsToPack
private void addObjectsToPack(PackWriter pw, DfsReader ctx, ProgressMonitor pm) throws java.io.IOException, IncorrectObjectTypeException
- Throws:
java.io.IOException
IncorrectObjectTypeException
-
toInclude
private java.util.List<DfsPackCompactor.ObjectIdWithOffset> toInclude(DfsPackFile src, DfsReader ctx) throws java.io.IOException
- Throws:
java.io.IOException
-
writePack
private static void writePack(DfsObjDatabase objdb, DfsPackDescription pack, PackWriter pw, ProgressMonitor pm) throws java.io.IOException
- Throws:
java.io.IOException
-
writeIndex
private static void writeIndex(DfsObjDatabase objdb, DfsPackDescription pack, PackWriter pw) throws java.io.IOException
- Throws:
java.io.IOException
-
configureReftable
static ReftableConfig configureReftable(ReftableConfig cfg, DfsOutputStream out)
-
-