postgres.git / summary / log / commit / refs

commit    dbcde0f4d62815eee8f32c17441db8f5009657db
Author:   Magnus Hagander <magnus@hagander.net>
Date:     Wed May 28 11:03:21 2014 +0000

    Ensure cleanup in case of early errors in streaming base backups
    
    Move the code that sends the initial status information as well as the
    calculation of paths inside the ENSURE_ERROR_CLEANUP block. If this code
    failed, we would "leak" a counter of number of concurrent backups, thereby
    making the system always believe it was in backup mode. This could happen
    if the sending failed (which it probably never did given that the small
    amount of data to send would never cause a flush). It is very low risk, but
    all operations after do_pg_start_backup should be protected.


src/backend/replication/basebackup.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c index c6731d9f65b..a00bea6fc51 100644 --- a/src/backend/replication/basebackup.c +++ b/src/backend/replication/basebackup.c @@ -101,7 +101,6 @@ perform_base_backup(basebackup_options *opt, DIR *tblspcdir) datadirpathlen = strlen(DataDir); startptr = do_pg_start_backup(opt->label, opt->fastcheckpoint, &labelfile); - SendXlogRecPtrResult(startptr); PG_ENSURE_ERROR_CLEANUP(base_backup_cleanup, (Datum) 0); { @@ -110,6 +109,8 @@ perform_base_backup(basebackup_options *opt, DIR *tblspcdir) struct dirent *de; tablespaceinfo *ti; + SendXlogRecPtrResult(startptr); + /* Collect information about all tablespaces */ while ((de = ReadDir(tblspcdir, "pg_tblspc")) != NULL) { [parent: 9a21ac082f5b]