Commit d02974e3 authored by Magnus Hagander's avatar Magnus Hagander

Properly set base backup backends to active in pg_stat_activity

When walsenders were included in pg_stat_activity, only the ones
actually streaming WAL were listed as active when they were active. In
particular, the connections sending base backups were listed as being
idle. Which means that a regular pg_basebackup would show up with one
active and one idle connection, when both were active.

This patch updates to set all walsenders to active when they are
(including those doing very fast things like IDENTIFY_SYSTEM), and then
back to idle. Details about exactly what they are doing is available in
pg_stat_replication.

Patch by me, review by Michael Paquier and David Steele.
parent 48c9f492
...@@ -1504,6 +1504,9 @@ exec_replication_command(const char *cmd_string) ...@@ -1504,6 +1504,9 @@ exec_replication_command(const char *cmd_string)
initStringInfo(&reply_message); initStringInfo(&reply_message);
initStringInfo(&tmpbuf); initStringInfo(&tmpbuf);
/* Report to pgstat that this process is running */
pgstat_report_activity(STATE_RUNNING, NULL);
switch (cmd_node->type) switch (cmd_node->type)
{ {
case T_IdentifySystemCmd: case T_IdentifySystemCmd:
...@@ -1555,6 +1558,9 @@ exec_replication_command(const char *cmd_string) ...@@ -1555,6 +1558,9 @@ exec_replication_command(const char *cmd_string)
ereport(ERROR, ereport(ERROR,
(errmsg("cannot execute SQL commands in WAL sender for physical replication"))); (errmsg("cannot execute SQL commands in WAL sender for physical replication")));
/* Report to pgstat that this process is now idle */
pgstat_report_activity(STATE_IDLE, NULL);
/* Tell the caller that this wasn't a WalSender command. */ /* Tell the caller that this wasn't a WalSender command. */
return false; return false;
...@@ -1570,6 +1576,9 @@ exec_replication_command(const char *cmd_string) ...@@ -1570,6 +1576,9 @@ exec_replication_command(const char *cmd_string)
/* Send CommandComplete message */ /* Send CommandComplete message */
EndCommand("SELECT", DestRemote); EndCommand("SELECT", DestRemote);
/* Report to pgstat that this process is now idle */
pgstat_report_activity(STATE_IDLE, NULL);
return true; return true;
} }
...@@ -2089,9 +2098,6 @@ WalSndLoop(WalSndSendDataCallback send_data) ...@@ -2089,9 +2098,6 @@ WalSndLoop(WalSndSendDataCallback send_data)
last_reply_timestamp = GetCurrentTimestamp(); last_reply_timestamp = GetCurrentTimestamp();
waiting_for_ping_response = false; waiting_for_ping_response = false;
/* Report to pgstat that this process is running */
pgstat_report_activity(STATE_RUNNING, NULL);
/* /*
* Loop until we reach the end of this timeline or the client requests to * Loop until we reach the end of this timeline or the client requests to
* stop streaming. * stop streaming.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment