File tree Expand file tree Collapse file tree 2 files changed +16
-0
lines changed Expand file tree Collapse file tree 2 files changed +16
-0
lines changed Original file line number Diff line number Diff line change @@ -2620,6 +2620,9 @@ recoveryStopsBefore(XLogReaderState *record)
26202620 /* Otherwise we only consider stopping before COMMIT or ABORT records. */
26212621 if (XLogRecGetRmid (record ) != RM_XACT_ID )
26222622 return false;
2623+ /* Check RecoveryStopsHook for custom records */
2624+ else if (RmgrIdIsCustom (XLogRecGetRmid (record )) && (RecoveryStopsHook != NULL ))
2625+ return RecoveryStopsHook (record , true);
26232626
26242627 xact_info = XLogRecGetInfo (record ) & XLOG_XACT_OPMASK ;
26252628
@@ -2787,6 +2790,9 @@ recoveryStopsAfter(XLogReaderState *record)
27872790
27882791 if (rmid != RM_XACT_ID )
27892792 return false;
2793+ /* Check RecoveryStopsHook for custom records */
2794+ else if (RmgrIdIsCustom (XLogRecGetRmid (record )) && (RecoveryStopsHook != NULL ))
2795+ return RecoveryStopsHook (record , false);
27902796
27912797 xact_info = info & XLOG_XACT_OPMASK ;
27922798
@@ -4556,6 +4562,8 @@ GetXLogReplayRecPtr(TimeLineID *replayTLI)
45564562
45574563GetReplayXlogPtrHookType GetReplayXlogPtrHook = NULL ;
45584564
4565+ RecoveryStopsHookType RecoveryStopsHook = NULL ;
4566+
45594567/*
45604568 * Get effective latest redo apply position.
45614569 *
Original file line number Diff line number Diff line change @@ -50,6 +50,8 @@ typedef enum RecoveryPauseState
5050
5151typedef XLogRecPtr (* GetReplayXlogPtrHookType ) (void );
5252
53+ typedef bool (* RecoveryStopsHookType ) (XLogReaderState * record , bool isBefore );
54+
5355/* User-settable GUC parameters */
5456extern PGDLLIMPORT bool recoveryTargetInclusive ;
5557extern PGDLLIMPORT int recoveryTargetAction ;
@@ -81,6 +83,12 @@ extern PGDLLIMPORT bool StandbyMode;
8183/* Hook for extensions to tune replay xlog pointer */
8284extern PGDLLIMPORT GetReplayXlogPtrHookType GetReplayXlogPtrHook ;
8385
86+ /*
87+ * Hook for extensions to be able to decides to stop applying the WAL files
88+ * based on custom WAL records.
89+ */
90+ extern PGDLLIMPORT RecoveryStopsHookType RecoveryStopsHook ;
91+
8492extern Size XLogRecoveryShmemSize (void );
8593extern void XLogRecoveryShmemInit (void );
8694
You can’t perform that action at this time.
0 commit comments