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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy