postgres.git / summary / log / commit / refs
commit 3033e7359fb850d71ffe9deb88d013cf83a98ad2
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sun May 29 17:18:49 2016 +0000
Fix missing abort checks in pg_backup_directory.c.
Parallel restore from directory format failed to respond to control-C
in a timely manner, because there were no checkAborting() calls in the
code path that reads data from a file and sends it to the backend.
If any worker was in the midst of restoring data for a large table,
you'd just have to wait.
This fix doesn't do anything for the problem of aborting a long-running
server-side command, but at least it fixes things for data transfers.
Back-patch to 9.3 where parallel restore was introduced.
src/bin/pg_dump/pg_backup_directory.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/bin/pg_dump/pg_backup_directory.c b/src/bin/pg_dump/pg_backup_directory.c
index a8bcd590ec1..21438d151d0 100644
--- a/src/bin/pg_dump/pg_backup_directory.c
+++ b/src/bin/pg_dump/pg_backup_directory.c
@@ -411,7 +411,12 @@ _PrintFileData(ArchiveHandle *AH, char *filename, RestoreOptions *ropt)
buflen = ZLIB_OUT_SIZE;
while ((cnt = cfread(buf, buflen, cfp)))
+ {
+ /* Are we aborting? */
+ checkAborting(AH);
+
ahwrite(buf, 1, cnt, AH);
+ }
free(buf);
if (cfclose(cfp) !=0)
@@ -556,6 +561,9 @@ _ReadBuf(ArchiveHandle *AH, void *buf, size_t len)
lclContext *ctx = (lclContext *) AH->formatData;
size_t res;
+ /* Are we aborting? */
+ checkAborting(AH);
+
res = cfread(buf, len, ctx->dataFH);
return res;
[parent: 99e329818154]