On Tues, Aug 17, 2021 1:01 PM Masahiko Sawada <sawada.m...@gmail.com> wrote: > On Mon, Aug 16, 2021 at 3:59 PM houzj.f...@fujitsu.com > <houzj.f...@fujitsu.com> wrote: > > 3) > > Do we need to invoke set_apply_error_context_xact() in the function > > apply_handle_stream_prepare() to save the xid and timestamp ? > > Yes. I think that v8-0001 patch already set xid and timestamp just after > parsing > stream_prepare message. You meant it's not necessary?
Sorry, I thought of something wrong, please ignore the above comment. > > I'll submit the updated patches soon. I was thinking about the place to set the errcallback.callback. apply_dispatch(StringInfo s) { LogicalRepMsgType action = pq_getmsgbyte(s); + ErrorContextCallback errcallback; + bool set_callback = false; + + /* + * Push apply error context callback if not yet. Other fields will be + * filled during applying the change. Since this function can be called + * recursively when applying spooled changes, we set the callback only + * once. + */ + if (apply_error_callback_arg.command == 0) + { + errcallback.callback = apply_error_callback; + errcallback.previous = error_context_stack; + error_context_stack = &errcallback; + set_callback = true; + } ... + /* Pop the error context stack */ + if (set_callback) + error_context_stack = errcallback.previous; It seems we can put the above code in the function LogicalRepApplyLoop() around invoking apply_dispatch(), and in that approach we don't need to worry about the recursively case. What do you think ? Best regards, Hou zj