On 2023-Oct-27, Alexander Korotkov wrote:

> Adjust parallel_schedule with event triggers on authenticated login
> 
> Event triggers on authenticated login could catch the connection of the
> concurrent test.  In order to prevent this side effect we need to run
> the event_trigger test alone.

Hmm, not a fan, because the original lines of the event_trigger test,
which had no problem running in parallel, no longer do so.  Why not
split out only the new part of the test to run in non-parallel mode?
An effortless win of ~50 ms.

After this patch:

ok 211       + stats                                     644 ms
# parallel group (2 tests):  event_trigger oidjoins
ok 212       + oidjoins                                  103 ms
ok 213       + event_trigger                              57 ms
ok 214       - event_trigger_login                        16 ms
ok 215       - fast_default                               66 ms
ok 216       - tablespace                                156 ms
1..216
# All 216 tests passed.


Before:

ok 211       + stats                                     603 ms
ok 212       - event_trigger                              66 ms
ok 213       - oidjoins                                  113 ms
ok 214       - fast_default                               71 ms
ok 215       - tablespace                                161 ms
1..215
# All 215 tests passed.

-- 
Álvaro Herrera        Breisgau, Deutschland  —  https://www.EnterpriseDB.com/
>From 8e425fe929139d6aeee4878cda5fa97b589cde85 Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <[email protected]>
Date: Fri, 27 Oct 2023 10:54:47 +0200
Subject: [PATCH] paralelize stuff

---
 src/test/regress/expected/event_trigger.out   | 45 -------------------
 .../regress/expected/event_trigger_login.out  | 45 +++++++++++++++++++
 src/test/regress/parallel_schedule            | 10 ++---
 src/test/regress/sql/event_trigger.sql        | 26 -----------
 src/test/regress/sql/event_trigger_login.sql  | 25 +++++++++++
 5 files changed, 75 insertions(+), 76 deletions(-)
 create mode 100644 src/test/regress/expected/event_trigger_login.out
 create mode 100644 src/test/regress/sql/event_trigger_login.sql

diff --git a/src/test/regress/expected/event_trigger.out b/src/test/regress/expected/event_trigger.out
index eaaff6ba6f..0b87a42d0a 100644
--- a/src/test/regress/expected/event_trigger.out
+++ b/src/test/regress/expected/event_trigger.out
@@ -638,48 +638,3 @@ NOTICE:  DROP POLICY dropped policy
 CREATE POLICY pguc ON event_trigger_test USING (FALSE);
 SET event_triggers = 'off';
 DROP POLICY pguc ON event_trigger_test;
--- Login event triggers
-CREATE TABLE user_logins(id serial, who text);
-GRANT SELECT ON user_logins TO public;
-CREATE FUNCTION on_login_proc() RETURNS event_trigger AS $$
-BEGIN
-  INSERT INTO user_logins (who) VALUES (SESSION_USER);
-  RAISE NOTICE 'You are welcome!';
-END;
-$$ LANGUAGE plpgsql;
-CREATE EVENT TRIGGER on_login_trigger ON login EXECUTE PROCEDURE on_login_proc();
-ALTER EVENT TRIGGER on_login_trigger ENABLE ALWAYS;
-\c
-NOTICE:  You are welcome!
-SELECT COUNT(*) FROM user_logins;
- count 
--------
-     1
-(1 row)
-
-\c
-NOTICE:  You are welcome!
-SELECT COUNT(*) FROM user_logins;
- count 
--------
-     2
-(1 row)
-
--- Check dathasloginevt in system catalog
-SELECT dathasloginevt FROM pg_database WHERE datname= :'DBNAME';
- dathasloginevt 
-----------------
- t
-(1 row)
-
--- Cleanup
-DROP TABLE user_logins;
-DROP EVENT TRIGGER on_login_trigger;
-DROP FUNCTION on_login_proc();
-\c
-SELECT dathasloginevt FROM pg_database WHERE datname= :'DBNAME';
- dathasloginevt 
-----------------
- f
-(1 row)
-
diff --git a/src/test/regress/expected/event_trigger_login.out b/src/test/regress/expected/event_trigger_login.out
new file mode 100644
index 0000000000..174879578b
--- /dev/null
+++ b/src/test/regress/expected/event_trigger_login.out
@@ -0,0 +1,45 @@
+-- Login event triggers
+CREATE TABLE user_logins(id serial, who text);
+GRANT SELECT ON user_logins TO public;
+CREATE FUNCTION on_login_proc() RETURNS event_trigger AS $$
+BEGIN
+  INSERT INTO user_logins (who) VALUES (SESSION_USER);
+  RAISE NOTICE 'You are welcome!';
+END;
+$$ LANGUAGE plpgsql;
+CREATE EVENT TRIGGER on_login_trigger ON login EXECUTE PROCEDURE on_login_proc();
+ALTER EVENT TRIGGER on_login_trigger ENABLE ALWAYS;
+\c
+NOTICE:  You are welcome!
+SELECT COUNT(*) FROM user_logins;
+ count 
+-------
+     1
+(1 row)
+
+\c
+NOTICE:  You are welcome!
+SELECT COUNT(*) FROM user_logins;
+ count 
+-------
+     2
+(1 row)
+
+-- Check dathasloginevt in system catalog
+SELECT dathasloginevt FROM pg_database WHERE datname= :'DBNAME';
+ dathasloginevt 
+----------------
+ t
+(1 row)
+
+-- Cleanup
+DROP TABLE user_logins;
+DROP EVENT TRIGGER on_login_trigger;
+DROP FUNCTION on_login_proc();
+\c
+SELECT dathasloginevt FROM pg_database WHERE datname= :'DBNAME';
+ dathasloginevt 
+----------------
+ f
+(1 row)
+
diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule
index 512cb97dfd..eabe94b5d0 100644
--- a/src/test/regress/parallel_schedule
+++ b/src/test/regress/parallel_schedule
@@ -121,12 +121,12 @@ test: plancache limit plpgsql copy2 temp domain rangefuncs prepare conversion tr
 # ----------
 test: partition_join partition_prune reloptions hash_part indexing partition_aggregate partition_info tuplesort explain compression memoize stats
 
