Skip to content

Commit

Permalink
A few changes from repmgrd and improve the SQL of the repl_status
Browse files Browse the repository at this point in the history
view in order to actually show something useful
  • Loading branch information
Jaime Casanova authored and Jaime Casanova committed Oct 1, 2010
1 parent 533a4e3 commit 5cd9e39
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 21 deletions.
2 changes: 1 addition & 1 deletion repmgr.c
Expand Up @@ -817,7 +817,7 @@ copy_remote_files(char *host, char *remote_path, char *local_path, bool is_direc
if (is_directory)
{
strcat(options, " --archive --exclude=pg_xlog* --exclude=pg_control");
sprintf(script, "rsync %s %s:%s %s",
sprintf(script, "rsync %s %s:%s/* %s",
options, host, remote_path, local_path);
}
else
Expand Down
22 changes: 17 additions & 5 deletions repmgr.sql
Expand Up @@ -26,11 +26,23 @@ CREATE TABLE repl_monitor (


/*
* A useful view
* This view shows the latest monitor info about every node.
* Interesting thing to see:
* replication_lag: in bytes (this is how far the latest xlog record
* we have received is from master)
* apply_lag: in bytes (this is how far the latest xlog record
* we have applied is from the latest record we
* have received)
* time-lag: how many seconds are we from being up-to-date with master
*/
drop view if exists repl_status;
CREATE VIEW repl_status AS
SELECT *, now() - (select max(last_monitor_time) from repl_monitor b
where b.primary_node = a.primary_node
and b.standby_node = a.standby_node)
FROM repl_monitor a;
WITH monitor_info AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY primary_node, standby_node
ORDER BY last_monitor_time desc)
FROM repl_monitor)
SELECT primary_node, standby_node, last_monitor_time, last_wal_primary_location,
last_wal_standby_location, pg_size_pretty(replication_lag) replication_lag,
pg_size_pretty(apply_lag) apply_lag,
age(now(), last_monitor_time) AS time_lag
FROM monitor_info a
WHERE row_number = 1;
34 changes: 19 additions & 15 deletions repmgrd.c
Expand Up @@ -33,14 +33,14 @@ bool verbose = false;


static void help(const char *progname);
void checkClusterConfiguration(void);
void checkNodeConfiguration(char *conninfo);
void getPrimaryConnection(void);
static void checkClusterConfiguration(void);
static void checkNodeConfiguration(char *conninfo);
static void getPrimaryConnection(void);

void MonitorCheck(void);
void MonitorExecute(void);
static void MonitorCheck(void);
static void MonitorExecute(void);

unsigned long long int walLocationToBytes(char *wal_location);
static unsigned long long int walLocationToBytes(char *wal_location);


int
Expand Down Expand Up @@ -111,6 +111,13 @@ main(int argc, char **argv)
* and start monitor
*/
myLocalMode = is_standby(myLocalConn) ? STANDBY_MODE : PRIMARY_MODE;
if (myLocalMode == PRIMARY_MODE)
{
primaryId = myLocalId;
strcpy(primaryConninfo, conninfo);
primaryConn = myLocalConn;
}

checkClusterConfiguration();
checkNodeConfiguration(conninfo);
if (myLocalMode == STANDBY_MODE)
Expand All @@ -132,9 +139,7 @@ main(int argc, char **argv)
* This function ask if we are in recovery, if false we are the primary else
* we are a standby
*/


void
static void
getPrimaryConnection(void)
{
PGresult *res1;
Expand Down Expand Up @@ -199,7 +204,7 @@ getPrimaryConnection(void)
}


void
static void
MonitorCheck(void) {
/*
* Every 3 seconds, insert monitor info
Expand All @@ -215,8 +220,7 @@ MonitorCheck(void) {
/*
* Check if its time for next monitor call and if so, do it.
*/

void
static void
MonitorExecute(void)
{
PGresult *res;
Expand Down Expand Up @@ -291,7 +295,7 @@ MonitorExecute(void)
}


void
static void
checkClusterConfiguration(void)
{
PGresult *res;
Expand Down Expand Up @@ -324,7 +328,7 @@ checkClusterConfiguration(void)
}


void
static void
checkNodeConfiguration(char *conninfo)
{
PGresult *res;
Expand Down Expand Up @@ -372,7 +376,7 @@ checkNodeConfiguration(char *conninfo)
}


unsigned long long int
static unsigned long long int
walLocationToBytes(char *wal_location)
{
unsigned int xlogid;
Expand Down

0 comments on commit 5cd9e39

Please sign in to comment.