git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Michael Haggerty <mhagger@alum.mit.edu>
To: Junio C Hamano <gitster@pobox.com>, Stefan Beller <sbeller@google.com>
Cc: Jeff King <peff@peff.net>,
	Eric Sunshine <sunshine@sunshineco.com>,
	git@vger.kernel.org, Michael Haggerty <mhagger@alum.mit.edu>
Subject: [PATCH v2 0/8] Fix atomicity and avoid fd exhaustion in ref transactions
Date: Sun, 10 May 2015 04:45:29 +0200	[thread overview]
Message-ID: <1431225937-10456-1-git-send-email-mhagger@alum.mit.edu> (raw)

This is v2 of [1], formerly called

    Avoid file descriptor exhaustion in ref_transaction_commit()

As a reminder, this patch series fixes some cases where `git
update-ref --stdin` (and, on 2.4+, `git push --atomic`) could fail to
be atomic, and avoids file descriptor exhaustion while carrying out
ref transactions by closing lockfiles promptly.

Thanks to Peff, Stefan, Junio, and Eric for their comments on v1.

The main change is that this version is rebased onto maint-2.2 as per
Junio's wish [2]. This was not trivial because of the changes in the
area between 2.3 and 2.4, especially 'mh/expire-updateref-fixes',
'mh/refs-have-new', and 'mh/reflog-expire'.

Other changes:

* Remove Stefan's

      bc31f46 refs.c: remove lock_fd from struct ref_lock (2015-04-16)

  from the series, as it is not needed for this fix and was causing
  extra conflicts when backporting and merging forward. This patch is
  still a good idea, but there is no need to backport it.

* Change log message of the last patch to describe both of the bugs
  that it fixes.

* Many other small tweaks.

This patch series is available from my GitHub account [3] as branch
'write-refs-sooner'. Please note that the branch there is applied on
top of a cherry-pick of

      f6786c8 http-push: trim trailing newline from remote symref (2015-01-12)

, which was needed to get test t5540 to pass.

The following other branches, also from my GitHub repo, might be
useful:

* 'write-refs-sooner-2.3' -- suggested merge of the change to 'maint'.

* 'write-refs-sooner-master' -- suggested merge of the change to
  'master'.

* 'write-refs-sooner-rebased-2.3' and
  'write-refs-sooner-rebased-master' -- rebases of 'write-refs-sooner'
  onto 'maint' and 'master' respectively, in case anybody is
  interested to see how the individual patches would look if
  implemented natively on these branches.

[1] http://thread.gmane.org/gmane.comp.version-control.git/267735
[2] http://article.gmane.org/gmane.comp.version-control.git/267799
[3] https://github.com/mhagger/git

Michael Haggerty (6):
  write_ref_to_lockfile(): new function, extracted from write_ref_sha1()
  commit_ref_update(): new function, extracted from write_ref_sha1()
  rename_ref(): inline calls to write_ref_sha1() from this function
  ref_transaction_commit(): inline calls to write_ref_sha1()
  ref_transaction_commit(): remove the local flags variable
  ref_transaction_commit(): fix atomicity and avoid fd exhaustion

Stefan Beller (2):
  update-ref: test handling large transactions properly
  t7004: rename ULIMIT test prerequisite to ULIMIT_STACK_SIZE

 refs.c                | 99 +++++++++++++++++++++++++++++++++++++--------------
 t/t1400-update-ref.sh | 28 +++++++++++++++
 t/t7004-tag.sh        |  4 +--
 3 files changed, 103 insertions(+), 28 deletions(-)

-- 
2.1.4

             reply	other threads:[~2015-05-10  2:46 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-10  2:45 Michael Haggerty [this message]
2015-05-10  2:45 ` [PATCH v2 1/8] update-ref: test handling large transactions properly Michael Haggerty
2015-05-10  2:45 ` [PATCH v2 2/8] t7004: rename ULIMIT test prerequisite to ULIMIT_STACK_SIZE Michael Haggerty
2015-05-11 17:23   ` Stefan Beller
2015-05-12 21:53     ` Junio C Hamano
2015-05-10  2:45 ` [PATCH v2 3/8] write_ref_to_lockfile(): new function, extracted from write_ref_sha1() Michael Haggerty
2015-05-10  2:45 ` [PATCH v2 4/8] commit_ref_update(): " Michael Haggerty
2015-05-10  2:45 ` [PATCH v2 5/8] rename_ref(): inline calls to write_ref_sha1() from this function Michael Haggerty
2015-05-10  2:45 ` [PATCH v2 6/8] ref_transaction_commit(): inline call to write_ref_sha1() Michael Haggerty
2015-05-10  2:45 ` [PATCH v2 7/8] ref_transaction_commit(): remove the local flags variable Michael Haggerty
2015-05-10  2:45 ` [PATCH v2 8/8] ref_transaction_commit(): fix atomicity and avoid fd exhaustion Michael Haggerty
2015-05-11  4:30 ` [PATCH v2 0/8] Fix atomicity and avoid fd exhaustion in ref transactions Junio C Hamano
2015-05-11  6:52   ` Michael Haggerty
2015-05-11 17:10     ` Stefan Beller
2015-05-12 13:26       ` Christian Couder
2015-05-11 17:32   ` Stefan Beller

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=1431225937-10456-1-git-send-email-mhagger@alum.mit.edu \
    --to=mhagger@alum.mit.edu \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=peff@peff.net \
    --cc=sbeller@google.com \
    --cc=sunshine@sunshineco.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 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).