Skip to content

Commit 69039fd

Browse files
committed
Add walreceiver API to get remote server version
Add a separate walreceiver API function walrcv_server_version() to get the version of the remote server, instead of doing it as part of walrcv_identify_system(). This allows the server version to be available even for uses that don't call IDENTIFY_SYSTEM, and it seems cleaner anyway. This is for an upcoming patch, not currently used. Reviewed-by: Michael Paquier <michael@paquier.xyz> Discussion: https://www.postgresql.org/message-id/20190115071359.GF1433@paquier.xyz
1 parent 4e197bf commit 69039fd

File tree

4 files changed

+22
-16
lines changed

4 files changed

+22
-16
lines changed

src/backend/replication/libpqwalreceiver/libpqwalreceiver.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ static char *libpqrcv_get_conninfo(WalReceiverConn *conn);
5656
static void libpqrcv_get_senderinfo(WalReceiverConn *conn,
5757
char **sender_host, int *sender_port);
5858
static char *libpqrcv_identify_system(WalReceiverConn *conn,
59-
TimeLineID *primary_tli,
60-
int *server_version);
59+
TimeLineID *primary_tli);
60+
static int libpqrcv_server_version(WalReceiverConn *conn);
6161
static void libpqrcv_readtimelinehistoryfile(WalReceiverConn *conn,
6262
TimeLineID tli, char **filename,
6363
char **content, int *len);
@@ -86,6 +86,7 @@ static WalReceiverFunctionsType PQWalReceiverFunctions = {
8686
libpqrcv_get_conninfo,
8787
libpqrcv_get_senderinfo,
8888
libpqrcv_identify_system,
89+
libpqrcv_server_version,
8990
libpqrcv_readtimelinehistoryfile,
9091
libpqrcv_startstreaming,
9192
libpqrcv_endstreaming,
@@ -309,8 +310,7 @@ libpqrcv_get_senderinfo(WalReceiverConn *conn, char **sender_host,
309310
* timeline ID of the primary.
310311
*/
311312
static char *
312-
libpqrcv_identify_system(WalReceiverConn *conn, TimeLineID *primary_tli,
313-
int *server_version)
313+
libpqrcv_identify_system(WalReceiverConn *conn, TimeLineID *primary_tli)
314314
{
315315
PGresult *res;
316316
char *primary_sysid;
@@ -343,11 +343,18 @@ libpqrcv_identify_system(WalReceiverConn *conn, TimeLineID *primary_tli,
343343
*primary_tli = pg_strtoint32(PQgetvalue(res, 0, 1));
344344
PQclear(res);
345345

346-
*server_version = PQserverVersion(conn->streamConn);
347-
348346
return primary_sysid;
349347
}
350348

349+
/*
350+
* Thin wrapper around libpq to obtain server version.
351+
*/
352+
static int
353+
libpqrcv_server_version(WalReceiverConn *conn)
354+
{
355+
return PQserverVersion(conn->streamConn);
356+
}
357+
351358
/*
352359
* Start streaming WAL data from given streaming options.
353360
*

src/backend/replication/logical/worker.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1674,7 +1674,6 @@ ApplyWorkerMain(Datum main_arg)
16741674
RepOriginId originid;
16751675
TimeLineID startpointTLI;
16761676
char *err;
1677-
int server_version;
16781677

16791678
myslotname = MySubscription->slotname;
16801679

@@ -1708,8 +1707,7 @@ ApplyWorkerMain(Datum main_arg)
17081707
* We don't really use the output identify_system for anything but it
17091708
* does some initializations on the upstream so let's still call it.
17101709
*/
1711-
(void) walrcv_identify_system(wrconn, &startpointTLI,
1712-
&server_version);
1710+
(void) walrcv_identify_system(wrconn, &startpointTLI);
17131711

17141712
}
17151713

src/backend/replication/walreceiver.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -330,16 +330,14 @@ WalReceiverMain(void)
330330
{
331331
char *primary_sysid;
332332
char standby_sysid[32];
333-
int server_version;
334333
WalRcvStreamOptions options;
335334

336335
/*
337336
* Check that we're connected to a valid server using the
338337
* IDENTIFY_SYSTEM replication command.
339338
*/
340339
EnableWalRcvImmediateExit();
341-
primary_sysid = walrcv_identify_system(wrconn, &primaryTLI,
342-
&server_version);
340+
primary_sysid = walrcv_identify_system(wrconn, &primaryTLI);
343341

344342
snprintf(standby_sysid, sizeof(standby_sysid), UINT64_FORMAT,
345343
GetSystemIdentifier());

src/include/replication/walreceiver.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -209,8 +209,8 @@ typedef void (*walrcv_get_senderinfo_fn) (WalReceiverConn *conn,
209209
char **sender_host,
210210
int *sender_port);
211211
typedef char *(*walrcv_identify_system_fn) (WalReceiverConn *conn,
212-
TimeLineID *primary_tli,
213-
int *server_version);
212+
TimeLineID *primary_tli);
213+
typedef int (*walrcv_server_version_fn) (WalReceiverConn *conn);
214214
typedef void (*walrcv_readtimelinehistoryfile_fn) (WalReceiverConn *conn,
215215
TimeLineID tli,
216216
char **filename,
@@ -240,6 +240,7 @@ typedef struct WalReceiverFunctionsType
240240
walrcv_get_conninfo_fn walrcv_get_conninfo;
241241
walrcv_get_senderinfo_fn walrcv_get_senderinfo;
242242
walrcv_identify_system_fn walrcv_identify_system;
243+
walrcv_server_version_fn walrcv_server_version;
243244
walrcv_readtimelinehistoryfile_fn walrcv_readtimelinehistoryfile;
244245
walrcv_startstreaming_fn walrcv_startstreaming;
245246
walrcv_endstreaming_fn walrcv_endstreaming;
@@ -260,8 +261,10 @@ extern PGDLLIMPORT WalReceiverFunctionsType *WalReceiverFunctions;
260261
WalReceiverFunctions->walrcv_get_conninfo(conn)
261262
#define walrcv_get_senderinfo(conn, sender_host, sender_port) \
262263
WalReceiverFunctions->walrcv_get_senderinfo(conn, sender_host, sender_port)
263-
#define walrcv_identify_system(conn, primary_tli, server_version) \
264-
WalReceiverFunctions->walrcv_identify_system(conn, primary_tli, server_version)
264+
#define walrcv_identify_system(conn, primary_tli) \
265+
WalReceiverFunctions->walrcv_identify_system(conn, primary_tli)
266+
#define walrcv_server_version(conn) \
267+
WalReceiverFunctions->walrcv_server_version(conn)
265268
#define walrcv_readtimelinehistoryfile(conn, tli, filename, content, size) \
266269
WalReceiverFunctions->walrcv_readtimelinehistoryfile(conn, tli, filename, content, size)
267270
#define walrcv_startstreaming(conn, options) \

0 commit comments

Comments
 (0)