1 /*-------------------------------------------------------------------------
2  * origin.h
3  *	   Exports from replication/logical/origin.c
4  *
5  * Copyright (c) 2013-2020, PostgreSQL Global Development Group
6  *
7  * src/include/replication/origin.h
8  *-------------------------------------------------------------------------
9  */
10 #ifndef PG_ORIGIN_H
11 #define PG_ORIGIN_H
12 
13 #include "access/xlog.h"
14 #include "access/xlogdefs.h"
15 #include "access/xlogreader.h"
16 #include "catalog/pg_replication_origin.h"
17 
18 typedef struct xl_replorigin_set
19 {
20 	XLogRecPtr	remote_lsn;
21 	RepOriginId node_id;
22 	bool		force;
23 } xl_replorigin_set;
24 
25 typedef struct xl_replorigin_drop
26 {
27 	RepOriginId node_id;
28 } xl_replorigin_drop;
29 
30 #define XLOG_REPLORIGIN_SET		0x00
31 #define XLOG_REPLORIGIN_DROP		0x10
32 
33 #define InvalidRepOriginId 0
34 #define DoNotReplicateId PG_UINT16_MAX
35 
36 extern PGDLLIMPORT RepOriginId replorigin_session_origin;
37 extern PGDLLIMPORT XLogRecPtr replorigin_session_origin_lsn;
38 extern PGDLLIMPORT TimestampTz replorigin_session_origin_timestamp;
39 
40 /* API for querying & manipulating replication origins */
41 extern RepOriginId replorigin_by_name(char *name, bool missing_ok);
42 extern RepOriginId replorigin_create(char *name);
43 extern void replorigin_drop(RepOriginId roident, bool nowait);
44 extern bool replorigin_by_oid(RepOriginId roident, bool missing_ok,
45 							  char **roname);
46 
47 /* API for querying & manipulating replication progress tracking */
48 extern void replorigin_advance(RepOriginId node,
49 							   XLogRecPtr remote_commit,
50 							   XLogRecPtr local_commit,
51 							   bool go_backward, bool wal_log);
52 extern XLogRecPtr replorigin_get_progress(RepOriginId node, bool flush);
53 
54 extern void replorigin_session_advance(XLogRecPtr remote_commit,
55 									   XLogRecPtr local_commit);
56 extern void replorigin_session_setup(RepOriginId node);
57 extern void replorigin_session_reset(void);
58 extern XLogRecPtr replorigin_session_get_progress(bool flush);
59 
60 /* Checkpoint/Startup integration */
61 extern void CheckPointReplicationOrigin(void);
62 extern void StartupReplicationOrigin(void);
63 
64 /* WAL logging */
65 void		replorigin_redo(XLogReaderState *record);
66 void		replorigin_desc(StringInfo buf, XLogReaderState *record);
67 const char *replorigin_identify(uint8 info);
68 
69 /* shared memory allocation */
70 extern Size ReplicationOriginShmemSize(void);
71 extern void ReplicationOriginShmemInit(void);
72 
73 #endif							/* PG_ORIGIN_H */
74