From f47615dabfe62f5861c74868bde59cf4ed459edd Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
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

