Re: [PING] [PATCH v2] parallel pg_restore: avoid disk seeks when jumping short distance forward
| От | Dimitrios Apostolou | 
|---|---|
| Тема | Re: [PING] [PATCH v2] parallel pg_restore: avoid disk seeks when jumping short distance forward | 
| Дата | |
| Msg-id | p155r02q-4np6-8781-s63o-n3p4502qs9s1@tzk.arg обсуждение исходный текст  | 
		
| Ответ на | Re: [PING] [PATCH v2] parallel pg_restore: avoid disk seeks when jumping short distance forward (Tom Lane <tgl@sss.pgh.pa.us>) | 
| Ответы | 
                	
            		Re: [PING] [PATCH v2] parallel pg_restore: avoid disk seeks when jumping short distance forward
            		
            		 | 
		
| Список | 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;
+       }
  }
		
	В списке pgsql-hackers по дате отправления: