Assertion failure when the non-exclusive pg_stop_backup aborted.

From: Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>
To: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Assertion failure when the non-exclusive pg_stop_backup aborted.
Date: 2017-09-20 16:07:13
Views: Raw Message | Whole Thread | Download mbox
Lists: pgsql-hackers


I got an assert failure when executing pg_terminate_backend to the
process that waiting for WAL to be archived in non-exclusive backup

TRAP: FailedAssertion("!(XLogCtl->Insert.nonExclusiveBackups > 0)",
File: "xlog.c", Line: 11123)

The one reproducing procedure is,
1. Start postgres with enabling the WAL archive
2. Execute pg_start_backup()
3. Revoke the access privileges of archive directory. (e.g., chown
root:root /path/to/archive)
4. Execute pg_stop_backup() and hangs
5. Execute pg_terminate_backend() to the process that is waiting for
WAL to be archived.
Got the assertion failure.

Perhaps we can reproduce it using pg_basebackup as well.

I think the cause of this is that do_pg_abort_backup can be called
even after we decremented XLogCtl->Insert.nonExclusiveBackups in
do_pg_stop_backup(). That is, do_pg_abort_backup can be called with
XLogCtl->Insert.nonExclusiveBackups = 0 when the transaction aborts
after processed the nonExclusiveBackups (e.g, during waiting for WAL
to be archived)
The bug can happen in PostgreSQL 9.1 or higher that non-exclusive
backup has been introduced, so we should back-patch to the all
supported versions.

I changed do_pg_abort_backup() so that it decrements
nonExclusiveBackups only if > 0. Feedback is very welcome.


Masahiko Sawada
NTT Open Source Software Center

Attachment Content-Type Size
fix_do_pg_abort_backup.patch text/x-patch 782 bytes


Browse pgsql-hackers by date

  From Date Subject
Next Message Stephen Frost 2017-09-20 16:10:19 Re: [HACKERS] USER Profiles for PostgreSQL
Previous Message Tom Lane 2017-09-20 16:06:40 Re: Varying results when using merge joins over postgres_fdw vs hash joins