diff --git a/src/backend/access/gin/ginxlog.c b/src/backend/access/gin/ginxlog.c index f65a98d95ff31b976b3dee73dee2af8fd52d56de..a263a1350cf10fe49fc3cd993e310269bead7ae5 100644 --- a/src/backend/access/gin/ginxlog.c +++ b/src/backend/access/gin/ginxlog.c @@ -461,7 +461,9 @@ ginRedoSplit(XLogRecPtr lsn, XLogRecord *record) rbuffer; Page lpage, rpage; - uint32 flags = 0; + uint32 flags; + uint32 lflags, + rflags; char *payload; bool isLeaf = (data->flags & GIN_INSERT_ISLEAF) != 0; bool isData = (data->flags & GIN_INSERT_ISDATA) != 0; @@ -481,6 +483,7 @@ ginRedoSplit(XLogRecPtr lsn, XLogRecord *record) ginRedoClearIncompleteSplit(lsn, data->node, data->leftChildBlkno); } + flags = 0; if (isLeaf) flags |= GIN_LEAF; if (isData) @@ -488,15 +491,19 @@ ginRedoSplit(XLogRecPtr lsn, XLogRecord *record) if (isLeaf && isData) flags |= GIN_COMPRESSED; + lflags = rflags = flags; + if (!isRoot) + lflags |= GIN_INCOMPLETE_SPLIT; + lbuffer = XLogReadBuffer(data->node, data->lblkno, true); Assert(BufferIsValid(lbuffer)); lpage = (Page) BufferGetPage(lbuffer); - GinInitBuffer(lbuffer, flags); + GinInitBuffer(lbuffer, lflags); rbuffer = XLogReadBuffer(data->node, data->rblkno, true); Assert(BufferIsValid(rbuffer)); rpage = (Page) BufferGetPage(rbuffer); - GinInitBuffer(rbuffer, flags); + GinInitBuffer(rbuffer, rflags); GinPageGetOpaque(lpage)->rightlink = BufferGetBlockNumber(rbuffer); GinPageGetOpaque(rpage)->rightlink = isRoot ? InvalidBlockNumber : data->rrlink;