From: Jeff King <peff@peff.net> To: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com> Cc: Stefan Beller <sbeller@google.com>, git@vger.kernel.org, Junio C Hamano <gitster@pobox.com> Subject: [PATCH 2/4] t5310: test delta reuse with bitmaps Date: Sat, 1 Sep 2018 03:48:13 -0400 [thread overview] Message-ID: <20180901074813.GB25461@sigill.intra.peff.net> (raw) In-Reply-To: <20180901074145.GA24023@sigill.intra.peff.net> Commit 6a1e32d532 (pack-objects: reuse on-disk deltas for thin "have" objects, 2018-08-21) taught pack-objects a new optimization trick. Since this wasn't meant to change user-visible behavior, but only produce smaller packs more quickly, testing focused on t/perf/p5311. However, since people don't run perf tests very often, we should make sure that the feature is exercised in the regular test suite. This patch does so. Signed-off-by: Jeff King <peff@peff.net> --- Side note: If we do squash patch 1 into the eariler series, that will invalidate the commit id mentioned in the commit message here. t/t5310-pack-bitmaps.sh | 93 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/t/t5310-pack-bitmaps.sh b/t/t5310-pack-bitmaps.sh index 557bd0d0c0..af38776054 100755 --- a/t/t5310-pack-bitmaps.sh +++ b/t/t5310-pack-bitmaps.sh @@ -342,4 +342,97 @@ test_expect_success 'truncated bitmap fails gracefully' ' test_i18ngrep corrupt stderr ' +# have_delta <obj> <expected_base> +# +# Note that because this relies on cat-file, it might find _any_ copy of an +# object in the repository. The caller is responsible for making sure +# there's only one (e.g., via "repack -ad", or having just fetched a copy). +have_delta () { + echo $2 >expect && + echo $1 | git cat-file --batch-check="%(deltabase)" >actual && + test_cmp expect actual +} + +# Create a state of history with these properties: +# +# - refs that allow a client to fetch some new history, while sharing some old +# history with the server; we use branches delta-reuse-old and +# delta-reuse-new here +# +# - the new history contains an object that is stored on the server as a delta +# against a base that is in the old history +# +# - the base object is not immediately reachable from the tip of the old +# history; finding it would involve digging down through history we know the +# other side has +# +# This should result in a state where fetching from old->new would not +# traditionally reuse the on-disk delta (because we'd have to dig to realize +# that the client has it), but we will do so if bitmaps can tell us cheaply +# that the other side has it. +test_expect_success 'set up thin delta-reuse parent' ' + # This first commit contains the buried base object. + test-tool genrandom delta 16384 >file && + git add file && + git commit -m "delta base" && + base=$(git rev-parse --verify HEAD:file) && + + # These intermediate commits bury the base back in history. + # This becomes the "old" state. + for i in 1 2 3 4 5 + do + echo $i >file && + git commit -am "intermediate $i" || return 1 + done && + git branch delta-reuse-old && + + # And now our new history has a delta against the buried base. Note + # that this must be smaller than the original file, since pack-objects + # prefers to create deltas from smaller objects to larger. + test-tool genrandom delta 16300 >file && + git commit -am "delta result" && + delta=$(git rev-parse --verify HEAD:file) && + git branch delta-reuse-new && + + # Repack with bitmaps and double check that we have the expected delta + # relationship. + git repack -adb && + have_delta $delta $base +' + +# Now we can sanity-check the non-bitmap behavior (that the server is not able +# to reuse the delta). This isn't strictly something we care about, so this +# test could be scrapped in the future. But it makes sure that the next test is +# actually triggering the feature we want. +# +# Note that our tools for working with on-the-wire "thin" packs are limited. So +# we actually perform the fetch, retain the resulting pack, and inspect the +# result. +test_expect_success 'fetch without bitmaps ignores delta against old base' ' + test_config pack.usebitmaps false && + test_when_finished "rm -rf client.git" && + git init --bare client.git && + ( + cd client.git && + git config transfer.unpackLimit 1 && + git fetch .. delta-reuse-old:delta-reuse-old && + git fetch .. delta-reuse-new:delta-reuse-new && + have_delta $delta $ZERO_OID + ) +' + +# And do the same for the bitmap case, where we do expect to find the delta. +test_expect_success 'fetch with bitmaps can reuse old base' ' + test_config pack.usebitmaps true && + test_when_finished "rm -rf client.git" && + git init --bare client.git && + ( + cd client.git && + git config transfer.unpackLimit 1 && + git fetch .. delta-reuse-old:delta-reuse-old && + git fetch .. delta-reuse-new:delta-reuse-new && + have_delta $delta $base + ) +' + test_done -- 2.19.0.rc1.549.g6ce4dc0f08
next prev parent reply other threads:[~2018-09-01 7:48 UTC|newest] Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-08-21 18:41 [PATCH] test-tool.h: include git-compat-util.h Jeff King 2018-08-21 19:03 ` Junio C Hamano 2018-08-21 19:06 ` [PATCH 1/6] t/perf: factor boilerplate out of test_perf Jeff King 2018-08-21 19:06 ` [PATCH 2/6] t/perf: factor out percent calculations Jeff King 2018-08-21 19:06 ` [PATCH 3/6] t/perf: add infrastructure for measuring sizes Jeff King 2018-08-22 13:40 ` Derrick Stolee 2018-08-22 15:31 ` Jeff King 2018-08-21 19:06 ` [PATCH 4/6] t/perf: add perf tests for fetches from a bitmapped server Jeff King 2018-08-21 19:07 ` [PATCH 5/6] pack-bitmap: save "have" bitmap from walk Jeff King 2018-08-21 19:47 ` Derrick Stolee 2018-08-21 19:54 ` Jeff King 2018-08-31 15:23 ` Ævar Arnfjörð Bjarmason 2018-08-31 22:55 ` Jeff King 2018-09-01 7:41 ` [PATCH 0/4] un-breaking pack-objects with bitmaps Jeff King 2018-09-01 7:44 ` [PATCH 1/4] bitmap_has_sha1_in_uninteresting(): drop BUG check Jeff King 2018-09-01 7:48 ` Jeff King [this message] 2018-09-01 8:03 ` [PATCH 2/4] t5310: test delta reuse with bitmaps Jeff King 2018-09-01 20:29 ` Ævar Arnfjörð Bjarmason 2018-09-01 22:46 ` Ben Peart 2018-09-02 5:51 ` Jeff King 2018-09-04 19:05 ` Stefan Beller 2018-09-04 19:45 ` Junio C Hamano 2018-09-04 20:02 ` Jeff King 2018-09-01 7:49 ` [PATCH 3/4] traverse_bitmap_commit_list(): don't free result Jeff King 2018-09-01 7:50 ` [PATCH 4/4] pack-bitmap: drop "loaded" flag Jeff King 2018-09-04 19:30 ` [PATCH 0/4] un-breaking pack-objects with bitmaps Stefan Beller 2018-09-04 20:03 ` Jeff King 2018-09-08 6:43 ` Ævar Arnfjörð Bjarmason 2018-09-10 16:53 ` Junio C Hamano 2018-09-10 18:48 ` Jeff King 2018-09-10 19:23 ` Junio C Hamano 2018-08-21 19:07 ` [PATCH 6/6] pack-objects: reuse on-disk deltas for thin "have" objects Jeff King 2018-08-21 19:43 ` Junio C Hamano 2018-08-21 19:50 ` Junio C Hamano 2018-08-21 20:07 ` Jeff King 2018-08-21 20:14 ` Jeff King 2018-08-21 20:52 ` Junio C Hamano 2018-08-21 21:30 ` Jeff King 2018-08-21 20:57 ` Junio C Hamano 2018-08-21 21:32 ` Jeff King 2018-08-23 0:43 ` [PATCH 0/9] trailer-parsing false positives Jeff King 2018-08-23 0:44 ` [PATCH 1/9] trailer: use size_t for string offsets Jeff King 2018-08-23 0:45 ` [PATCH 2/9] trailer: use size_t for iterating trailer list Jeff King 2018-08-23 0:46 ` [PATCH 3/9] trailer: pass process_trailer_opts to trailer_info_get() Jeff King 2018-08-23 0:48 ` [PATCH 4/9] interpret-trailers: tighten check for "---" patch boundary Jeff King 2018-08-23 0:49 ` [PATCH 5/9] interpret-trailers: allow suppressing "---" divider Jeff King 2018-08-23 0:50 ` [PATCH 6/9] pretty, ref-filter: format %(trailers) with no_divider option Jeff King 2018-08-23 0:50 ` [PATCH 7/9] sequencer: ignore "---" divider when parsing trailers Jeff King 2018-08-23 0:50 ` [PATCH 8/9] append_signoff: use size_t for string offsets Jeff King 2018-08-23 0:51 ` [PATCH 9/9] sequencer: handle ignore_footer when parsing trailers Jeff King 2018-08-23 18:30 ` [PATCH 0/9] trailer-parsing false positives Junio C Hamano 2018-08-24 7:26 ` Jeff King 2018-08-21 20:00 ` [PATCH 6/6] pack-objects: reuse on-disk deltas for thin "have" objects Jeff King
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20180901074813.GB25461@sigill.intra.peff.net \ --to=peff@peff.net \ --cc=avarab@gmail.com \ --cc=git@vger.kernel.org \ --cc=gitster@pobox.com \ --cc=sbeller@google.com \ --subject='Re: [PATCH 2/4] t5310: test delta reuse with bitmaps' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).