repmgrd: set primary last seen

This commit is contained in:
Ian Barwick
2018-11-16 17:53:55 +09:00
committed by Ian Barwick
parent 1458f6e6aa
commit 0caec90d81
3 changed files with 60 additions and 2 deletions

View File

@@ -3168,6 +3168,59 @@ is_downstream_node_attached(PGconn *conn, char *node_name)
return true;
}
void
set_primary_last_seen(PGconn *conn)
{
PQExpBufferData query;
PGresult *res = NULL;
initPQExpBuffer(&query);
appendPQExpBufferStr(&query,
"SELECT repmgr.set_primary_last_seen()");
res = PQexec(conn, query.data);
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
log_db_error(conn, query.data, _("unable to execute repmgr.set_primary_last_seen()"));
}
termPQExpBuffer(&query);
PQclear(res);
}
int
get_primary_last_seen(PGconn *conn)
{
PQExpBufferData query;
PGresult *res = NULL;
int primary_last_seen = -1;
initPQExpBuffer(&query);
appendPQExpBufferStr(&query,
"SELECT repmgr.get_primary_last_seen()");
res = PQexec(conn, query.data);
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
log_db_error(conn, query.data, _("unable to execute repmgr.get_primary_last_seen()"));
}
else
{
primary_last_seen = atoi(PQgetvalue(res, 0, 0));
}
termPQExpBuffer(&query);
PQclear(res);
return primary_last_seen;
}
void
clear_node_info_list(NodeInfoList *nodes)
{

View File

@@ -545,6 +545,8 @@ bool get_replication_info(PGconn *conn, ReplInfo *replication_info);
int get_replication_lag_seconds(PGconn *conn);
void get_node_replication_stats(PGconn *conn, int server_version_num, t_node_info *node_info);
bool is_downstream_node_attached(PGconn *conn, char *node_name);
void set_primary_last_seen(PGconn *conn);
int get_primary_last_seen(PGconn *conn);
/* BDR functions */
int get_bdr_version_num(void);

View File

@@ -805,7 +805,11 @@ monitor_streaming_standby(void)
while (true)
{
log_verbose(LOG_DEBUG, "checking %s", upstream_node_info.conninfo);
if (is_server_available(upstream_node_info.conninfo) == false)
if (is_server_available(upstream_node_info.conninfo) == true)
{
set_primary_last_seen(local_conn);
}
else
{
/* upstream node is down, we were expecting it to be up */
if (upstream_node_info.node_status == NODE_STATUS_UP)
@@ -1266,7 +1270,6 @@ loop:
check_connection(&local_node_info, &local_conn);
if (PQstatus(local_conn) != CONNECTION_OK)
{
if (local_node_info.active == true)