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.
Make sense. > > 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, > > @@ -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? I think we can avoid this. I will analyze and send update in my next patch. > > + * When wal_level=logical, write invalidations into WAL at each command end > to > + * support the decoding of the in-progress transaction. As of now it was > + * enough to log invalidation only at commit because we are only decoding > the > + * transaction at the commit time. We only need to log the catalog cache > and > + * relcache invalidation. There can not be any active MVCC scan in logical > + * decoding so we don't need to log the snapshot invalidation. > The alignment is not right. Will fix. > /* > * CommandEndInvalidationMessages > - * Process queued-up invalidation messages at end of one command > - * in a transaction. > + * Process queued-up invalidation messages at end of one command > + * in a transaction. > Looks unnecessary changes. Will fix. > > * Note: > - * This should be called during CommandCounterIncrement(), > - * after we have advanced the command ID. > + * This should be called during CommandCounterIncrement(), > + * after we have advanced the command ID. > */ > Looks unnecessary changes. Will fix. > if (transInvalInfo == NULL) > - return; > + return; > Looks unnecessary changes. > > + /* prepare record */ > + memset(&xlrec, 0, sizeof(xlrec)); > We should use MinSizeOfXactInvalidations, no? Right. -- Regards, Dilip Kumar EnterpriseDB: http://www.enterprisedb.com