summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2020-09-16 21:06:50 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2020-09-16 21:06:50 -0400
commitbabef40c9a999949abe0ae8e82240cac3f154237 (patch)
tree1d01029806233725a156c2a3cd66171525db6edd
parentadd105840b673ab3949abc2568da0d4f2fd496c5 (diff)
downloadpostgresql-babef40c9a999949abe0ae8e82240cac3f154237.tar.gz
Teach walsender to update its process title for replication commands.
Because the code path taken for SQL commands executed in a walsender will update the process title, we pretty much have to update the title for replication commands as well. Otherwise, the title shows "idle" for the rest of a logical walsender's lifetime once it's executed any SQL command. Playing with this, I confirm that a walsender now typically spends most of its life reporting walsender postgres [local] START_REPLICATION Considering this in isolation, it might be better to have it say walsender postgres [local] sending replication data However, consistency with the other cases seems to be a stronger argument. In passing, remove duplicative pgstat_report_activity call. Discussion: https://postgr.es/m/880181.1600026471@sss.pgh.pa.us
-rw-r--r--src/backend/replication/walsender.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c
index c1b5ad35de..7c9d1b67df 100644
--- a/src/backend/replication/walsender.c
+++ b/src/backend/replication/walsender.c
@@ -1616,12 +1616,14 @@ exec_replication_command(const char *cmd_string)
{
case T_IdentifySystemCmd:
cmdtag = "IDENTIFY_SYSTEM";
+ set_ps_display(cmdtag);
IdentifySystem();
EndReplicationCommand(cmdtag);
break;
case T_BaseBackupCmd:
cmdtag = "BASE_BACKUP";
+ set_ps_display(cmdtag);
PreventInTransactionBlock(true, cmdtag);
SendBaseBackup((BaseBackupCmd *) cmd_node);
EndReplicationCommand(cmdtag);
@@ -1629,12 +1631,14 @@ exec_replication_command(const char *cmd_string)
case T_CreateReplicationSlotCmd:
cmdtag = "CREATE_REPLICATION_SLOT";
+ set_ps_display(cmdtag);
CreateReplicationSlot((CreateReplicationSlotCmd *) cmd_node);
EndReplicationCommand(cmdtag);
break;
case T_DropReplicationSlotCmd:
cmdtag = "DROP_REPLICATION_SLOT";
+ set_ps_display(cmdtag);
DropReplicationSlot((DropReplicationSlotCmd *) cmd_node);
EndReplicationCommand(cmdtag);
break;
@@ -1644,6 +1648,7 @@ exec_replication_command(const char *cmd_string)
StartReplicationCmd *cmd = (StartReplicationCmd *) cmd_node;
cmdtag = "START_REPLICATION";
+ set_ps_display(cmdtag);
PreventInTransactionBlock(true, cmdtag);
if (cmd->kind == REPLICATION_KIND_PHYSICAL)
@@ -1659,6 +1664,7 @@ exec_replication_command(const char *cmd_string)
case T_TimeLineHistoryCmd:
cmdtag = "TIMELINE_HISTORY";
+ set_ps_display(cmdtag);
PreventInTransactionBlock(true, cmdtag);
SendTimeLineHistory((TimeLineHistoryCmd *) cmd_node);
EndReplicationCommand(cmdtag);
@@ -1670,6 +1676,7 @@ exec_replication_command(const char *cmd_string)
VariableShowStmt *n = (VariableShowStmt *) cmd_node;
cmdtag = "SHOW";
+ set_ps_display(cmdtag);
/* syscache access needs a transaction environment */
StartTransactionCommand();
@@ -1688,8 +1695,11 @@ exec_replication_command(const char *cmd_string)
MemoryContextSwitchTo(old_context);
MemoryContextDelete(cmd_context);
- /* Report to pgstat that this process is now idle */
- pgstat_report_activity(STATE_IDLE, NULL);
+ /*
+ * We need not update ps display or pg_stat_activity, because PostgresMain
+ * will reset those to "idle". But we must reset debug_query_string to
+ * ensure it doesn't become a dangling pointer.
+ */
debug_query_string = NULL;
return true;