From: Patrick Steinhardt <ps@pks.im>
To: "brian m. carlson" <sandals@crustytoothpaste.net>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>,
Matthew John Cheetham <mjcheetham@outlook.com>,
M Hickford <mirth.hickford@gmail.com>
Subject: Re: [PATCH 03/13] http: use new headers for each object request
Date: Wed, 27 Mar 2024 09:02:31 +0100 [thread overview]
Message-ID: <ZgPSl0hWjH5B45Rt@tanuki> (raw)
In-Reply-To: <20240324011301.1553072-4-sandals@crustytoothpaste.net>
[-- Attachment #1: Type: text/plain, Size: 4997 bytes --]
On Sun, Mar 24, 2024 at 01:12:51AM +0000, brian m. carlson wrote:
> Currently we create one set of headers for all object requests and reuse
> it. However, we'll need to adjust the headers for authentication
> purposes in the future, so let's create a new set for each request so
> that we can adjust them if the authentication changes.
>
> Note that the cost of allocation here is tiny compared to the fact that
> we're making a network call, not to mention probably a full TLS
> connection, so this shouldn't have a significant impact on performance.
> Moreover, nobody who cares about performance is using the dumb HTTP
> protocol anyway, since it often makes huge numbers of requests compared
> to the smart protocol.
>
> Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
> ---
> http.c | 19 +++++++++++--------
> http.h | 2 ++
> 2 files changed, 13 insertions(+), 8 deletions(-)
>
> diff --git a/http.c b/http.c
> index e73b136e58..1c2200da77 100644
> --- a/http.c
> +++ b/http.c
> @@ -128,7 +128,6 @@ static unsigned long empty_auth_useless =
> | CURLAUTH_DIGEST;
>
> static struct curl_slist *pragma_header;
> -static struct curl_slist *no_pragma_header;
> static struct string_list extra_http_headers = STRING_LIST_INIT_DUP;
>
> static struct curl_slist *host_resolutions;
Nice to see that this also allows us to get rid of one more global
variable.
> @@ -299,6 +298,11 @@ size_t fwrite_null(char *ptr UNUSED, size_t eltsize UNUSED, size_t nmemb,
> return nmemb;
> }
>
> +static struct curl_slist *object_request_headers(void)
> +{
> + return curl_slist_append(http_copy_default_headers(), "Pragma:");
> +}
> +
> static void closedown_active_slot(struct active_request_slot *slot)
> {
> active_requests--;
> @@ -1275,8 +1279,6 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
>
> pragma_header = curl_slist_append(http_copy_default_headers(),
> "Pragma: no-cache");
> - no_pragma_header = curl_slist_append(http_copy_default_headers(),
> - "Pragma:");
>
> {
> char *http_max_requests = getenv("GIT_HTTP_MAX_REQUESTS");
> @@ -1360,8 +1362,6 @@ void http_cleanup(void)
> curl_slist_free_all(pragma_header);
> pragma_header = NULL;
>
> - curl_slist_free_all(no_pragma_header);
> - no_pragma_header = NULL;
>
Nit: this leaves behind two consecutive empty lines.
Patrick
> curl_slist_free_all(host_resolutions);
> host_resolutions = NULL;
> @@ -2370,6 +2370,7 @@ void release_http_pack_request(struct http_pack_request *preq)
> }
> preq->slot = NULL;
> strbuf_release(&preq->tmpfile);
> + curl_slist_free_all(preq->headers);
> free(preq->url);
> free(preq);
> }
> @@ -2454,11 +2455,11 @@ struct http_pack_request *new_direct_http_pack_request(
> }
>
> preq->slot = get_active_slot();
> + preq->headers = object_request_headers();
> curl_easy_setopt(preq->slot->curl, CURLOPT_WRITEDATA, preq->packfile);
> curl_easy_setopt(preq->slot->curl, CURLOPT_WRITEFUNCTION, fwrite);
> curl_easy_setopt(preq->slot->curl, CURLOPT_URL, preq->url);
> - curl_easy_setopt(preq->slot->curl, CURLOPT_HTTPHEADER,
> - no_pragma_header);
> + curl_easy_setopt(preq->slot->curl, CURLOPT_HTTPHEADER, preq->headers);
>
> /*
> * If there is data present from a previous transfer attempt,
> @@ -2624,13 +2625,14 @@ struct http_object_request *new_http_object_request(const char *base_url,
> }
>
> freq->slot = get_active_slot();
> + freq->headers = object_request_headers();
>
> curl_easy_setopt(freq->slot->curl, CURLOPT_WRITEDATA, freq);
> curl_easy_setopt(freq->slot->curl, CURLOPT_FAILONERROR, 0);
> curl_easy_setopt(freq->slot->curl, CURLOPT_WRITEFUNCTION, fwrite_sha1_file);
> curl_easy_setopt(freq->slot->curl, CURLOPT_ERRORBUFFER, freq->errorstr);
> curl_easy_setopt(freq->slot->curl, CURLOPT_URL, freq->url);
> - curl_easy_setopt(freq->slot->curl, CURLOPT_HTTPHEADER, no_pragma_header);
> + curl_easy_setopt(freq->slot->curl, CURLOPT_HTTPHEADER, freq->headers);
>
> /*
> * If we have successfully processed data from a previous fetch
> @@ -2718,5 +2720,6 @@ void release_http_object_request(struct http_object_request *freq)
> release_active_slot(freq->slot);
> freq->slot = NULL;
> }
> + curl_slist_free_all(freq->headers);
> strbuf_release(&freq->tmpfile);
> }
> diff --git a/http.h b/http.h
> index 3af19a8bf5..c5f8cc4620 100644
> --- a/http.h
> +++ b/http.h
> @@ -196,6 +196,7 @@ struct http_pack_request {
> FILE *packfile;
> struct strbuf tmpfile;
> struct active_request_slot *slot;
> + struct curl_slist *headers;
> };
>
> struct http_pack_request *new_http_pack_request(
> @@ -229,6 +230,7 @@ struct http_object_request {
> int zret;
> int rename;
> struct active_request_slot *slot;
> + struct curl_slist *headers;
> };
>
> struct http_object_request *new_http_object_request(
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2024-03-27 8:02 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-24 1:12 [PATCH 00/13] Support for arbitrary schemes in credentials brian m. carlson
2024-03-24 1:12 ` [PATCH 01/13] credential: add an authtype field brian m. carlson
2024-03-24 1:12 ` [PATCH 02/13] remote-curl: reset headers on new request brian m. carlson
2024-03-24 1:12 ` [PATCH 03/13] http: use new headers for each object request brian m. carlson
2024-03-27 8:02 ` Patrick Steinhardt [this message]
2024-03-24 1:12 ` [PATCH 04/13] credential: add a field for pre-encoded credentials brian m. carlson
2024-03-24 1:12 ` [PATCH 05/13] credential: gate new fields on capability brian m. carlson
2024-03-27 8:02 ` Patrick Steinhardt
2024-03-27 21:33 ` brian m. carlson
2024-04-02 10:04 ` Patrick Steinhardt
2024-04-04 0:39 ` brian m. carlson
2024-04-04 4:07 ` Patrick Steinhardt
2024-03-28 10:20 ` Jeff King
2024-03-28 16:13 ` Junio C Hamano
2024-03-28 16:29 ` Jeff King
2024-03-28 17:25 ` Junio C Hamano
2024-03-28 21:18 ` brian m. carlson
2024-03-24 1:12 ` [PATCH 06/13] docs: indicate new credential protocol fields brian m. carlson
2024-03-25 23:16 ` M Hickford
2024-03-25 23:37 ` brian m. carlson
2024-03-30 13:00 ` M Hickford
2024-03-31 21:43 ` brian m. carlson
2024-03-24 1:12 ` [PATCH 07/13] http: add support for authtype and credential brian m. carlson
2024-03-24 1:12 ` [PATCH 08/13] credential: add an argument to keep state brian m. carlson
2024-04-01 21:05 ` mirth hickford
2024-04-01 22:14 ` brian m. carlson
2024-03-24 1:12 ` [PATCH 09/13] credential: enable state capability brian m. carlson
2024-03-24 1:12 ` [PATCH 10/13] docs: set a limit on credential line length brian m. carlson
2024-03-24 1:12 ` [PATCH 11/13] t5563: refactor for multi-stage authentication brian m. carlson
2024-03-24 1:13 ` [PATCH 12/13] strvec: implement swapping two strvecs brian m. carlson
2024-03-27 8:02 ` Patrick Steinhardt
2024-03-27 21:22 ` Junio C Hamano
2024-03-27 21:34 ` brian m. carlson
2024-03-24 1:13 ` [PATCH 13/13] credential: add support for multistage credential rounds brian m. carlson
2024-03-28 8:00 ` M Hickford
2024-03-28 21:53 ` brian m. carlson
2024-04-01 20:51 ` M Hickford
2024-03-24 2:24 ` [PATCH 00/13] Support for arbitrary schemes in credentials Junio C Hamano
2024-03-24 15:21 ` brian m. carlson
2024-03-24 16:13 ` Junio C Hamano
2024-03-30 8:00 ` M Hickford
2024-03-30 8:16 ` M Hickford
2024-04-02 22:26 ` Calvin Wan
2024-04-04 1:01 ` brian m. carlson
2024-04-08 18:42 ` Jackson Toeniskoetter
2024-04-11 7:00 ` M Hickford
2024-04-12 0:09 ` brian m. carlson
2024-04-11 7:00 ` M Hickford
2024-04-12 0:13 ` brian m. carlson
2024-04-17 0:02 ` [PATCH v2 00/16] " brian m. carlson
2024-04-17 0:02 ` [PATCH v2 01/16] credential: add an authtype field brian m. carlson
2024-04-17 0:02 ` [PATCH v2 02/16] remote-curl: reset headers on new request brian m. carlson
2024-04-17 0:02 ` [PATCH v2 03/16] http: use new headers for each object request brian m. carlson
2024-04-17 0:02 ` [PATCH v2 04/16] credential: add a field for pre-encoded credentials brian m. carlson
2024-04-17 0:02 ` [PATCH v2 05/16] credential: gate new fields on capability brian m. carlson
2024-04-17 0:02 ` [PATCH v2 06/16] credential: add a field called "ephemeral" brian m. carlson
2024-04-17 0:02 ` [PATCH v2 07/16] docs: indicate new credential protocol fields brian m. carlson
2024-04-17 0:02 ` [PATCH v2 08/16] http: add support for authtype and credential brian m. carlson
2024-04-17 0:02 ` [PATCH v2 09/16] credential: add an argument to keep state brian m. carlson
2024-04-17 0:02 ` [PATCH v2 10/16] credential: enable state capability brian m. carlson
2024-04-17 0:02 ` [PATCH v2 11/16] docs: set a limit on credential line length brian m. carlson
2024-04-17 0:02 ` [PATCH v2 12/16] t5563: refactor for multi-stage authentication brian m. carlson
2024-04-17 0:02 ` [PATCH v2 13/16] credential: add support for multistage credential rounds brian m. carlson
2024-04-17 0:02 ` [PATCH v2 14/16] t: add credential tests for authtype brian m. carlson
2024-04-17 0:02 ` [PATCH v2 15/16] credential-cache: implement authtype capability brian m. carlson
2024-04-17 0:02 ` [PATCH v2 16/16] credential: add method for querying capabilities brian m. carlson
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=ZgPSl0hWjH5B45Rt@tanuki \
--to=ps@pks.im \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=mirth.hickford@gmail.com \
--cc=mjcheetham@outlook.com \
--cc=sandals@crustytoothpaste.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).