From: Derrick Stolee <derrickstolee@github.com>
To: Junio C Hamano <gitster@pobox.com>,
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, me@ttaylorr.com, vdye@github.com,
avarab@gmail.com, steadmon@google.com, chooglen@google.com
Subject: Re: [PATCH v3 02/11] bundle: verify using check_connected()
Date: Tue, 31 Jan 2023 14:31:08 -0500 [thread overview]
Message-ID: <73c1d863-036b-81bb-50d3-2a084c2c2fb5@github.com> (raw)
In-Reply-To: <xmqqr0vay5cz.fsf@gitster.g>
On 1/31/2023 12:35 PM, Junio C Hamano wrote:
> "Derrick Stolee via GitGitGadget" <gitgitgadget@gmail.com> writes:
>> + /* TODO: preserve this verbose language. */
>
> I am lost -- aren't we preserving the BUNDLE_VERBOSE code below?
Sorry, I put this in so I wouldn't forget to test that the
verbose message sticks, but I did forget to remove it.
>> diff --git a/t/t6020-bundle-misc.sh b/t/t6020-bundle-misc.sh
>> index 38dbbf89155..7d40994991e 100755
>> --- a/t/t6020-bundle-misc.sh
>> +++ b/t/t6020-bundle-misc.sh
>> @@ -595,14 +595,14 @@ test_expect_success 'verify catches unreachable, broken prerequisites' '
>> # Verify should fail
>> test_must_fail git bundle verify \
>> ../clone-from/tip.bundle 2>err &&
>> - grep "Could not read $BAD_OID" err &&
>> - grep "Failed to traverse parents of commit $TIP_OID" err &&
>> + grep "some prerequisite commits .* are not connected" err &&
>> + test_line_count = 1 err &&
>>
>> # Unbundling should fail
>> test_must_fail git bundle unbundle \
>> ../clone-from/tip.bundle 2>err &&
>> - grep "Could not read $BAD_OID" err &&
>> - grep "Failed to traverse parents of commit $TIP_OID" err
>> + grep "some prerequisite commits .* are not connected" err &&
>> + test_line_count = 1 err
>> )
>> '
>
> Especially with the new test added in the previous step, we know we
> are not trading correctness off. Excellent.
>
> I wonder how much the performance hit does this version incur over
> the "not safe at all" version and over the "use custom and
> stricter-than-needed" version, by the way?
I was able to simulate this in an extreme situation by taking a clone
of the normal Git fork, creating a ref at every first parent, then
creating a bundle of the difference between git/git and gitster/git.
Finally, I compared the performance of 'git bundle verify' on Git
compiled before this change and after this change:
Benchmark 1: old
Time (mean ± σ): 324.7 ms ± 7.5 ms [User: 228.0 ms, System: 95.7 ms]
Range (min … max): 315.3 ms … 338.0 ms 10 runs
Benchmark 2: new
Time (mean ± σ): 331.2 ms ± 20.2 ms [User: 230.6 ms, System: 99.7 ms]
Range (min … max): 302.8 ms … 360.2 ms 10 runs
Summary
'old' ran
1.02 ± 0.07 times faster than 'new'
So, there is a performance difference in the two situations, but it
is very slight, in what I can detect.
Of course, there is the case where the behavior differs because of
the more permissible behavior, but I expect the old algorithm to be
slower than the new case, because check_connected() can terminate
with success (due to seeing all the prerequisite commits) faster
than the old walk can terminate with failure (due to walking all
reachable commits).
Thanks,
-Stolee
next prev parent reply other threads:[~2023-01-31 19:31 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-06 20:36 [PATCH 0/8] Bundle URIs V: creationToken heuristic for incremental fetches Derrick Stolee via GitGitGadget
2023-01-06 20:36 ` [PATCH 1/8] t5558: add tests for creationToken heuristic Derrick Stolee via GitGitGadget
2023-01-17 18:17 ` Victoria Dye
2023-01-17 21:00 ` Derrick Stolee
2023-01-06 20:36 ` [PATCH 2/8] bundle-uri: parse bundle.heuristic=creationToken Derrick Stolee via GitGitGadget
2023-01-09 2:38 ` Junio C Hamano
2023-01-09 14:20 ` Derrick Stolee
2023-01-17 19:13 ` Victoria Dye
2023-01-06 20:36 ` [PATCH 3/8] bundle-uri: parse bundle.<id>.creationToken values Derrick Stolee via GitGitGadget
2023-01-09 3:08 ` Junio C Hamano
2023-01-09 14:41 ` Derrick Stolee
2023-01-17 19:24 ` Victoria Dye
2023-01-06 20:36 ` [PATCH 4/8] bundle-uri: download in creationToken order Derrick Stolee via GitGitGadget
2023-01-09 3:22 ` Junio C Hamano
2023-01-09 14:58 ` Derrick Stolee
2023-01-19 18:32 ` Victoria Dye
2023-01-20 14:56 ` Derrick Stolee
2023-01-06 20:36 ` [PATCH 5/8] clone: set fetch.bundleURI if appropriate Derrick Stolee via GitGitGadget
2023-01-19 19:42 ` Victoria Dye
2023-01-20 15:42 ` Derrick Stolee
2023-01-06 20:36 ` [PATCH 6/8] bundle-uri: drop bundle.flag from design doc Derrick Stolee via GitGitGadget
2023-01-19 19:44 ` Victoria Dye
2023-01-06 20:36 ` [PATCH 7/8] fetch: fetch from an external bundle URI Derrick Stolee via GitGitGadget
2023-01-19 20:34 ` Victoria Dye
2023-01-20 15:47 ` Derrick Stolee
2023-01-06 20:36 ` [PATCH 8/8] bundle-uri: store fetch.bundleCreationToken Derrick Stolee via GitGitGadget
2023-01-19 22:24 ` Victoria Dye
2023-01-20 15:53 ` Derrick Stolee
2023-01-23 15:21 ` [PATCH v2 00/10] Bundle URIs V: creationToken heuristic for incremental fetches Derrick Stolee via GitGitGadget
2023-01-23 15:21 ` [PATCH v2 01/10] bundle: optionally skip reachability walk Derrick Stolee via GitGitGadget
2023-01-23 18:03 ` Junio C Hamano
2023-01-23 18:24 ` Derrick Stolee
2023-01-23 20:13 ` Junio C Hamano
2023-01-23 22:30 ` Junio C Hamano
2023-01-24 12:27 ` Derrick Stolee
2023-01-24 14:14 ` [PATCH v2.5 01/11] bundle: test unbundling with incomplete history Derrick Stolee
2023-01-24 17:16 ` Junio C Hamano
2023-01-24 14:16 ` [PATCH v2.5 02/11] bundle: verify using connected() Derrick Stolee
2023-01-24 17:33 ` Junio C Hamano
2023-01-24 18:46 ` Derrick Stolee
2023-01-24 20:41 ` Junio C Hamano
2023-01-24 15:22 ` [PATCH v2 01/10] bundle: optionally skip reachability walk Junio C Hamano
2023-01-23 21:08 ` Junio C Hamano
2023-01-23 15:21 ` [PATCH v2 02/10] t5558: add tests for creationToken heuristic Derrick Stolee via GitGitGadget
2023-01-27 19:15 ` Victoria Dye
2023-01-23 15:21 ` [PATCH v2 03/10] bundle-uri: parse bundle.heuristic=creationToken Derrick Stolee via GitGitGadget
2023-01-23 15:21 ` [PATCH v2 04/10] bundle-uri: parse bundle.<id>.creationToken values Derrick Stolee via GitGitGadget
2023-01-23 15:21 ` [PATCH v2 05/10] bundle-uri: download in creationToken order Derrick Stolee via GitGitGadget
2023-01-27 19:17 ` Victoria Dye
2023-01-27 19:32 ` Junio C Hamano
2023-01-30 18:43 ` Derrick Stolee
2023-01-30 19:02 ` Junio C Hamano
2023-01-30 19:12 ` Derrick Stolee
2023-01-23 15:21 ` [PATCH v2 06/10] clone: set fetch.bundleURI if appropriate Derrick Stolee via GitGitGadget
2023-01-23 15:21 ` [PATCH v2 07/10] bundle-uri: drop bundle.flag from design doc Derrick Stolee via GitGitGadget
2023-01-23 15:21 ` [PATCH v2 08/10] fetch: fetch from an external bundle URI Derrick Stolee via GitGitGadget
2023-01-27 19:18 ` Victoria Dye
2023-01-23 15:21 ` [PATCH v2 09/10] bundle-uri: store fetch.bundleCreationToken Derrick Stolee via GitGitGadget
2023-01-23 15:21 ` [PATCH v2 10/10] bundle-uri: test missing bundles with heuristic Derrick Stolee via GitGitGadget
2023-01-27 19:21 ` Victoria Dye
2023-01-30 18:47 ` Derrick Stolee
2023-01-27 19:28 ` [PATCH v2 00/10] Bundle URIs V: creationToken heuristic for incremental fetches Victoria Dye
2023-01-31 13:29 ` [PATCH v3 00/11] " Derrick Stolee via GitGitGadget
2023-01-31 13:29 ` [PATCH v3 01/11] bundle: test unbundling with incomplete history Derrick Stolee via GitGitGadget
2023-01-31 13:29 ` [PATCH v3 02/11] bundle: verify using check_connected() Derrick Stolee via GitGitGadget
2023-01-31 17:35 ` Junio C Hamano
2023-01-31 19:31 ` Derrick Stolee [this message]
2023-01-31 19:36 ` Junio C Hamano
2023-01-31 13:29 ` [PATCH v3 03/11] t5558: add tests for creationToken heuristic Derrick Stolee via GitGitGadget
2023-01-31 13:29 ` [PATCH v3 04/11] bundle-uri: parse bundle.heuristic=creationToken Derrick Stolee via GitGitGadget
2023-01-31 13:29 ` [PATCH v3 05/11] bundle-uri: parse bundle.<id>.creationToken values Derrick Stolee via GitGitGadget
2023-01-31 21:22 ` Junio C Hamano
2023-01-31 13:29 ` [PATCH v3 06/11] bundle-uri: download in creationToken order Derrick Stolee via GitGitGadget
2023-01-31 13:29 ` [PATCH v3 07/11] clone: set fetch.bundleURI if appropriate Derrick Stolee via GitGitGadget
2023-01-31 13:29 ` [PATCH v3 08/11] bundle-uri: drop bundle.flag from design doc Derrick Stolee via GitGitGadget
2023-01-31 13:29 ` [PATCH v3 09/11] fetch: fetch from an external bundle URI Derrick Stolee via GitGitGadget
2023-01-31 13:29 ` [PATCH v3 10/11] bundle-uri: store fetch.bundleCreationToken Derrick Stolee via GitGitGadget
2023-01-31 13:29 ` [PATCH v3 11/11] bundle-uri: test missing bundles with heuristic Derrick Stolee via GitGitGadget
2023-01-31 22:01 ` [PATCH v3 00/11] Bundle URIs V: creationToken heuristic for incremental fetches Junio C Hamano
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=73c1d863-036b-81bb-50d3-2a084c2c2fb5@github.com \
--to=derrickstolee@github.com \
--cc=avarab@gmail.com \
--cc=chooglen@google.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=gitster@pobox.com \
--cc=me@ttaylorr.com \
--cc=steadmon@google.com \
--cc=vdye@github.com \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.