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

Re: [PATCH v2] midx: use buffered I/O to talk to pack-objects

From
Jeff King <peff@peff.net>
Date
Aug 13, 2020, 09:06 UTC
Message-ID
<20200813090635.GC3092220@coredump.intra.peff.net>
In-Reply-To
<xmqqh7t7623d.fsf@gitster.c.googlers.com>
On Wed, Aug 12, 2020 at 01:28:22PM -0700, Junio C Hamano wrote:
Show 14 quoted lines
> René Scharfe <l.s.r@web.de> writes:
> 
> >  		nth_midxed_object_oid(&oid, m, i);
> > -		xwrite(cmd.in, oid_to_hex(&oid), the_hash_algo->hexsz);
> > -		xwrite(cmd.in, "\n", 1);
> > +		fprintf(cmd_in, "%s\n", oid_to_hex(&oid));
> 
> I do think it is silly to send an object name and terminating LF in
> two different system calls per object.
> 
> The original uses xwrite() so that it does not have to worry about
> having to restart interrupted system calls and such.  Do we need to
> do that ourselves now or does the stdio layer take care of it for
> us?

I think we're OK in this instance because we are not expecting writes to happen at any given moment. We might do a partial write() for any given fprintf(), but we're OK as long as by the fflush() at the end everything is written.

For more general cases where we do care about ordering (e.g., if we were interleaving writes and reads with something like cat-file), we'd need to fflush() after each write. And I'd expect fflush() to retry across partial write() or EINTR anyway as a quality-of-implementation thing. Which doesn't make it true, but glibc empirically seems to behave that way, and I think we'd be better off adding a transparent wrapper to fflush() on any system that doesn't.

-Peff
Previous: Jeff King
Message 14 of 14 in “midx: use buffered I/O to talk to pack-objects”
  1. midx: use buffered I/O to talk to pack-objectsRené Scharfe, Aug 2, 2020
  2. Chris TorekAug 2, 2020
  3. Johannes SixtAug 3, 2020
  4. René ScharfeAug 3, 2020
  5. René ScharfeAug 4, 2020
  6. Junio C HamanoAug 4, 2020
  7. Derrick StoleeAug 3, 2020
  8. René ScharfeAug 11, 2020
  9. Derrick StoleeAug 11, 2020
  10. midx: use buffered I/O to talk to pack-objectsRené Scharfe, Aug 12, 2020
  11. Junio C HamanoAug 12, 2020
  12. Junio C HamanoAug 12, 2020
  13. Jeff KingAug 13, 2020
  14. Jeff KingAug 13, 2020

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.