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