diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2020-09-16 21:06:50 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2020-09-16 21:06:50 -0400 |
commit | babef40c9a999949abe0ae8e82240cac3f154237 (patch) | |
tree | 1d01029806233725a156c2a3cd66171525db6edd | |
parent | add105840b673ab3949abc2568da0d4f2fd496c5 (diff) | |
download | postgresql-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.c | 14 |
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; |