mirror of
https://github.com/postgres/postgres.git
synced 2025-10-25 13:17:41 +03:00
Change WAL-logging scheme for multixacts to be more like regular
transaction IDs, rather than like subtrans; in particular, the information now survives a database restart. Per previous discussion, this is essential for PITR log shipping and for 2PC.
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/access/htup.h,v 1.74 2005/04/28 21:47:17 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/include/access/htup.h,v 1.75 2005/06/08 15:50:27 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -505,6 +505,8 @@ typedef struct xl_heap_newpage
|
||||
typedef struct xl_heap_lock
|
||||
{
|
||||
xl_heaptid target; /* locked tuple id */
|
||||
TransactionId locking_xid; /* might be a MultiXactId not xid */
|
||||
bool xid_is_mxact; /* is it? */
|
||||
bool shared_lock; /* shared or exclusive row lock? */
|
||||
} xl_heap_lock;
|
||||
|
||||
|
||||
@@ -6,16 +6,38 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/access/multixact.h,v 1.2 2005/05/03 19:42:41 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/include/access/multixact.h,v 1.3 2005/06/08 15:50:28 tgl Exp $
|
||||
*/
|
||||
#ifndef MULTIXACT_H
|
||||
#define MULTIXACT_H
|
||||
|
||||
#include "access/xlog.h"
|
||||
|
||||
#define InvalidMultiXactId ((MultiXactId) 0)
|
||||
#define FirstMultiXactId ((MultiXactId) 1)
|
||||
|
||||
#define MultiXactIdIsValid(multi) ((multi) != InvalidMultiXactId)
|
||||
|
||||
/* ----------------
|
||||
* multixact-related XLOG entries
|
||||
* ----------------
|
||||
*/
|
||||
|
||||
#define XLOG_MULTIXACT_ZERO_OFF_PAGE 0x00
|
||||
#define XLOG_MULTIXACT_ZERO_MEM_PAGE 0x10
|
||||
#define XLOG_MULTIXACT_CREATE_ID 0x20
|
||||
|
||||
typedef struct xl_multixact_create
|
||||
{
|
||||
MultiXactId mid; /* new MultiXact's ID */
|
||||
MultiXactOffset moff; /* its starting offset in members file */
|
||||
int32 nxids; /* number of member XIDs */
|
||||
TransactionId xids[1]; /* VARIABLE LENGTH ARRAY */
|
||||
} xl_multixact_create;
|
||||
|
||||
#define MinSizeOfMultiXactCreate offsetof(xl_multixact_create, xids)
|
||||
|
||||
|
||||
extern MultiXactId MultiXactIdCreate(TransactionId xid1, TransactionId xid2);
|
||||
extern MultiXactId MultiXactIdExpand(MultiXactId multi, TransactionId xid);
|
||||
extern bool MultiXactIdIsRunning(MultiXactId multi);
|
||||
@@ -29,9 +51,16 @@ extern void MultiXactShmemInit(void);
|
||||
extern void BootStrapMultiXact(void);
|
||||
extern void StartupMultiXact(void);
|
||||
extern void ShutdownMultiXact(void);
|
||||
extern MultiXactId MultiXactGetCheckptMulti(bool is_shutdown);
|
||||
extern void MultiXactGetCheckptMulti(bool is_shutdown,
|
||||
MultiXactId *nextMulti,
|
||||
MultiXactOffset *nextMultiOffset);
|
||||
extern void CheckPointMultiXact(void);
|
||||
extern void MultiXactSetNextMXact(MultiXactId nextMulti);
|
||||
extern void MultiXactAdvanceNextMXact(MultiXactId minMulti);
|
||||
extern void MultiXactSetNextMXact(MultiXactId nextMulti,
|
||||
MultiXactOffset nextMultiOffset);
|
||||
extern void MultiXactAdvanceNextMXact(MultiXactId minMulti,
|
||||
MultiXactOffset minMultiOffset);
|
||||
|
||||
extern void multixact_redo(XLogRecPtr lsn, XLogRecord *record);
|
||||
extern void multixact_desc(char *buf, uint8 xl_info, char *rec);
|
||||
|
||||
#endif /* MULTIXACT_H */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/access/xlog.h,v 1.64 2005/06/06 20:22:58 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/include/access/xlog.h,v 1.65 2005/06/08 15:50:28 tgl Exp $
|
||||
*/
|
||||
#ifndef XLOG_H
|
||||
#define XLOG_H
|
||||
@@ -165,7 +165,6 @@ extern void ShutdownXLOG(int code, Datum arg);
|
||||
extern void InitXLOGAccess(void);
|
||||
extern void CreateCheckPoint(bool shutdown, bool force);
|
||||
extern void XLogPutNextOid(Oid nextOid);
|
||||
extern void XLogPutNextMultiXactId(MultiXactId multi);
|
||||
extern XLogRecPtr GetRedoRecPtr(void);
|
||||
|
||||
#endif /* XLOG_H */
|
||||
|
||||
Reference in New Issue
Block a user