1 /*-------------------------------------------------------------------------
2  *
3  * receivelog.h
4  *
5  * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
6  *
7  * IDENTIFICATION
8  *		  src/bin/pg_basebackup/receivelog.h
9  *-------------------------------------------------------------------------
10  */
11 
12 #ifndef RECEIVELOG_H
13 #define RECEIVELOG_H
14 
15 #include "libpq-fe.h"
16 #include "walmethods.h"
17 
18 #include "access/xlogdefs.h"
19 
20 /*
21  * Called before trying to read more data or when a segment is
22  * finished. Return true to stop streaming.
23  */
24 typedef bool (*stream_stop_callback) (XLogRecPtr segendpos, uint32 timeline, bool segment_finished);
25 
26 /*
27  * Global parameters when receiving xlog stream. For details about the individual fields,
28  * see the function comment for ReceiveXlogStream().
29  */
30 typedef struct StreamCtl
31 {
32 	XLogRecPtr	startpos;		/* Start position for streaming */
33 	TimeLineID	timeline;		/* Timeline to stream data from */
34 	char	   *sysidentifier;	/* Validate this system identifier and
35 								 * timeline */
36 	int			standby_message_timeout;	/* Send status messages this often */
37 	bool		synchronous;	/* Flush immediately WAL data on write */
38 	bool		mark_done;		/* Mark segment as done in generated archive */
39 	bool		do_sync;		/* Flush to disk to ensure consistent state of
40 								 * data */
41 
42 	stream_stop_callback stream_stop;	/* Stop streaming when returns true */
43 
44 	pgsocket	stop_socket;	/* if valid, watch for input on this socket
45 								 * and check stream_stop() when there is any */
46 
47 	WalWriteMethod *walmethod;	/* How to write the WAL */
48 	char	   *partial_suffix; /* Suffix appended to partially received files */
49 	char	   *replication_slot;	/* Replication slot to use, or NULL */
50 	bool		temp_slot;		/* Create temporary replication slot */
51 } StreamCtl;
52 
53 
54 
55 extern bool CheckServerVersionForStreaming(PGconn *conn);
56 extern bool ReceiveXlogStream(PGconn *conn,
57 				  StreamCtl *stream);
58 
59 #endif							/* RECEIVELOG_H */
60