gin-xlog-metapage-v1.patch

text/plain

Filename: gin-xlog-metapage-v1.patch
Type: text/plain
Part: 0
Message: Torn page hazard in ginRedoUpdateMetapage()

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: context
Series: patch v1
File+
src/backend/access/gin/ginxlog.c 6 0
*** a/src/backend/access/gin/ginxlog.c
--- b/src/backend/access/gin/ginxlog.c
***************
*** 492,504 **** ginRedoUpdateMetapage(XLogRecPtr lsn, XLogRecord *record)
  		return;					/* assume index was deleted, nothing to do */
  	metapage = BufferGetPage(metabuffer);
  
! 	if (!XLByteLE(lsn, PageGetLSN(metapage)))
! 	{
! 		memcpy(GinPageGetMeta(metapage), &data->metadata, sizeof(GinMetaPageData));
! 		PageSetLSN(metapage, lsn);
! 		PageSetTLI(metapage, ThisTimeLineID);
! 		MarkBufferDirty(metabuffer);
! 	}
  
  	if (data->ntuples > 0)
  	{
--- 492,503 ----
  		return;					/* assume index was deleted, nothing to do */
  	metapage = BufferGetPage(metabuffer);
  
! 	GinInitMetabuffer(metabuffer);
! 	memcpy(GinPageGetMeta(metapage), &data->metadata, sizeof(GinMetaPageData));
! 
! 	PageSetLSN(metapage, lsn);
! 	PageSetTLI(metapage, ThisTimeLineID);
! 	MarkBufferDirty(metabuffer);
  
  	if (data->ntuples > 0)
  	{