Re: [PING] [PATCH v2] parallel pg_restore: avoid disk seeks when jumping short distance forward

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Dimitrios Apostolou <jimis@gmx.net>
Cc: Chao Li <li.evan.chao@gmail.com>, Nathan Bossart <nathandbossart@gmail.com>, Thomas Munro <thomas.munro@gmail.com>, pgsql-hackers@lists.postgresql.org
Date: 2025-10-20T21:29:22Z
Lists: pgsql-hackers
Dimitrios Apostolou <jimis@gmx.net> writes:
> +               /* Dump buffer if full */
> +               if (nonecs->bufdata >= nonecs->buflen)

> Shouldn't this be equality check instead:
>      if (nonecs->bufdata == nonecs->buflen)

Old defensive-programming habit.  The invariant we want to establish
is that there's some space available, ie
	nonecs->bufdata < nonecs->buflen
and if we just test for equality then we haven't proven that.
Agreed that bufdata shouldn't ever be greater than buflen, but if
it somehow is, an equality test here would contribute to making
things worse (writing ever further past the buffer) not better.

> And possibly also assert(nonecs->bufdata <= nonecs->buflen) ?

Maybe, but that code is simple enough that I didn't see a big
need for an assertion check.

			regards, tom lane



Commits

  1. Avoid short seeks in pg_restore.

  2. Don't rely on zlib's gzgetc() macro.

  3. Add more TAP test coverage for pg_dump.

  4. Split 002_pg_dump.pl into two test files.

  5. Align the data block sizes of pg_dump's various compression modes.

  6. Fix serious performance problems in LZ4Stream_read_internal.

  7. Fix poor buffering logic in pg_dump's lz4 and zstd compression code.

  8. Fix issue with reading zero bytes in Gzip_read.

  9. Restore test coverage of LZ4Stream_gets().