Browse Source
Expose the following bitmap selection parameters via PackConfig: "bitmapContiguousCommitCount", "bitmapRecentCommitCount", "bitmapRecentCommitSpan", "bitmapDistantCommitSpan", "bitmapExcessiveBranchCount", and "bitmapInactiveBranchAge". The value of bitmapContiguousCommitCount, whereby bitmaps are created for the most recent N commits in a branch, has never been verified. If experiments show that they are not valuable, then we can simplify the implementation so that there is only a concept of recent and distant commit history (defined by "bitmapRecentCommitCount"), and the only controls we need are "bitmapRecentCommitSpan" and "bitmapDistantCommitSpan". Change-Id: I288bf3f97d6fbfdfcd5dde2699eff433a7307fb9 Signed-off-by: Terry Parker <tparker@google.com>stable-4.2
Terry Parker
9 years ago
4 changed files with 419 additions and 16 deletions
@ -0,0 +1,136 @@
|
||||
package org.eclipse.jgit.internal.storage.pack; |
||||
|
||||
import static org.eclipse.jgit.storage.pack.PackConfig.DEFAULT_BITMAP_DISTANT_COMMIT_SPAN; |
||||
import static org.eclipse.jgit.storage.pack.PackConfig.DEFAULT_BITMAP_RECENT_COMMIT_COUNT; |
||||
import static org.eclipse.jgit.storage.pack.PackConfig.DEFAULT_BITMAP_RECENT_COMMIT_SPAN; |
||||
import static org.junit.Assert.assertEquals; |
||||
|
||||
import java.io.IOException; |
||||
import java.util.Collection; |
||||
import java.util.Collections; |
||||
import java.util.List; |
||||
import java.util.Set; |
||||
|
||||
import org.eclipse.jgit.errors.IncorrectObjectTypeException; |
||||
import org.eclipse.jgit.errors.MissingObjectException; |
||||
import org.eclipse.jgit.internal.storage.file.PackBitmapIndexBuilder; |
||||
import org.eclipse.jgit.lib.AbbreviatedObjectId; |
||||
import org.eclipse.jgit.lib.AnyObjectId; |
||||
import org.eclipse.jgit.lib.ObjectId; |
||||
import org.eclipse.jgit.lib.ObjectLoader; |
||||
import org.eclipse.jgit.lib.ObjectReader; |
||||
import org.eclipse.jgit.storage.pack.PackConfig; |
||||
import org.junit.Test; |
||||
|
||||
/** Tests for the {@link PackWriterBitmapPreparer}. */ |
||||
public class PackWriterBitmapPreparerTest { |
||||
private static class StubObjectReader extends ObjectReader { |
||||
@Override |
||||
public ObjectReader newReader() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public Collection<ObjectId> resolve(AbbreviatedObjectId id) |
||||
throws IOException { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public ObjectLoader open(AnyObjectId objectId, int typeHint) |
||||
throws MissingObjectException, IncorrectObjectTypeException, |
||||
IOException { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public Set<ObjectId> getShallowCommits() throws IOException { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public void close() { |
||||
// stub
|
||||
} |
||||
} |
||||
|
||||
@Test |
||||
public void testNextSelectionDistanceForActiveBranch() throws Exception { |
||||
PackWriterBitmapPreparer preparer = newPeparer( |
||||
DEFAULT_BITMAP_RECENT_COMMIT_COUNT, // 20000
|
||||
DEFAULT_BITMAP_RECENT_COMMIT_SPAN, // 100
|
||||
DEFAULT_BITMAP_DISTANT_COMMIT_SPAN); // 5000
|
||||
int[][] distancesAndSpans = { { 0, 100 }, { 100, 100 }, { 10000, 100 }, |
||||
{ 20000, 100 }, { 20100, 100 }, { 20102, 102 }, { 20200, 200 }, |
||||
{ 22200, 2200 }, { 24999, 4999 }, { 25000, 5000 }, |
||||
{ 50000, 5000 }, { 1000000, 5000 }, }; |
||||
|
||||
for (int[] pair : distancesAndSpans) { |
||||
assertEquals(pair[1], preparer.nextSpan(pair[0])); |
||||
} |
||||
} |
||||
|
||||
@Test |
||||
public void testNextSelectionDistanceWithFewerRecentCommits() |
||||
throws Exception { |
||||
PackWriterBitmapPreparer preparer = newPeparer(1000, |
||||
DEFAULT_BITMAP_RECENT_COMMIT_SPAN, // 100
|
||||
DEFAULT_BITMAP_DISTANT_COMMIT_SPAN); // 5000
|
||||
int[][] distancesAndSpans = { { 0, 100 }, { 100, 100 }, { 1000, 100 }, |
||||
{ 1100, 100 }, { 1111, 111 }, { 2000, 1000 }, { 5999, 4999 }, |
||||
{ 6000, 5000 }, { 10000, 5000 }, { 50000, 5000 }, |
||||
{ 1000000, 5000 } }; |
||||
|
||||
for (int[] pair : distancesAndSpans) { |
||||
assertEquals(pair[1], preparer.nextSpan(pair[0])); |
||||
} |
||||
} |
||||
|
||||
@Test |
||||
public void testNextSelectionDistanceWithSmallerRecentSpan() |
||||
throws Exception { |
||||
PackWriterBitmapPreparer preparer = newPeparer( |
||||
DEFAULT_BITMAP_RECENT_COMMIT_COUNT, // 20000
|
||||
10, // recent span
|
||||
DEFAULT_BITMAP_DISTANT_COMMIT_SPAN); // 5000
|
||||
int[][] distancesAndSpans = { { 0, 10 }, { 100, 10 }, { 10000, 10 }, |
||||
{ 20000, 10 }, { 20010, 10 }, { 20012, 12 }, { 20050, 50 }, |
||||
{ 20200, 200 }, { 22200, 2200 }, { 24999, 4999 }, |
||||
{ 25000, 5000 }, { 50000, 5000 }, { 1000000, 5000 } }; |
||||
|
||||
for (int[] pair : distancesAndSpans) { |
||||
assertEquals(pair[1], preparer.nextSpan(pair[0])); |
||||
} |
||||
} |
||||
|
||||
@Test |
||||
public void testNextSelectionDistanceWithSmallerDistantSpan() |
||||
throws Exception { |
||||
PackWriterBitmapPreparer preparer = newPeparer( |
||||
DEFAULT_BITMAP_RECENT_COMMIT_COUNT, // 20000
|
||||
DEFAULT_BITMAP_RECENT_COMMIT_SPAN, // 100
|
||||
1000); |
||||
int[][] distancesAndSpans = { { 0, 100 }, { 100, 100 }, { 10000, 100 }, |
||||
{ 20000, 100 }, { 20100, 100 }, { 20102, 102 }, { 20200, 200 }, |
||||
{ 20999, 999 }, { 21000, 1000 }, { 22000, 1000 }, |
||||
{ 25000, 1000 }, { 50000, 1000 }, { 1000000, 1000 } }; |
||||
|
||||
for (int[] pair : distancesAndSpans) { |
||||
assertEquals(pair[1], preparer.nextSpan(pair[0])); |
||||
} |
||||
} |
||||
|
||||
private PackWriterBitmapPreparer newPeparer(int recentCount, int recentSpan, |
||||
int distantSpan) throws IOException { |
||||
List<ObjectToPack> objects = Collections.emptyList(); |
||||
Set<ObjectId> wants = Collections.emptySet(); |
||||
PackConfig config = new PackConfig(); |
||||
config.setBitmapRecentCommitCount(recentCount); |
||||
config.setBitmapRecentCommitSpan(recentSpan); |
||||
config.setBitmapDistantCommitSpan(distantSpan); |
||||
PackBitmapIndexBuilder indexBuilder = new PackBitmapIndexBuilder( |
||||
objects); |
||||
return new PackWriterBitmapPreparer(new StubObjectReader(), |
||||
indexBuilder, null, wants, config); |
||||
} |
||||
} |
Loading…
Reference in new issue