On Tue, Apr 2, 2024 at 1:54 PM Bertrand Drouvot <bertranddrouvot...@gmail.com> wrote: > > On Tue, Apr 02, 2024 at 07:20:46AM +0000, Zhijie Hou (Fujitsu) wrote: > > I added one test in 040_standby_failover_slots_sync.pl in 0002 patch, which > > can > > reproduce the data loss issue consistently on my machine. > > Thanks! > > > It may not reproduce > > in some rare cases if concurrent xl_running_xacts are written by bgwriter, > > but > > I think it's still valuable if it can verify the fix in most cases. > > What about adding a "wait" injection point in LogStandbySnapshot() to prevent > checkpointer/bgwriter to log a standby snapshot? Something among those lines: > > if (AmCheckpointerProcess() || AmBackgroundWriterProcess()) > INJECTION_POINT("bgw-log-standby-snapshot"); > > And make use of it in the test, something like: > > $node_primary->safe_psql('postgres', > "SELECT injection_points_attach('bgw-log-standby-snapshot', > 'wait');"); >
Sometimes we want the checkpoint to log the standby snapshot as we need it at a predictable time, maybe one can use pg_log_standby_snapshot() instead of that. Can we add an injection point as a separate patch/commit after a bit more discussion? I want to discuss this in a separate thread so that later we should not get an objection to adding an injection_point at this location. One other idea to make such tests predictable is to add a developer-specific GUC say debug_bg_log_standby_snapshot or something like that but injection point sounds like a better idea. -- With Regards, Amit Kapila.