git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Jonathan Nieder <jrnieder@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: Jeff King <peff@peff.net>,
	git@vger.kernel.org, Derrick Stolee <dstolee@microsoft.com>
Subject: Re: Protocol v2 in v2.27 (Re: Re* [ANNOUNCE] Git v2.27.0-rc1)
Date: Wed, 20 May 2020 19:15:33 -0700	[thread overview]
Message-ID: <20200521021533.GC3648@google.com> (raw)
In-Reply-To: <xmqqlflmtaxq.fsf@gitster.c.googlers.com>

Junio C Hamano wrote:
> Jonathan Nieder <jrnieder@gmail.com> writes:

>> Speaking of which, should we enable protocol v2 by default for people
>> with feature.experimental enabled, like this?
>
> It is an excellent idea, but is something that had to have been
> proposed before -rc0 to be in the upcoming release, no?

I would love to go back in time, but I only have the present to work
with.  Here, I'm hoping it makes the switch of default back to v0 less
of a regression for some interested users.

> The patch looks good; do we have the master list of things that are
> under control of feature.experimental knob in the documentation, or
> is it a feature that we do not have to have a centralized control?

Good catch.  Here's an updated patch with (1) a commit message and (2)
that doc update.

-- >8 --
Subject: config: let feature.experimental imply protocol.version=2

Git 2.26 used protocol v2 as its default protocol, but soon after
release, users noticed that the protocol v2 negotiation code was prone
to fail when fetching from some remotes that are far ahead of others
(such as linux-next.git versus Linus's linux.git).  That has been
fixed by 0b07eecf6ed (Merge branch 'jt/v2-fetch-nego-fix',
2020-05-01), but to be cautious, we are using protocol v0 as the
default in 2.27 to buy some time for any other unanticipated issues to
surface.

To that end, let's ensure that users requesting the bleeding edge
using the feature.experimental flag *do* get protocol v2.  This way,
we can gain experience with a wider audience for the new protocol
version and be more confident when it is time to enable it by default
for all users in some future Git version.

Implementation note: this isn't with the rest of the
feature.experimental options in repo-settings.c because those are tied
to a repository object, whereas this code path is used for operations
like "git ls-remote" that do not require a repository.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
Thanks,
Jonathan

 Documentation/config/feature.txt  | 4 ++++
 Documentation/config/protocol.txt | 3 ++-
 protocol.c                        | 4 ++++
 3 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/Documentation/config/feature.txt b/Documentation/config/feature.txt
index 4e3a5c0cebc..28c33602d52 100644
--- a/Documentation/config/feature.txt
+++ b/Documentation/config/feature.txt
@@ -22,6 +22,10 @@ existing commit-graph file(s). Occasionally, these files will merge and the
 write may take longer. Having an updated commit-graph file helps performance
 of many Git commands, including `git merge-base`, `git push -f`, and
 `git log --graph`.
++
+* `protocol.version=2` speeds up fetches from repositories with many refs by
+allowing the client to specify which refs to list before the server lists
+them.
 
 feature.manyFiles::
 	Enable config options that optimize for repos with many files in the
diff --git a/Documentation/config/protocol.txt b/Documentation/config/protocol.txt
index 0b40141613e..c46e9b3d00a 100644
--- a/Documentation/config/protocol.txt
+++ b/Documentation/config/protocol.txt
@@ -48,7 +48,8 @@ protocol.version::
 	If set, clients will attempt to communicate with a server
 	using the specified protocol version.  If the server does
 	not support it, communication falls back to version 0.
-	If unset, the default is `0`.
+	If unset, the default is `0`, unless `feature.experimental`
+	is enabled, in which case the default is `2`.
 	Supported versions:
 +
 --
diff --git a/protocol.c b/protocol.c
index d390391ebac..d1dd3424bba 100644
--- a/protocol.c
+++ b/protocol.c
@@ -17,6 +17,7 @@ static enum protocol_version parse_protocol_version(const char *value)
 enum protocol_version get_protocol_version_config(void)
 {
 	const char *value;
+	int val;
 	const char *git_test_k = "GIT_TEST_PROTOCOL_VERSION";
 	const char *git_test_v;
 
@@ -30,6 +31,9 @@ enum protocol_version get_protocol_version_config(void)
 		return version;
 	}
 
+	if (!git_config_get_bool("feature.experimental", &val) && val)
+		return protocol_v2;
+
 	git_test_v = getenv(git_test_k);
 	if (git_test_v && *git_test_v) {
 		enum protocol_version env = parse_protocol_version(git_test_v);
-- 
2.27.0.rc0.183.gde8f92d652


  parent reply	other threads:[~2020-05-21  2:15 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-20 19:17 [ANNOUNCE] Git v2.27.0-rc1 Junio C Hamano
2020-05-20 19:31 ` Jeff King
2020-05-20 20:02   ` Junio C Hamano
2020-05-20 20:31   ` Re* " Junio C Hamano
2020-05-20 21:24     ` Jeff King
2020-05-20 22:00     ` Protocol v2 in v2.27 (Re: Re* [ANNOUNCE] Git v2.27.0-rc1) Jonathan Nieder
2020-05-20 23:59       ` Junio C Hamano
2020-05-21  0:29         ` Jeff King
2020-05-21  2:15         ` Jonathan Nieder [this message]
2020-05-21  2:35           ` Carlo Marcelo Arenas Belón
2020-05-21  2:45             ` connect: don't request v2 when pushing (Re: Protocol v2 in v2.27) Jonathan Nieder
2020-05-21  3:26               ` Carlo Marcelo Arenas Belón
2020-05-21 11:54           ` Protocol v2 in v2.27 (Re: Re* [ANNOUNCE] Git v2.27.0-rc1) Derrick Stolee
2020-05-21 16:42             ` Junio C Hamano
2020-05-21 16:34           ` 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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200521021533.GC3648@google.com \
    --to=jrnieder@gmail.com \
    --cc=dstolee@microsoft.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=peff@peff.net \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).