All of lore.kernel.org
 help / color / mirror / Atom feed
From: Patrick Steinhardt <ps@pks.im>
To: git@vger.kernel.org
Cc: "Jeff King" <peff@peff.net>,
	"Bryan Turner" <bturner@atlassian.com>,
	"Waleed Khan" <me@waleedkhan.name>,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
	"Han-Wen Nienhuys" <hanwen@google.com>
Subject: [PATCH v3 0/6] refs: excessive hook execution with packed refs
Date: Thu, 13 Jan 2022 07:11:21 +0100	[thread overview]
Message-ID: <cover.1642054003.git.ps@pks.im> (raw)
In-Reply-To: <cover.1641556319.git.ps@pks.im>

[-- Attachment #1: Type: text/plain, Size: 4845 bytes --]

Hi,

this is the third version of this patch series, which addresses an issue
where the reference-transaction hook is being invoked twice when
deleting refs both in the packed-refs and loose-refs file.

The following things changed in comparison to v2:

    - Fixed some typos in commit messages.

    - Improved the subject of the first patch to more clearly highlight
      the purpose of it, not only say what the patch does.

    - Fixed a missing declaration for `struct string_list`.

    - Clarified why the last patch does the right thing even in case the
      ref only exists in the packed-refs backend, and in case it doesn't
      exist in either of the backends.

Thanks for your feedback!

Patrick

Patrick Steinhardt (6):
  refs: extract packed_refs_delete_refs() to allow control of
    transaction
  refs: allow passing flags when beginning transactions
  refs: allow skipping the reference-transaction hook
  refs: demonstrate excessive execution of the reference-transaction
    hook
  refs: do not execute reference-transaction hook on packing refs
  refs: skip hooks when deleting uncovered packed refs

 refs.c                           | 11 +++++--
 refs.h                           |  8 ++++-
 refs/files-backend.c             | 25 +++++++++++-----
 refs/packed-backend.c            | 30 ++++++++++++++-----
 refs/packed-backend.h            |  7 +++++
 refs/refs-internal.h             |  1 +
 sequencer.c                      |  2 +-
 t/t1416-ref-transaction-hooks.sh | 50 ++++++++++++++++++++++++++++++++
 8 files changed, 114 insertions(+), 20 deletions(-)

Range-diff against v2:
1:  0739f085b2 ! 1:  abbc28822b refs: open-code deletion of packed refs
    @@ Metadata
     Author: Patrick Steinhardt <ps@pks.im>
     
      ## Commit message ##
    -    refs: open-code deletion of packed refs
    +    refs: extract packed_refs_delete_refs() to allow control of transaction
     
         When deleting loose refs, then we also have to delete the refs in the
         packed backend. This is done by calling `refs_delete_refs()`, which
    @@ Commit message
     
         Extract a new function `packed_refs_delete_refs()`, which hosts most of
         the logic to delete refs except for creating the transaction itself.
    -    Like this, we can easily create the transactionion in the files backend
    +    Like this, we can easily create the transaction in the files backend
         and thus exert more control over it.
     
         Signed-off-by: Patrick Steinhardt <ps@pks.im>
    @@ refs/packed-backend.c: static int packed_delete_refs(struct ref_store *ref_store
      }
     
      ## refs/packed-backend.h ##
    +@@
    + 
    + struct repository;
    + struct ref_transaction;
    ++struct string_list;
    + 
    + /*
    +  * Support for storing references in a `packed-refs` file.
     @@ refs/packed-backend.h: int packed_refs_lock(struct ref_store *ref_store, int flags, struct strbuf *err)
      void packed_refs_unlock(struct ref_store *ref_store);
      int packed_refs_is_locked(struct ref_store *ref_store);
2:  629be01d50 = 2:  9dd172a757 refs: allow passing flags when beginning transactions
3:  550d89a323 = 3:  be826bae3b refs: allow skipping the reference-transaction hook
4:  b52e59cdac ! 4:  662a6e6244 refs: demonstrate excessive execution of the reference-transaction hook
    @@ Metadata
      ## Commit message ##
         refs: demonstrate excessive execution of the reference-transaction hook
     
    -    Add tests which demonstate which demonstrates that we're executing the
    +    Add tests which demonstate that we're executing the
         reference-transaction hook too often in some cases, which thus leaks
         implementation details about the reference store's implementation
         itself. Behaviour will be fixed in follow-up commits.
5:  1539e9711f = 5:  d83f309b9c refs: do not execute reference-transaction hook on packing refs
6:  0fbf68dbf4 ! 6:  279eadc41c refs: skip hooks when deleting uncovered packed refs
    @@ Commit message
     
         Fix this behaviour and don't execute the reference-transaction hook at
         all when refs in the packed-refs backend if it's driven by the files
    -    backend.
    +    backend. This works as expected even in case the refs to be deleted only
    +    exist in the packed-refs backend because the loose-backend always queues
    +    refs in its own transaction even if they don't exist such that they can
    +    be locked for concurrent creation. And it also does the right thing in
    +    case neither of the backends has the ref because that would cause the
    +    transaction to fail completely.
     
         Signed-off-by: Patrick Steinhardt <ps@pks.im>
     
-- 
2.34.1


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  parent reply	other threads:[~2022-01-13  6:11 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-07 10:55 [PATCH 0/6] refs: excessive hook execution with packed refs Patrick Steinhardt
2021-12-07 10:55 ` [PATCH 1/6] refs: open-code deletion of " Patrick Steinhardt
2021-12-07 10:56 ` [PATCH 2/6] refs: allow passing flags when beginning transactions Patrick Steinhardt
2021-12-07 10:56 ` [PATCH 3/6] refs: allow skipping the reference-transaction hook Patrick Steinhardt
2021-12-07 10:56 ` [PATCH 4/6] refs: demonstrate excessive execution of " Patrick Steinhardt
2021-12-07 10:56 ` [PATCH 5/6] refs: do not execute reference-transaction hook on packing refs Patrick Steinhardt
2021-12-07 10:56 ` [PATCH 6/6] refs: skip hooks when deleting uncovered packed refs Patrick Steinhardt
2022-01-07 11:55 ` [PATCH v2 0/6] refs: excessive hook execution with " Patrick Steinhardt
2022-01-07 11:55   ` [PATCH v2 1/6] refs: open-code deletion of " Patrick Steinhardt
2022-01-08  0:57     ` Junio C Hamano
2022-01-08  1:51     ` Junio C Hamano
2022-01-13  0:24     ` Junio C Hamano
2022-01-07 11:55   ` [PATCH v2 2/6] refs: allow passing flags when beginning transactions Patrick Steinhardt
2022-01-08  1:51     ` Junio C Hamano
2022-01-07 11:55   ` [PATCH v2 3/6] refs: allow skipping the reference-transaction hook Patrick Steinhardt
2022-01-07 11:55   ` [PATCH v2 4/6] refs: demonstrate excessive execution of " Patrick Steinhardt
2022-01-08  1:31     ` Junio C Hamano
2022-01-10 12:54       ` Patrick Steinhardt
2022-01-08  5:43     ` Eric Sunshine
2022-01-07 11:55   ` [PATCH v2 5/6] refs: do not execute reference-transaction hook on packing refs Patrick Steinhardt
2022-01-07 11:55   ` [PATCH v2 6/6] refs: skip hooks when deleting uncovered packed refs Patrick Steinhardt
2022-01-08  2:01     ` Junio C Hamano
2022-01-10 13:18       ` Patrick Steinhardt
2022-01-10 18:00         ` Junio C Hamano
2022-01-07 22:17   ` [PATCH v2 0/6] refs: excessive hook execution with " Junio C Hamano
2022-01-13 18:24     ` Han-Wen Nienhuys
2022-01-17  7:18       ` Patrick Steinhardt
2022-01-17 11:37         ` Han-Wen Nienhuys
2022-01-24  7:13           ` Patrick Steinhardt
2022-01-13  6:11   ` Patrick Steinhardt [this message]
2022-01-13  6:11     ` [PATCH v3 1/6] refs: extract packed_refs_delete_refs() to allow control of transaction Patrick Steinhardt
2022-01-13 12:43       ` Ævar Arnfjörð Bjarmason
2022-01-17  7:36         ` Patrick Steinhardt
2022-01-13  6:11     ` [PATCH v3 2/6] refs: allow passing flags when beginning transactions Patrick Steinhardt
2022-01-13  6:11     ` [PATCH v3 3/6] refs: allow skipping the reference-transaction hook Patrick Steinhardt
2022-01-13 13:34       ` Ævar Arnfjörð Bjarmason
2022-01-17  8:03         ` Patrick Steinhardt
2022-01-13  6:11     ` [PATCH v3 4/6] refs: demonstrate excessive execution of " Patrick Steinhardt
2022-01-13  6:11     ` [PATCH v3 5/6] refs: do not execute reference-transaction hook on packing refs Patrick Steinhardt
2022-01-13 13:00       ` Ævar Arnfjörð Bjarmason
2022-01-17  7:44         ` Patrick Steinhardt
2022-01-13  6:11     ` [PATCH v3 6/6] refs: skip hooks when deleting uncovered packed refs Patrick Steinhardt
2022-01-13 13:04       ` Ævar Arnfjörð Bjarmason
2022-01-17  7:56         ` Patrick Steinhardt
2022-01-17  8:12   ` [PATCH v4 0/6] refs: excessive hook execution with " Patrick Steinhardt
2022-01-17  8:12     ` [PATCH v4 1/6] refs: extract packed_refs_delete_refs() to allow control of transaction Patrick Steinhardt
2022-01-17  8:12     ` [PATCH v4 2/6] refs: allow passing flags when beginning transactions Patrick Steinhardt
2022-01-17  8:12     ` [PATCH v4 3/6] refs: allow skipping the reference-transaction hook Patrick Steinhardt
2022-01-17  8:12     ` [PATCH v4 4/6] refs: demonstrate excessive execution of " Patrick Steinhardt
2022-01-17  8:12     ` [PATCH v4 5/6] refs: do not execute reference-transaction hook on packing refs Patrick Steinhardt
2022-01-17  8:12     ` [PATCH v4 6/6] refs: skip hooks when deleting uncovered packed refs Patrick Steinhardt

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=cover.1642054003.git.ps@pks.im \
    --to=ps@pks.im \
    --cc=avarab@gmail.com \
    --cc=bturner@atlassian.com \
    --cc=git@vger.kernel.org \
    --cc=hanwen@google.com \
    --cc=me@waleedkhan.name \
    --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.
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.