Files
openGauss-server/src/include/replication/origin.h
2021-12-16 23:16:24 +08:00

99 lines
2.8 KiB
C

/* -------------------------------------------------------------------------
* origin.h
* Exports from replication/logical/origin.c
*
* Copyright (c) 2013-2017, PostgreSQL Global Development Group
*
* src/include/replication/origin.h
* -------------------------------------------------------------------------
*/
#ifndef PG_ORIGIN_H
#define PG_ORIGIN_H
#include "fmgr.h"
#include "access/xlog.h"
#include "access/xlogdefs.h"
#include "access/xlogreader.h"
#include "catalog/pg_replication_origin.h"
typedef struct xl_replorigin_set {
XLogRecPtr remote_lsn;
RepOriginId node_id;
bool force;
} xl_replorigin_set;
typedef struct xl_replorigin_drop {
RepOriginId node_id;
} xl_replorigin_drop;
/*
* Replay progress of a single remote node.
*/
typedef struct ReplicationState {
/*
* Local identifier for the remote node.
*/
RepOriginId roident;
/*
* Location of the latest commit from the remote side.
*/
XLogRecPtr remote_lsn;
/*
* Remember the local lsn of the commit record so we can XLogFlush() to it
* during a checkpoint so we know the commit record actually is safe on
* disk.
*/
XLogRecPtr local_lsn;
/*
* PID of backend that's acquired slot, or 0 if none.
*/
ThreadId acquired_by;
/*
* Lock protecting remote_lsn and local_lsn.
*/
LWLock lock;
} ReplicationState;
typedef struct ReplicationStateShmStruct {
int tranche_id;
ReplicationState states[FLEXIBLE_ARRAY_MEMBER];
} ReplicationStateShmStruct;
#define XLOG_REPLORIGIN_SET 0x00
#define XLOG_REPLORIGIN_DROP 0x10
#define InvalidRepOriginId 0
#define DoNotReplicateId PG_UINT16_MAX
/* API for querying & manipulating replication origins */
extern RepOriginId replorigin_by_name(const char *name, bool missing_ok);
extern RepOriginId replorigin_create(const char *name);
extern void replorigin_drop_by_name(const char *name, bool missing_ok);
extern bool replorigin_by_oid(RepOriginId roident, bool missing_ok, char **roname);
/* API for querying & manipulating replication progress tracking */
extern void replorigin_advance(RepOriginId node, XLogRecPtr remote_commit, XLogRecPtr local_commit, bool go_backward,
bool wal_log);
extern void replorigin_session_advance(XLogRecPtr remote_commit, XLogRecPtr local_commit);
extern void replorigin_session_setup(RepOriginId node);
extern XLogRecPtr replorigin_session_get_progress(bool flush);
/* Checkpoint/Startup integration */
extern void CheckPointReplicationOrigin(void);
extern void StartupReplicationOrigin(void);
/* WAL logging */
void replorigin_redo(XLogReaderState *record);
void replorigin_desc(StringInfo buf, XLogReaderState *record);
/* shared memory allocation */
extern Size ReplicationOriginShmemSize(void);
extern void ReplicationOriginShmemInit(void);
#endif /* PG_ORIGIN_H */