From f47615dabfe62f5861c74868bde59cf4ed459edd Mon Sep 17 00:00:00 2001 From: Masahiko Sawada Date: Sun, 8 Mar 2020 13:09:51 +0900 Subject: [PATCH v3 2/2] Update process title during conflict resolution with buffer-pin and database --- src/backend/storage/ipc/standby.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c index 3c0d42d7b4..b7f58397b3 100644 --- a/src/backend/storage/ipc/standby.c +++ b/src/backend/storage/ipc/standby.c @@ -345,6 +345,8 @@ ResolveRecoveryConflictWithTablespace(Oid tsid) void ResolveRecoveryConflictWithDatabase(Oid dbid) { + char *new_status = NULL; + /* * We don't do ResolveRecoveryConflictWithVirtualXIDs() here since that * only waits for transactions and completely idle sessions would block @@ -358,6 +360,10 @@ ResolveRecoveryConflictWithDatabase(Oid dbid) */ while (CountDBBackends(dbid) > 0) { + /* Report via ps we are waiting */ + if (!new_status) + new_status = set_process_title_waiting(); + CancelDBBackends(dbid, PROCSIG_RECOVERY_CONFLICT_DATABASE, true); /* @@ -366,6 +372,13 @@ ResolveRecoveryConflictWithDatabase(Oid dbid) */ pg_usleep(10000); } + + /* Reset ps display if we changed it */ + if (new_status) + { + set_ps_display(new_status, false); + pfree(new_status); + } } /* @@ -465,9 +478,13 @@ void ResolveRecoveryConflictWithBufferPin(void) { TimestampTz ltime; + char *new_status = NULL; Assert(InHotStandby); + /* Report via ps we are waiting */ + new_status = set_process_title_waiting(); + ltime = GetStandbyLimitTime(); if (ltime == 0) @@ -512,6 +529,13 @@ ResolveRecoveryConflictWithBufferPin(void) * individually, but that'd be slower. */ disable_all_timeouts(false); + + /* Reset ps display if we changed it */ + if (new_status) + { + set_ps_display(new_status, false); + pfree(new_status); + } } static void -- 2.23.0