File tree Expand file tree Collapse file tree 2 files changed +33
-1
lines changed Expand file tree Collapse file tree 2 files changed +33
-1
lines changed Original file line number Diff line number Diff line change @@ -2567,8 +2567,28 @@ recoveryStopsBefore(XLogReaderState *record)
25672567 return true;
25682568 }
25692569
2570+ /* Check RecoveryStopsHook for custom records */
2571+ if (RmgrIdIsCustom (XLogRecGetRmid (record )) && (RecoveryStopsBeforeHook != NULL ))
2572+ {
2573+ stopsHere = RecoveryStopsBeforeHook (record , & recordXid , & recordXtime );
2574+
2575+ if (stopsHere )
2576+ {
2577+ recoveryStopAfter = false;
2578+ recoveryStopXid = recordXid ;
2579+ recoveryStopLSN = InvalidXLogRecPtr ;
2580+ recoveryStopTime = recordXtime ;
2581+ recoveryStopName [0 ] = '\0' ;
2582+
2583+ ereport (LOG ,
2584+ (errmsg ("recovery stopping by hook before transaction %u, time %s" ,
2585+ recoveryStopXid ,
2586+ timestamptz_to_str (recoveryStopTime ))));
2587+ return true;
2588+ }
2589+ }
25702590 /* Otherwise we only consider stopping before COMMIT or ABORT records. */
2571- if (XLogRecGetRmid (record ) != RM_XACT_ID )
2591+ else if (XLogRecGetRmid (record ) != RM_XACT_ID )
25722592 return false;
25732593
25742594 xact_info = XLogRecGetInfo (record ) & XLOG_XACT_OPMASK ;
@@ -4506,6 +4526,8 @@ GetXLogReplayRecPtr(TimeLineID *replayTLI)
45064526
45074527GetReplayXlogPtrHookType GetReplayXlogPtrHook = NULL ;
45084528
4529+ RecoveryStopsBeforeHookType RecoveryStopsBeforeHook = NULL ;
4530+
45094531/*
45104532 * Get effective latest redo apply position.
45114533 *
Original file line number Diff line number Diff line change @@ -50,6 +50,10 @@ typedef enum RecoveryPauseState
5050
5151typedef XLogRecPtr (* GetReplayXlogPtrHookType ) (void );
5252
53+ typedef bool (* RecoveryStopsBeforeHookType ) (XLogReaderState * record ,
54+ TransactionId * recordXid ,
55+ TimestampTz * recordXtime );
56+
5357/* User-settable GUC parameters */
5458extern PGDLLIMPORT bool recoveryTargetInclusive ;
5559extern PGDLLIMPORT int recoveryTargetAction ;
@@ -81,6 +85,12 @@ extern PGDLLIMPORT bool StandbyMode;
8185/* Hook for extensions to tune replay xlog pointer */
8286extern PGDLLIMPORT GetReplayXlogPtrHookType GetReplayXlogPtrHook ;
8387
88+ /*
89+ * Hook for extensions to be able to decides to stop applying the WAL files
90+ * based on custom WAL records.
91+ */
92+ extern PGDLLIMPORT RecoveryStopsBeforeHookType RecoveryStopsBeforeHook ;
93+
8494extern Size XLogRecoveryShmemSize (void );
8595extern void XLogRecoveryShmemInit (void );
8696
You can’t perform that action at this time.
0 commit comments