Detect and store BDR major version number when executing "is_bdr_db()"

BDR3 metadata structure is very different to BDR1/2, so we'll need to
generate queries according to version.
This commit is contained in:
Ian Barwick
2018-04-13 17:40:49 +09:00
committed by Ian Barwick
parent 029ba46470
commit 4f642f8332
2 changed files with 16 additions and 3 deletions

View File

@@ -33,6 +33,12 @@
/* mainly for use by repmgrd */
int server_version_num = UNKNOWN_SERVER_VERSION_NUM;
/*
* This is set by is_bdr_db(), which is called by every BDR-related
* action anyway; this is required to be able to generate appropriate
* queries for versions 2 and 3.
*/
int bdr_version_num = UNKNOWN_BDR_VERSION_NUM;
static PGconn *_establish_db_connection(const char *conninfo,
const bool exit_on_error,
@@ -4321,7 +4327,9 @@ _is_bdr_db(PGconn *conn, PQExpBufferData *output, bool quiet)
initPQExpBuffer(&query);
appendPQExpBuffer(&query,
"SELECT pg_catalog.count(*) FROM pg_catalog.pg_extension WHERE extname='bdr'");
" SELECT (pg_catalog.regexp_match(extversion, '^\\d+'))[1] AS major_version "
" FROM pg_catalog.pg_extension "
" WHERE extname = 'bdr' ");
res = PQexec(conn, query.data);
termPQExpBuffer(&query);
@@ -4329,10 +4337,12 @@ _is_bdr_db(PGconn *conn, PQExpBufferData *output, bool quiet)
if (PQresultStatus(res) != PGRES_TUPLES_OK || PQntuples(res) == 0)
{
is_bdr_db = false;
bdr_version_num = UNKNOWN_BDR_VERSION_NUM;
}
else
{
is_bdr_db = atoi(PQgetvalue(res, 0, 0)) == 1 ? true : false;
is_bdr_db = true;
bdr_version_num = atoi(PQgetvalue(res, 0, 0));
}
PQclear(res);
@@ -4373,12 +4383,14 @@ _is_bdr_db(PGconn *conn, PQExpBufferData *output, bool quiet)
return is_bdr_db;
}
bool
is_bdr_db(PGconn *conn, PQExpBufferData *output)
{
return _is_bdr_db(conn, output, false);
}
bool
is_bdr_db_quiet(PGconn *conn)
{
@@ -4386,7 +4398,6 @@ is_bdr_db_quiet(PGconn *conn)
}
bool
is_active_bdr_node(PGconn *conn, const char *node_name)
{

View File

@@ -49,6 +49,8 @@
#define REPLICATION_TYPE_BDR 2
#define UNKNOWN_SERVER_VERSION_NUM -1
#define UNKNOWN_BDR_VERSION_NUM -1
#define UNKNOWN_TIMELINE_ID -1
#define UNKNOWN_SYSTEM_IDENTIFIER 0