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 @@ -2617,8 +2617,28 @@ recoveryStopsBefore(XLogReaderState *record)
26172617 return true;
26182618 }
26192619
2620+ /* Check RecoveryStopsHook for custom records */
2621+ if (RmgrIdIsCustom (XLogRecGetRmid (record )) && (RecoveryStopsBeforeHook != NULL ))
2622+ {
2623+ stopsHere = RecoveryStopsBeforeHook (record , & recordXid , & recordXtime );
2624+
2625+ if (stopsHere )
2626+ {
2627+ recoveryStopAfter = false;
2628+ recoveryStopXid = recordXid ;
2629+ recoveryStopLSN = InvalidXLogRecPtr ;
2630+ recoveryStopTime = recordXtime ;
2631+ recoveryStopName [0 ] = '\0' ;
2632+
2633+ ereport (LOG ,
2634+ (errmsg ("recovery stopping by hook before transaction %u, time %s" ,
2635+ recoveryStopXid ,
2636+ timestamptz_to_str (recoveryStopTime ))));
2637+ return true;
2638+ }
2639+ }
26202640 /* Otherwise we only consider stopping before COMMIT or ABORT records. */
2621- if (XLogRecGetRmid (record ) != RM_XACT_ID )
2641+ else if (XLogRecGetRmid (record ) != RM_XACT_ID )
26222642 return false;
26232643
26242644 xact_info = XLogRecGetInfo (record ) & XLOG_XACT_OPMASK ;
@@ -4556,6 +4576,8 @@ GetXLogReplayRecPtr(TimeLineID *replayTLI)
45564576
45574577GetReplayXlogPtrHookType GetReplayXlogPtrHook = NULL ;
45584578
4579+ RecoveryStopsBeforeHookType RecoveryStopsBeforeHook = NULL ;
4580+
45594581/*
45604582 * Get effective latest redo apply position.
45614583 *
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