Condition to become the standby mode.

Поиск
Список
Период
Сортировка
От Sawada Masahiko
Тема Condition to become the standby mode.
Дата
Msg-id CAD21AoAFYz_ZukGL6oFU3mhNHG3NBUmPRqfy6jTwy-LTLXosBg@mail.gmail.com
обсуждение исходный текст
Ответы Re: Condition to become the standby mode.  (Andres Freund <andres@2ndquadrant.com>)
Список pgsql-hackers
Hi All,

When the slave server starts, the slave server perform the following
steps in StartupXLOG():
1. Read latest CheckPoint record LSN from pg_control file.
2. Try to fetch CheckPoint record from pg_xlog directory at first. ( The server try to read up to prior CheckPoint
recordfrom pg_contrl file) 
3. If there is not in pg_xlog, the slave server requests CheckPoint
record to the primary server.

in #3, it works only when StandbyMode is true. For StandbyMode is to
true, database cluster state should be "DB_SHUTDOWNED" (it is one of
the conditions).
that is, slave server can try to fetch checkpoint record from the
master server after slave server was successful completion.

But there is the case that slave server can catch up the primary
server fetching WAL record from the primary server even if slave
server was not successful completion.

For example, when the 2 servers are connected over a relatively slower link.
even if there is possible of clustering replication without taking
full backup of the primary server, we ignore the possible. I think
that is a waste.

so I think it is better that slave server try to request WAL record to
the primary server even if database cluster state of pg_control is
"DB_IN_PRODUCTION" ( is not enough?)

If this problem is solved, there is possible of that we can failback
by removing the all WAL record which is in pg_xlog before server
starts as the slave server.
( And we also use "synchronous_transfer" which I'm proposing, I think
we can fail-back without taking full backup surely)

Am I missing something? Please give me feedback.

diff --git a/src/backend/access/transam/xlog.c
b/src/backend/access/transam/xlog.c
index 96aceb9..c3ccd0e 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -6213,7 +6213,8 @@ StartupXLOG(void)                       (ControlFile->minRecoveryPoint != InvalidXLogRecPtr ||
                   ControlFile->backupEndRequired ||                        ControlFile->backupEndPoint !=
InvalidXLogRecPtr|| 
-                        ControlFile->state == DB_SHUTDOWNED))
+                        ControlFile->state == DB_SHUTDOWNED ||
+                        ControlFile->state == DB_IN_PRODUCTION))               {
InArchiveRecovery= true;                       if (StandbyModeRequested) 

synchronous transfer discussion :
http://www.postgresql.org/message-id/CAF8Q-Gy7xa60HwXc0MKajjkWFEbFDWTG=gGyu1KmT+s2xcQ-bw@mail.gmail.com

--
Regards,

-------
Sawada Masahiko



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Expression indexes and dependecies
Следующее
От: Satoshi Nagayasu
Дата:
Сообщение: inconsistent state after crash recovery