mirror of
https://github.com/postgres/postgres.git
synced 2025-08-24 09:27:52 +03:00
Split index xlog headers from other private index headers.
The xlog-specific headers need to be included in both frontend code - specifically, pg_waldump - and the backend, but the remainder of the private headers for each index are only needed by the backend. By splitting the xlog stuff out into separate headers, pg_waldump pulls in fewer backend headers, which is a good thing. Patch by me, reviewed by Michael Paquier and Andres Freund, per a complaint from Dilip Kumar. Discussion: http://postgr.es/m/CA+TgmoZ=F=GkxV0YEv-A8tb+AEGy_Qa7GSiJ8deBKFATnzfEug@mail.gmail.com
This commit is contained in:
@@ -17,7 +17,6 @@
|
||||
#include "access/amapi.h"
|
||||
#include "access/gist.h"
|
||||
#include "access/itup.h"
|
||||
#include "access/xlogreader.h"
|
||||
#include "fmgr.h"
|
||||
#include "lib/pairingheap.h"
|
||||
#include "storage/bufmgr.h"
|
||||
@@ -177,51 +176,7 @@ typedef struct GISTScanOpaqueData
|
||||
|
||||
typedef GISTScanOpaqueData *GISTScanOpaque;
|
||||
|
||||
|
||||
/* XLog stuff */
|
||||
|
||||
#define XLOG_GIST_PAGE_UPDATE 0x00
|
||||
/* #define XLOG_GIST_NEW_ROOT 0x20 */ /* not used anymore */
|
||||
#define XLOG_GIST_PAGE_SPLIT 0x30
|
||||
/* #define XLOG_GIST_INSERT_COMPLETE 0x40 */ /* not used anymore */
|
||||
#define XLOG_GIST_CREATE_INDEX 0x50
|
||||
/* #define XLOG_GIST_PAGE_DELETE 0x60 */ /* not used anymore */
|
||||
|
||||
/*
|
||||
* Backup Blk 0: updated page.
|
||||
* Backup Blk 1: If this operation completes a page split, by inserting a
|
||||
* downlink for the split page, the left half of the split
|
||||
*/
|
||||
typedef struct gistxlogPageUpdate
|
||||
{
|
||||
/* number of deleted offsets */
|
||||
uint16 ntodelete;
|
||||
uint16 ntoinsert;
|
||||
|
||||
/*
|
||||
* In payload of blk 0 : 1. todelete OffsetNumbers 2. tuples to insert
|
||||
*/
|
||||
} gistxlogPageUpdate;
|
||||
|
||||
/*
|
||||
* Backup Blk 0: If this operation completes a page split, by inserting a
|
||||
* downlink for the split page, the left half of the split
|
||||
* Backup Blk 1 - npage: split pages (1 is the original page)
|
||||
*/
|
||||
typedef struct gistxlogPageSplit
|
||||
{
|
||||
BlockNumber origrlink; /* rightlink of the page before split */
|
||||
GistNSN orignsn; /* NSN of the page before split */
|
||||
bool origleaf; /* was splitted page a leaf page? */
|
||||
|
||||
uint16 npage; /* # of pages in the split */
|
||||
bool markfollowright; /* set F_FOLLOW_RIGHT flags */
|
||||
|
||||
/*
|
||||
* follow: 1. gistxlogPage and array of IndexTupleData per page
|
||||
*/
|
||||
} gistxlogPageSplit;
|
||||
|
||||
/* despite the name, gistxlogPage is not part of any xlog record */
|
||||
typedef struct gistxlogPage
|
||||
{
|
||||
BlockNumber blkno;
|
||||
@@ -454,14 +409,6 @@ extern bool gistplacetopage(Relation rel, Size freespace, GISTSTATE *giststate,
|
||||
extern SplitedPageLayout *gistSplit(Relation r, Page page, IndexTuple *itup,
|
||||
int len, GISTSTATE *giststate);
|
||||
|
||||
/* gistxlog.c */
|
||||
extern void gist_redo(XLogReaderState *record);
|
||||
extern void gist_desc(StringInfo buf, XLogReaderState *record);
|
||||
extern const char *gist_identify(uint8 info);
|
||||
extern void gist_xlog_startup(void);
|
||||
extern void gist_xlog_cleanup(void);
|
||||
extern void gist_mask(char *pagedata, BlockNumber blkno);
|
||||
|
||||
extern XLogRecPtr gistXLogUpdate(Buffer buffer,
|
||||
OffsetNumber *todelete, int ntodelete,
|
||||
IndexTuple *itup, int ntup,
|
||||
|
Reference in New Issue
Block a user