mirror of
https://github.com/postgres/postgres.git
synced 2025-07-08 11:42:09 +03:00
Enable logical slots to follow timeline switches
When decoding from a logical slot, it's necessary for xlog reading to be able to read xlog from historical (i.e. not current) timelines; otherwise, decoding fails after failover, because the archives are in the historical timeline. This is required to make "failover logical slots" possible; it currently has no other use, although theoretically it could be used by an extension that creates a slot on a standby and continues to replay from the slot when the standby is promoted. This commit includes a module in src/test/modules with functions to manipulate the slots (which is not otherwise possible in SQL code) in order to enable testing, and a new test in src/test/recovery to ensure that the behavior is as expected. Author: Craig Ringer Reviewed-By: Oleksii Kliukin, Andres Freund, Petr Jelínek
This commit is contained in:
@ -118,6 +118,11 @@ XLogReaderAllocate(XLogPageReadCB pagereadfunc, void *private_data)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifndef FRONTEND
|
||||
/* Will be loaded on first read */
|
||||
state->timelineHistory = NIL;
|
||||
#endif
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
@ -137,6 +142,10 @@ XLogReaderFree(XLogReaderState *state)
|
||||
pfree(state->errormsg_buf);
|
||||
if (state->readRecordBuf)
|
||||
pfree(state->readRecordBuf);
|
||||
#ifndef FRONTEND
|
||||
if (state->timelineHistory)
|
||||
list_free_deep(state->timelineHistory);
|
||||
#endif
|
||||
pfree(state->readBuf);
|
||||
pfree(state);
|
||||
}
|
||||
|
Reference in New Issue
Block a user