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;
+ }
}
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 |