public inbox for [email protected]  
help / color / mirror / Atom feed
From: Anastasia Lubennikova <[email protected]>
To: Paul Guo <[email protected]>
To: Thomas Munro <[email protected]>
Cc: Kyotaro HORIGUCHI <[email protected]>
Cc: PostgreSQL mailing lists <[email protected]>
Subject: Re: standby recovery fails (tablespace related) (tentative patch and discussion)
Date: Thu, 22 Aug 2019 19:13:05 +0300
Message-ID: <[email protected]> (raw)
In-Reply-To: <CAEET0ZGRf8oSjM2uq7Y1=bV2=p4=mJ1soHCsBj_E-_1xF6R8EQ@mail.gmail.com>
References: <CAEET0ZGhmDKrq7JJu2rLLqcJBR8pA4OYrKsirZ5Ft8-deG1e8A@mail.gmail.com>
	<[email protected]>
	<CAEET0ZF9yN4DaXyuFLzOcAYyxuFF1Ms_OQWeA+Rwv3GhA5Q-SA@mail.gmail.com>
	<[email protected]>
	<CAEET0ZHetF9TD=e=BBuwBN1pSd+D_Geh5hLiK1p=H_yQw7rJWg@mail.gmail.com>
	<CAEET0ZF-0hGtkZGufHaqDzg-Ez89n=1T6raWv-03SP1FtB7wRw@mail.gmail.com>
	<CA+hUKGKWL7-eR3whku7dWJN6xmv-7ki5mikxZE+z6mdTEgWHgQ@mail.gmail.com>
	<CAEET0ZFNE2-NQbaw70=EiuOw3JXSSQ_nkbbcXP91pY81vNE1zA@mail.gmail.com>
	<CA+hUKGLojvHVXyWTr4CJt10gS_5qbqhpV8BGYf2GEuxfX1A_7g@mail.gmail.com>
	<CAEET0ZGRf8oSjM2uq7Y1=bV2=p4=mJ1soHCsBj_E-_1xF6R8EQ@mail.gmail.com>

22.08.2019 16:13, Paul Guo wrote:
> Thanks. I updated the patch to v5. It passes install-check testing and 
> recovery testing.
Hi,
Thank you for working on this fix.
The overall design of the latest version looks good to me.
But during the review, I found a bug in the current implementation.
New behavior must apply to crash-recovery only, now it applies to 
archiveRecovery too.
That can cause a silent loss of a tablespace during regular standby 
operation
since it never calls CheckRecoveryConsistency().

Steps to reproduce:
1) run master and replica
2) create dir for tablespace:
mkdir  /tmp/tblspc1

3) create tablespace and database on the master:
create tablespace tblspc1 location '/tmp/tblspc1';
create database db1 tablespace tblspc1 ;

4) wait for replica to receive this changes and pause replication:
select pg_wal_replay_pause();

5) move replica's tablespace symlink to some empty directory, i.e. 
/tmp/tblspc2
mkdir  /tmp/tblspc2
ln -sfn /tmp/tblspc2 postgresql_data_replica/pg_tblspc/16384

6) create another database in tblspc1 on master:
create database db2 tablespace tblspc1 ;

7) resume replication on standby:
select pg_wal_replay_resume();

8) try to connect to db2 on standby

It's expected that dbase_redo() will fail because the directory on 
standby is not found.
While with the patch it suppresses the error until we attempt to connect 
db2 on the standby:

2019-08-22 18:34:39.178 MSK [21066] HINT:  Execute 
pg_wal_replay_resume() to continue.
2019-08-22 18:42:41.656 MSK [21066] WARNING:  Skip creating database 
directory "pg_tblspc/16384/PG_13_201908012". The dest tablespace may 
have been removed before abnormal shutdown. If the removal is illegal 
after later checking we will panic.
2019-08-22 18:42:41.656 MSK [21066] CONTEXT:  WAL redo at 0/3027738 for 
Database/CREATE: copy dir base/1 to pg_tblspc/16384/PG_13_201908012/16390
2019-08-22 18:42:46.096 MSK [21688] FATAL: 
"pg_tblspc/16384/PG_13_201908012/16390" is not a valid data directory
2019-08-22 18:42:46.096 MSK [21688] DETAIL:  File 
"pg_tblspc/16384/PG_13_201908012/16390/PG_VERSION" is missing.

Also some nitpicking about code style:
1) Please, add comment to forget_missing_directory().

2) +               elog(LOG, "Directory \"%s\" was missing during 
directory copying "
I think we'd better update this message elevel to WARNING.

3) Shouldn't we also move FlushDatabaseBuffers(xlrec->src_db_id); call under
     if (do_copydir) clause?
I don't see a reason to flush pages that we won't use later.

-- 
Anastasia Lubennikova
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company



view thread (109+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected], [email protected]
  Subject: Re: standby recovery fails (tablespace related) (tentative patch and discussion)
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox