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

From: Dimitrios Apostolou <jimis(at)gmx(dot)net>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com>, Nathan Bossart <nathandbossart(at)gmail(dot)com>, Thomas Munro <thomas(dot)munro(at)gmail(dot)com>, pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: [PING] [PATCH v2] parallel pg_restore: avoid disk seeks when jumping short distance forward
Date: 2025-10-20 20:50:44
Message-ID: p155r02q-4np6-8781-s63o-n3p4502qs9s1@tzk.arg
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

WriteDataToArchiveNone(ArchiveHandle *AH, CompressorState *cs,
const void *data, size_t dLen)
{
- cs->writeF(AH, data, dLen);
+ NoneCompressorState *nonecs = (NoneCompressorState *) cs->private_data;
+ size_t remaining = dLen;
+
+ while (remaining > 0)
+ {
+ size_t chunk;
+
+ /* Dump buffer if full */
+ if (nonecs->bufdata >= nonecs->buflen)

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

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

+ {
+ cs->writeF(AH, nonecs->buffer, nonecs->bufdata);
+ nonecs->bufdata = 0;
+ }
+ /* And fill it */
+ chunk = nonecs->buflen - nonecs->bufdata;
+ if (chunk > remaining)
+ chunk = remaining;
+ memcpy(nonecs->buffer + nonecs->bufdata, data, chunk);
+ nonecs->bufdata += chunk;
+ data = ((const char *) data) + chunk;
+ remaining -= chunk;
+ }
}

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message David G. Johnston 2025-10-20 20:51:37 Re: Add \pset options for boolean value display
Previous Message Benjamin Leff 2025-10-20 20:43:48 Client-only Meson Build From Sources