On Fri, Jun 18, 2021 at 7:43 AM Peter Smith <smithpb2...@gmail.com> wrote: > > On Thu, Jun 17, 2021 at 6:22 PM Greg Nancarrow <gregn4...@gmail.com> wrote: > > > > For example, in the v86-0001 patch: > > > > +/* > > + * Handle PREPARE message. > > + */ > > +static void > > +apply_handle_prepare(StringInfo s) > > +{ > > + LogicalRepPreparedTxnData prepare_data; > > + char gid[GIDSIZE]; > > + > > + logicalrep_read_prepare(s, &prepare_data); > > + > > + Assert(prepare_data.prepare_lsn == remote_final_lsn); > > > > The above Assert() should be changed to something like: > > > > + if (prepare_data.prepare_lsn != remote_final_lsn) > > + ereport(ERROR, > > + (errcode(ERRCODE_PROTOCOL_VIOLATION), > > + errmsg_internal("incorrect prepare LSN %X/%X in > > prepare message (expected %X/%X)", > > + LSN_FORMAT_ARGS(prepare_data.prepare_lsn), > > + LSN_FORMAT_ARGS(remote_final_lsn)))); > > > > Without being more familiar with this code, it's difficult for me to > > judge exactly how many of such cases are in these patches. > > Thanks for the above example. I will fix this one later, after > receiving some more reviews and reports of other Assert cases just > like this one. >
I think on similar lines below asserts also need to be changed. 1. +static void +apply_handle_begin_prepare(StringInfo s) +{ + LogicalRepPreparedTxnData begin_data; + char gid[GIDSIZE]; + + /* Tablesync should never receive prepare. */ + Assert(!am_tablesync_worker()); 2. +static void +TwoPhaseTransactionGid(Oid subid, TransactionId xid, char *gid, int szgid) +{ .. + Assert(TransactionIdIsValid(xid)); 3. +static void +apply_handle_stream_prepare(StringInfo s) +{ + int nchanges = 0; + LogicalRepPreparedTxnData prepare_data; + TransactionId xid; + char gid[GIDSIZE]; + .. .. + + /* Tablesync should never receive prepare. */ + Assert(!am_tablesync_worker()); -- With Regards, Amit Kapila.