Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Complain with proper error message if streaming stops prematurely
authorMagnus Hagander <magnus@hagander.net>
Mon, 6 Aug 2012 11:53:46 +0000 (13:53 +0200)
committerMagnus Hagander <magnus@hagander.net>
Mon, 6 Aug 2012 11:53:46 +0000 (13:53 +0200)
In particular, with a controlled shutdown of the master, pg_basebackup
with streaming log could terminate without an error message, even though
the backup is not consistent.

In passing, fix a few cases where walfile wasn't properly set to -1 after
closing.

Fujii Masao

src/bin/pg_basebackup/receivelog.c

index c91cf1bbe86e074b1c81cfc95430a09cdef82192..5e7445626f248f4afd603b6cb70dac3f60962628 100644 (file)
@@ -611,11 +611,20 @@ ReceiveXlogStream(PGconn *conn, XLogRecPtr startpos, uint32 timeline,
    }
    PQclear(res);
 
+   /* Complain if we've not reached stop point yet */
+   if (stream_stop != NULL && !stream_stop(blockpos, timeline, false))
+   {
+       fprintf(stderr, _("%s: replication stream was terminated before stop point\n"),
+               progname);
+       goto error;
+   }
+
    if (copybuf != NULL)
        PQfreemem(copybuf);
    if (walfile != -1 && close(walfile) != 0)
        fprintf(stderr, _("%s: could not close file %s: %s\n"),
                progname, current_walfile_name, strerror(errno));
+   walfile = -1;
    return true;
 
 error:
@@ -624,5 +633,6 @@ error:
    if (walfile != -1 && close(walfile) != 0)
        fprintf(stderr, _("%s: could not close file %s: %s\n"),
                progname, current_walfile_name, strerror(errno));
+   walfile = -1;
    return false;
 }