mirror of
https://github.com/postgres/postgres.git
synced 2025-10-15 05:46:52 +03:00
Add regression test for restart points during promotion
This test serves as a way to demonstrate how to use the features introduced in37b369dc67
, while providing coverage for7863ee4def
that caused the startup process to throw "PANIC: could not locate a valid checkpoint record" when starting recovery. The test checks that a node is able to properly restart following a crash when a restart point was finishing across a promotion, with an injection point added in the middle of CreateRestartPoint() to stop the restartpoint in flight. Note that this test fails when7863ee4def
is reverted. Kyotaro Horiguchi is the original author of this test, that has been originally posted on the thread where7863ee4def
was discussed. I have just upgraded and polished it to rely on injection points, making it much cheaper to reproduce the failure. This test requires injection points to be enabled in the builds, hence meson and ./configure need an update to pass this knowledge down to the test. The name of the new injection point follows the same naming convention as6a1ea02c49
. The Makefile's EXTRA_INSTALL of recovery TAP tests is updated to include modules/injection_points. Author: Kyotaro Horiguchi, Michael Paquier Reviewed-by: Andrey Borodin, Bertrand Drouvot Discussion: https://postgr.es/m/ZdLuxBk5hGpol91B@paquier.xyz
This commit is contained in:
@@ -100,6 +100,7 @@
|
||||
#include "storage/sync.h"
|
||||
#include "utils/guc_hooks.h"
|
||||
#include "utils/guc_tables.h"
|
||||
#include "utils/injection_point.h"
|
||||
#include "utils/memutils.h"
|
||||
#include "utils/ps_status.h"
|
||||
#include "utils/relmapper.h"
|
||||
@@ -7528,6 +7529,12 @@ CreateRestartPoint(int flags)
|
||||
|
||||
CheckPointGuts(lastCheckPoint.redo, flags);
|
||||
|
||||
/*
|
||||
* This location needs to be after CheckPointGuts() to ensure that some
|
||||
* work has already happened during this checkpoint.
|
||||
*/
|
||||
INJECTION_POINT("create-restart-point");
|
||||
|
||||
/*
|
||||
* Remember the prior checkpoint's redo ptr for
|
||||
* UpdateCheckPointDistanceEstimate()
|
||||
|
Reference in New Issue
Block a user