On Tue, Apr 14, 2020 at 2:57 PM Amit Kapila <amit.kapil...@gmail.com> wrote: > > 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.
I have changed to code, now we only have an assert. > > > @@ -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. I think we don't have any such case because we are logging at the command end. So I have created an assert instead of the check. > 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. Right, I have removed that. -- Regards, Dilip Kumar EnterpriseDB: http://www.enterprisedb.com