-# event_trigger cannot run concurrently with any other tests because
-# on-login event handling could catch connection of a concurrent test.
-test: event_trigger
-
 # oidjoins should run late for best coverage
-test: oidjoins
+test: oidjoins event_trigger
+
+# event_trigger_login cannot run concurrently with any other tests because
+# on-login event handling could catch connection of a concurrent test.
+test: event_trigger_login
 
 # this test also uses event triggers, so likewise run it by itself
 test: fast_default
diff --git a/src/test/regress/sql/event_trigger.sql b/src/test/regress/sql/event_trigger.sql
index 9c2b7903fb..6f0933b9e8 100644
--- a/src/test/regress/sql/event_trigger.sql
+++ b/src/test/regress/sql/event_trigger.sql
@@ -495,29 +495,3 @@ DROP POLICY pguc ON event_trigger_test;
 CREATE POLICY pguc ON event_trigger_test USING (FALSE);
 SET event_triggers = 'off';
 DROP POLICY pguc ON event_trigger_test;
-
--- Login event triggers
-CREATE TABLE user_logins(id serial, who text);
-GRANT SELECT ON user_logins TO public;
-CREATE FUNCTION on_login_proc() RETURNS event_trigger AS $$
-BEGIN
-  INSERT INTO user_logins (who) VALUES (SESSION_USER);
-  RAISE NOTICE 'You are welcome!';
-END;
-$$ LANGUAGE plpgsql;
-CREATE EVENT TRIGGER on_login_trigger ON login EXECUTE PROCEDURE on_login_proc();
-ALTER EVENT TRIGGER on_login_trigger ENABLE ALWAYS;
-\c
-SELECT COUNT(*) FROM user_logins;
-\c
-SELECT COUNT(*) FROM user_logins;
-
--- Check dathasloginevt in system catalog
-SELECT dathasloginevt FROM pg_database WHERE datname= :'DBNAME';
-
--- Cleanup
-DROP TABLE user_logins;
-DROP EVENT TRIGGER on_login_trigger;
-DROP FUNCTION on_login_proc();
-\c
-SELECT dathasloginevt FROM pg_database WHERE datname= :'DBNAME';
diff --git a/src/test/regress/sql/event_trigger_login.sql b/src/test/regress/sql/event_trigger_login.sql
new file mode 100644
index 0000000000..b8e39f7526
--- /dev/null
+++ b/src/test/regress/sql/event_trigger_login.sql
@@ -0,0 +1,25 @@
+-- Login event triggers
+CREATE TABLE user_logins(id serial, who text);
+GRANT SELECT ON user_logins TO public;
+CREATE FUNCTION on_login_proc() RETURNS event_trigger AS $$
+BEGIN
+  INSERT INTO user_logins (who) VALUES (SESSION_USER);
+  RAISE NOTICE 'You are welcome!';
+END;
+$$ LANGUAGE plpgsql;
+CREATE EVENT TRIGGER on_login_trigger ON login EXECUTE PROCEDURE on_login_proc();
+ALTER EVENT TRIGGER on_login_trigger ENABLE ALWAYS;
+\c
+SELECT COUNT(*) FROM user_logins;
+\c
+SELECT COUNT(*) FROM user_logins;
+
+-- Check dathasloginevt in system catalog
+SELECT dathasloginevt FROM pg_database WHERE datname= :'DBNAME';
+
+-- Cleanup
+DROP TABLE user_logins;
+DROP EVENT TRIGGER on_login_trigger;
+DROP FUNCTION on_login_proc();
+\c
+SELECT dathasloginevt FROM pg_database WHERE datname= :'DBNAME';
-- 
2.39.2

Reply via email to