Re: After promote, DB can not UPDATE with SAVEPOINT (could not access status of transaction 1409172)

From: Andres Freund <andres(at)2ndquadrant(dot)com>
To: ダンミンフーン <dangminh-huong(at)mxm(dot)nes(dot)nec(dot)co(dot)jp>
Cc: pgsql-bugs(at)postgresql(dot)org, 'Akio Iwaasa' <iwaasa(at)mxs(dot)nes(dot)nec(dot)co(dot)jp>
Subject: Re: After promote, DB can not UPDATE with SAVEPOINT (could not access status of transaction 1409172)
Date: 2013-08-22 13:30:35
Message-ID: 20130822133035.GA17006@awork2.anarazel.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Hi,

On 2013-08-22 22:17:40 +0900, ダンミンフーン wrote:
> I've get found out that issue in my project.
> Update in PRIMARY while pg_basebackup is performing,
> Can cause the STANDBY could not UPDATE after promote.
>
> In Standby Node, when first XID of a page come, pg_subtrans
> must be extended by ExtendSUBTRANS function.
>
> But if that XID created while pg_basebackup (with "-x" option)
> was performing, it did not extend.
>
> Due to that, after basebackup complete, start that DB and do
> promote complete. It failed in SAVEPOINT UPDATE query like follows.
>
> ---
> postgres=# BEGIN;
> postgres=# SAVEPOINT testsavepoint;
> postgres=# UPDATE test_tbl SET name = 'test';
> ERROR: could not access status of transaction 1409172
> DETAIL: Could not read from file "pg_subtrans/0015" at offset 131072: Success.
> ---
>
> I've also confirm source and realize that,
>
> When StartupXLOG call RecordKnownAssignedTransactionIds
> (in the "main redo apply loop"), the "standbyState" still
> was STANDBY_INITIALIZED, so it is returned without goto
> ExtendSUBTRANS (to check and extend space for pg_subtrans).
>
> Therefor, after STANDBY promote, when UPDATE query made by
> SAVEPOINT is executed, the process as follow is performed
> and get the above ERROR in SimpleLruReadPage function.
>
> AssignTransactionId => SubTransSetParent => SubTransSetParent => SimpleLruReadPage
>
> I think that ExtendSUBTRANS must be called even if "standbyState"
> in STANDBY_INITIALIZED in order to avoid the case above.
>
> I also attach a patch. Could anyone confirm for me.

Nice diagnosis and thanks for the patch!

I think the the issue has already been fixed while investigating a
similar issue, could you verify that the current git version works for
you?

c.f. commit 99ee15b315c187045a95db7b27fd9d866aea93e0

Greetings,

Andres Freund

--
Andres Freund http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message pchan 2013-08-22 23:52:15 BUG #8392: encounter intermittent "ERROR: out of memory" on hot standby
Previous Message ダンミンフーン 2013-08-22 13:17:40 After promote, DB can not UPDATE with SAVEPOINT (could not access status of transaction 1409172)