> > On Tue, Jan 15, 2019 at 10:17 AM Shay Rojansky <r...@roji.org> wrote: > > Unfortunately I'm extremely tight for time at the moment and don't have > time to do the appropriate hot standby setup to test this... As the patch > is pretty straightforward, and since I'm hoping you guys execute the tests > on your end, I hope that's acceptable. If it's absolutely necessary for me > to test the patch locally, let me know and I'll do so. > > I would definitely prefer if you could run the tests. You might > discover that your patch does not sufficiently address tests. Please > do so and confirm here that it works for you and then I can do another > review. >
Thanks for insisting - I ended up setting up the environment and running the tests, and discovering that some test-related changes were missing. Here's a 3rd version of the patch. Hope this is now in good shape, let me know if you think anything else needs to be done.
From c5497cc4f7fbad4eafecfa72bc99dfebacd0f9bd Mon Sep 17 00:00:00 2001 From: Shay Rojansky <r...@roji.org> Date: Tue, 15 Jan 2019 18:49:40 +0100 Subject: [PATCH] Allow UNLISTEN during recovery --- doc/src/sgml/high-availability.sgml | 16 ++++++++++------ src/backend/tcop/utility.c | 2 +- src/test/regress/expected/hs_standby_allowed.out | 3 +++ .../regress/expected/hs_standby_disallowed.out | 4 ---- src/test/regress/sql/hs_standby_allowed.sql | 4 ++++ src/test/regress/sql/hs_standby_disallowed.sql | 2 -- 6 files changed, 18 insertions(+), 13 deletions(-) diff --git a/doc/src/sgml/high-availability.sgml b/doc/src/sgml/high-availability.sgml index 4882b20828..bb1c86f73e 100644 --- a/doc/src/sgml/high-availability.sgml +++ b/doc/src/sgml/high-availability.sgml @@ -1767,6 +1767,11 @@ if (!triggered) Plugins and extensions - <command>LOAD</command> </para> </listitem> + <listitem> + <para> + UNLISTEN + </para> + </listitem> </itemizedlist> </para> @@ -1856,18 +1861,17 @@ if (!triggered) </listitem> <listitem> <para> - <command>LISTEN</command>, <command>UNLISTEN</command>, <command>NOTIFY</command> + <command>LISTEN</command>, <command>NOTIFY</command> </para> </listitem> </itemizedlist> </para> <para> - In normal operation, <quote>read-only</quote> transactions are allowed to - use <command>LISTEN</command>, <command>UNLISTEN</command>, and - <command>NOTIFY</command>, so Hot Standby sessions operate under slightly tighter - restrictions than ordinary read-only sessions. It is possible that some - of these restrictions might be loosened in a future release. + In normal operation, <quote>read-only</quote> transactions are allowed to use + <command>LISTEN</command>, and <command>NOTIFY</command>, so Hot Standby sessions + operate under slightly tighter restrictions than ordinary read-only sessions. + It is possible that some of these restrictions might be loosened in a future release. </para> <para> diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index 27ae6be751..44136060d6 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -629,7 +629,7 @@ standard_ProcessUtility(PlannedStmt *pstmt, { UnlistenStmt *stmt = (UnlistenStmt *) parsetree; - PreventCommandDuringRecovery("UNLISTEN"); + /* allow UNLISTEN during recovery, which is a noop */ CheckRestrictedOperation("UNLISTEN"); if (stmt->conditionname) Async_Unlisten(stmt->conditionname); diff --git a/src/test/regress/expected/hs_standby_allowed.out b/src/test/regress/expected/hs_standby_allowed.out index 526f88f2be..00b8faf9eb 100644 --- a/src/test/regress/expected/hs_standby_allowed.out +++ b/src/test/regress/expected/hs_standby_allowed.out @@ -208,6 +208,9 @@ LOCK hs1 IN ACCESS SHARE MODE; LOCK hs1 IN ROW SHARE MODE; LOCK hs1 IN ROW EXCLUSIVE MODE; COMMIT; +-- UNLISTEN +UNLISTEN a; +UNLISTEN *; -- LOAD -- should work, easier if there is no test for that... -- ALLOWED COMMANDS diff --git a/src/test/regress/expected/hs_standby_disallowed.out b/src/test/regress/expected/hs_standby_disallowed.out index bc117413ff..dff0953e9a 100644 --- a/src/test/regress/expected/hs_standby_disallowed.out +++ b/src/test/regress/expected/hs_standby_disallowed.out @@ -118,10 +118,6 @@ listen a; ERROR: cannot execute LISTEN during recovery notify a; ERROR: cannot execute NOTIFY during recovery -unlisten a; -ERROR: cannot execute UNLISTEN during recovery -unlisten *; -ERROR: cannot execute UNLISTEN during recovery -- disallowed commands ANALYZE hs1; ERROR: cannot execute ANALYZE during recovery diff --git a/src/test/regress/sql/hs_standby_allowed.sql b/src/test/regress/sql/hs_standby_allowed.sql index a33199dbbd..6debddc5e9 100644 --- a/src/test/regress/sql/hs_standby_allowed.sql +++ b/src/test/regress/sql/hs_standby_allowed.sql @@ -110,6 +110,10 @@ LOCK hs1 IN ROW SHARE MODE; LOCK hs1 IN ROW EXCLUSIVE MODE; COMMIT; +-- UNLISTEN +UNLISTEN a; +UNLISTEN *; + -- LOAD -- should work, easier if there is no test for that... diff --git a/src/test/regress/sql/hs_standby_disallowed.sql b/src/test/regress/sql/hs_standby_disallowed.sql index 21bbf526b7..a470600eec 100644 --- a/src/test/regress/sql/hs_standby_disallowed.sql +++ b/src/test/regress/sql/hs_standby_disallowed.sql @@ -88,8 +88,6 @@ COMMIT; -- Listen listen a; notify a; -unlisten a; -unlisten *; -- disallowed commands -- 2.19.1