On Fri, Oct 1, 2021 at 12:32 AM Robert Haas <robertmh...@gmail.com> wrote: > > On Thu, Sep 30, 2021 at 6:08 AM Amit Kapila <amit.kapil...@gmail.com> wrote: > > I think we can do better than using XLOG_INCLUDE_XID flag in the > > record being inserted. We need this flag so that we can mark > > SubTransaction assigned after XLogInsertRecord() is successful. We > > can instead output a flag (say sub_xact_assigned) from > > XLogRecordAssemble() and pass it to XLogInsertRecord(). Then in > > XLogInsertRecord(), we can mark SubTransactionAssigned once the record > > is inserted (after or before calling > > MarkCurrentTransactionIdLoggedIfAny()). > > Isn't there other communication between these routines that just uses > global variables? >
AFAICS, there are two possibilities w.r.t global variables: (a) use curinsert_flags which we are doing now, (b) another is to introduce a new global variable, set it after we make the association, and then reset it after we mark SubTransaction assigned and on error. I have also thought of passing it via XLogCtlInsert but as that is shared by different processes, it can be set by one process and be read by another process which we don't want here. I am not sure if any of these is better than doing this communication via local variable. Do you have something specific in mind? -- With Regards, Amit Kapila.