Re: On login trigger: take three
Konstantin Knizhnik <k.knizhnik@postgrespro.ru>
From: Konstantin Knizhnik <k.knizhnik@postgrespro.ru>
To: Pavel Stehule <pavel.stehule@gmail.com>
Cc: Greg Nancarrow <gregn4422@gmail.com>,
PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2020-12-17T13:03:56Z
Lists: pgsql-hackers
Attachments
- on_connect_event_trigger-9.patch (text/x-patch) patch
On 17.12.2020 9:31, Pavel Stehule wrote: > > > st 16. 12. 2020 v 20:38 odesílatel Pavel Stehule > <pavel.stehule@gmail.com <mailto:pavel.stehule@gmail.com>> napsal: > > Attached please find new versoin of the patch based on > on_connect_event_trigger_WITH_SUGGESTED_UPDATES.patch > > So there is still only "disable_client_connection_trigger" > GUC? because we need possibility to disable client connect > triggers and there is no such need for other event types. > > As you suggested have added "dathaslogontriggers" flag which > is set when client connection trigger is created. > This flag is never cleaned (to avoid visibility issues > mentioned in my previous mail). > > > This is much better - I don't see any slowdown when logon trigger > is not defined > > I did some benchmarks and looks so starting language handler is > relatively expensive - it is about 25% and starting handler like > event trigger has about 35%. But this problem can be solved later > and elsewhere. > > I prefer the inverse form of disable_connection_trigger. Almost > all GUC are in positive form - so enable_connection_triggger is better > > I don't think so current handling dathaslogontriggers is good for > production usage. The protection against race condition can be > solved by lock on pg_event_trigger > > > I thought about it, and probably the counter of connect triggers will > be better there. The implementation will be simpler and more robust. > > I prefer to implement different approach: unset dathaslogontriggers flag in event trigger itself when no triggers are returned by EventTriggerCommonSetup. I am using double checking to prevent race condition. The main reason for this approach is that dropping of triggers is not done in event_trigger.c: it is done by generic code for all resources. It seems to be there is no right place where decrementing of trigger counters can be inserted. Also I prefer to keep all logon-trigger specific code in one file. Also, as you suggested, I renamed disable_connection_trigger to enable_connection_trigger. New version of the patch is attached. -- Konstantin Knizhnik Postgres Professional: http://www.postgrespro.com The Russian Postgres Company
Commits
-
Fix some typos in event trigger docs
- 5fce30e77fe1 17.0 landed
-
Use heap_inplace_update() to unset pg_database.dathasloginevt
- 8be93177c46b 17.0 landed
-
Remove the flaky check in event_trigger_login regression test
- 4b885d01f967 17.0 landed
-
Fix instable 006_login_trigger.pl test
- 06be01eb266b 17.0 landed
-
Add support event triggers on authenticated login
- e83d1b0c40cc 17.0 landed
-
Add GUC for temporarily disabling event triggers
- 7750fefdb2b8 17.0 landed
-
Fix typo in reference to __FreeBSD__.
- e52f8b301ed5 16.0 cited
-
Restore robustness of TAP tests that wait for postmaster restart.
- f452aaf7d4a9 14.0 cited
-
Restore the portal-level snapshot after procedure COMMIT/ROLLBACK.
- 84f5c2908dad 14.0 cited