git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 0/8] Fix atomicity and avoid fd exhaustion in ref transactions

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
May 10, 2015, 02:45 UTC
Message-ID
<1431225937-10456-1-git-send-email-mhagger@alum.mit.edu>
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
Next: Michael Haggerty
Message 1 of 16 in “Fix atomicity and avoid fd exhaustion in ref transactions”
  1. 0/8 Fix atomicity and avoid fd exhaustion in ref transactionsMichael Haggerty, May 10, 2015
  2. 1/8 update-ref: test handling large transactions properlyMichael Haggerty, May 10, 2015
  3. 2/8 t7004: rename ULIMIT test prerequisite to ULIMIT_STACK_SIZEMichael Haggerty, May 10, 2015
  4. Stefan BellerMay 11, 2015
  5. Junio C HamanoMay 12, 2015
  6. 3/8 write_ref_to_lockfile(): new function, extracted from write_ref_sha1()Michael Haggerty, May 10, 2015
  7. 4/8 commit_ref_update(): new function, extracted from write_ref_sha1()Michael Haggerty, May 10, 2015
  8. 5/8 rename_ref(): inline calls to write_ref_sha1() from this functionMichael Haggerty, May 10, 2015
  9. 6/8 ref_transaction_commit(): inline call to write_ref_sha1()Michael Haggerty, May 10, 2015
  10. 7/8 ref_transaction_commit(): remove the local flags variableMichael Haggerty, May 10, 2015
  11. 8/8 ref_transaction_commit(): fix atomicity and avoid fd exhaustionMichael Haggerty, May 10, 2015
  12. Junio C HamanoMay 11, 2015
  13. Michael HaggertyMay 11, 2015
  14. Stefan BellerMay 11, 2015
  15. Christian CouderMay 12, 2015
  16. Stefan BellerMay 11, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.