On Mon, Apr 13, 2020 at 6:12 PM Kuntal Ghosh <kuntalghosh.2...@gmail.com> wrote: > > On Mon, Apr 13, 2020 at 5:20 PM Dilip Kumar <dilipbal...@gmail.com> wrote: > > On Mon, Apr 13, 2020 at 4:14 PM Kuntal Ghosh <kuntalghosh.2...@gmail.com> > > wrote: > > > > > > +#define SizeOfTransactionId (sizeof(TransactionId) + sizeof(char)) > > > This looks wrong. We should change the name of this Macro or we can > > > add the 1 byte directly in HEADER_SCRATCH_SIZE and some comments. > > > > I think this is in sync with below code (SizeOfXlogOrigin), SO doen't > > make much sense to add different terminology no? > > #define SizeOfXlogOrigin (sizeof(RepOriginId) + sizeof(char)) > > +#define SizeOfTransactionId (sizeof(TransactionId) + sizeof(char)) > > > In that case, we can rename this, for example, SizeOfXLogTransactionId. > > Some review comments from 0002-Issue-individual-*.path, > > +void > +ReorderBufferAddInvalidation(ReorderBuffer *rb, TransactionId xid, > + XLogRecPtr lsn, int nmsgs, > + SharedInvalidationMessage *msgs) > +{ > + MemoryContext oldcontext; > + ReorderBufferChange *change; > + > + /* XXX Should we even write invalidations without valid XID? */ > + if (xid == InvalidTransactionId) > + return; > + > + Assert(xid != InvalidTransactionId); > > It seems we don't call the function if xid is not valid. In fact, >
You have a valid point. Also, it is not clear if we are first checking (xid == InvalidTransactionId) and returning from the function, how can even Assert hit. > @@ -281,6 +281,24 @@ DecodeXactOp(LogicalDecodingContext *ctx, > XLogRecordBuffer *buf) > } > case XLOG_XACT_ASSIGNMENT: > break; > + case XLOG_XACT_INVALIDATIONS: > + { > + TransactionId xid; > + xl_xact_invalidations *invals; > + > + xid = XLogRecGetXid(r); > + invals = (xl_xact_invalidations *) XLogRecGetData(r); > + > + if (!TransactionIdIsValid(xid)) > + break; > + > + ReorderBufferAddInvalidation(reorder, xid, buf->origptr, > + invals->nmsgs, invals->msgs); > > Why should we insert an WAL record for such cases? > Right, if there is any such case, we should avoid it. One more point about this patch, the commit message needs to be updated: > The new invalidations are written to WAL immediately, without any such caching. Perhaps it would be possible to add similar caching, > e.g. at the command level, or something like that? I think the above part of commit message is not right as the patch already does such a caching now at the command level. -- With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com