Add on_perl_init and proper destruction to plperl UPDATE v3 [PATCH]

Lists: pgsql-hackers
From: Tim Bunce <Tim(dot)Bunce(at)pobox(dot)com>
To: pgsql-hackers(at)postgresql(dot)org
Cc: Tim Bunce <Tim(dot)Bunce(at)pobox(dot)com>
Subject: Add on_perl_init and proper destruction to plperl UPDATED [PATCH]
Date: 2010-01-28 15:46:12
Message-ID: 20100128154611.GC38673@timac.local
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

This is an updated version of the third of the patches to be split out
from the former 'plperl feature patch 1'.

It includes changes following discussions with Tom Lane and others.

Changes in this patch:

- Added plperl.on_perl_init GUC for DBA use (PGC_SIGHUP)
SPI functions are not available when the code is run.

- Added interpreter destruction behaviour
Hooked via on_proc_exit().
Only has any effect for normal shutdown.
END blocks, if any, are run then objects are
destroyed, calling their DESTROY methods, if any.
SPI functions will die if called at this time.

Tim.

Attachment Content-Type Size
plperl-initend-procexit2.patch text/x-patch 16.8 KB

From: Andrew Dunstan <andrew(at)dunslane(dot)net>
To: Tim Bunce <Tim(dot)Bunce(at)pobox(dot)com>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Add on_perl_init and proper destruction to plperl UPDATED [PATCH]
Date: 2010-01-29 04:02:23
Message-ID: 4B625DCF.7080906@dunslane.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Tim Bunce wrote:
> This is an updated version of the third of the patches to be split out
> from the former 'plperl feature patch 1'.
>
> It includes changes following discussions with Tom Lane and others.
>
> Changes in this patch:
>
> - Added plperl.on_perl_init GUC for DBA use (PGC_SIGHUP)
> SPI functions are not available when the code is run.
>
> - Added interpreter destruction behaviour
> Hooked via on_proc_exit().
> Only has any effect for normal shutdown.
> END blocks, if any, are run then objects are
> destroyed, calling their DESTROY methods, if any.
> SPI functions will die if called at this time.
>

This patch is giving me a build error on Windows:

dlltool --export-all --output-def libplperldll.def plperl.o SPI.o Util.o
dllwrap -o plperl.dll --dllname plperl.dll --def libplperldll.def
plperl.o SPI.o Util.o -L../../../src/backend -lpostgres
-LC:/Perl/lib/CORE -L../../../src/port -L/c/tcl/lib -lperl58
plperl.o(.text+0x33b): In function `plperl_destroy_interp':
C:/msys/1.0/home/pgrunner/bf/root/HEAD/pgsql.plperlnew/src/pl/plperl/plperl.c:639:
undefined reference to `Perl_sv_clean_objs'
collect2: ld returned 1 exit status
c:\mingw\bin\dllwrap.exe: c:\mingw\bin\gcc exited with status 1

cheers

andrew


From: Tim Bunce <Tim(dot)Bunce(at)pobox(dot)com>
To: Andrew Dunstan <andrew(at)dunslane(dot)net>
Cc: Tim Bunce <Tim(dot)Bunce(at)pobox(dot)com>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: Add on_perl_init and proper destruction to plperl UPDATED [PATCH]
Date: 2010-01-29 11:33:43
Message-ID: 20100129113343.GS38673@timac.local
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On Thu, Jan 28, 2010 at 11:02:23PM -0500, Andrew Dunstan wrote:
>
>
> Tim Bunce wrote:
> >This is an updated version of the third of the patches to be split out
> >from the former 'plperl feature patch 1'.
> >
> >It includes changes following discussions with Tom Lane and others.
> >
> >Changes in this patch:
> >
> >- Added plperl.on_perl_init GUC for DBA use (PGC_SIGHUP)
> > SPI functions are not available when the code is run.
> >
> >- Added interpreter destruction behaviour
> > Hooked via on_proc_exit().
> > Only has any effect for normal shutdown.
> > END blocks, if any, are run then objects are
> > destroyed, calling their DESTROY methods, if any.
> > SPI functions will die if called at this time.
>
> This patch is giving me a build error on Windows:
>
> undefined reference to `Perl_sv_clean_objs'

Ah, phooey. That's technically a private function so isn't exported on
platforms that support selective exporting.

The options are either to go back to calling perl_destruct(), which
would then require careful auditing of what perl_destruct actually does,
or do simply not bother destroying objects.

I'm going to go for the latter. Time is short and calling END blocks is
still a major step forward. (Anyone who needs objects destroyed can
probably arrange that themselves via an END block.)

Updated patch to follow...

Tim.


From: Tim Bunce <Tim(dot)Bunce(at)pobox(dot)com>
To: Andrew Dunstan <andrew(at)dunslane(dot)net>
Cc: Tim Bunce <Tim(dot)Bunce(at)pobox(dot)com>, pgsql-hackers(at)postgresql(dot)org
Subject: Add on_perl_init and proper destruction to plperl UPDATE v3 [PATCH]
Date: 2010-01-29 13:33:18
Message-ID: 20100129133318.GU38673@timac.local
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

This is an updated version of the third of the patches to be
split out from the former 'plperl feature patch 1'.

It includes changes following discussions with Tom Lane and others.

Changes in this patch:

- Added plperl.on_perl_init GUC for DBA use (PGC_SIGHUP)
SPI functions are not available when the code is run.

- Added interpreter destruction behaviour
Hooked via on_proc_exit().
Only has any effect for normal shutdown.
END blocks, if any, are run.
SPI functions will die if called at this time.

This updated version no longer tries to call object destructors.
I've added a note in the Limitations section of the PL/Perl docs.
It also adds a PERL_SET_CONTEXT() that's needed but was missing.

Tim.

Attachment Content-Type Size
plperl-initend-procexit3.patch text/x-patch 17.3 KB

From: Andrew Dunstan <andrew(at)dunslane(dot)net>
To: Tim Bunce <Tim(dot)Bunce(at)pobox(dot)com>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Add on_perl_init and proper destruction to plperl UPDATE v3 [PATCH]
Date: 2010-01-30 02:10:48
Message-ID: 4B639528.6060907@dunslane.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Tim Bunce wrote:
> This is an updated version of the third of the patches to be
> split out from the former 'plperl feature patch 1'.
>
> It includes changes following discussions with Tom Lane and others.
>
> Changes in this patch:
>
> - Added plperl.on_perl_init GUC for DBA use (PGC_SIGHUP)
> SPI functions are not available when the code is run.
>
> - Added interpreter destruction behaviour
> Hooked via on_proc_exit().
> Only has any effect for normal shutdown.
> END blocks, if any, are run.
> SPI functions will die if called at this time.
>
> This updated version no longer tries to call object destructors.
> I've added a note in the Limitations section of the PL/Perl docs.
> It also adds a PERL_SET_CONTEXT() that's needed but was missing.
>
>

I have committed this. The final thing that persuaded me that no great
damage would be done by on_perl_init was the realization that we already
have the ability to do more or less the same thing anyway via standard
Perl mechanisms, and I'd be very surprised if enterprising Perl users
hadn't made use of it.

My impression is that the on_trusted_init and on_untrusted_init settings
that are in the next patch are a bit less controversial.

Tim, can you rebase the last two patches against current CVS HEAD?

cheers

andrew


From: Tim Bunce <Tim(dot)Bunce(at)pobox(dot)com>
To: Andrew Dunstan <andrew(at)dunslane(dot)net>
Cc: Tim Bunce <Tim(dot)Bunce(at)pobox(dot)com>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: Add on_perl_init and proper destruction to plperl UPDATE v3 [PATCH]
Date: 2010-01-30 14:25:55
Message-ID: 20100130142555.GE1141@timac.local
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On Fri, Jan 29, 2010 at 09:10:48PM -0500, Andrew Dunstan wrote:
>
> Tim Bunce wrote:
> >This is an updated version of the third of the patches to be
> >split out from the former 'plperl feature patch 1'.
> >
> >It includes changes following discussions with Tom Lane and others.
> >
> >Changes in this patch:
> >
> >- Added plperl.on_perl_init GUC for DBA use (PGC_SIGHUP)
> > SPI functions are not available when the code is run.
> >
> >- Added interpreter destruction behaviour
> > Hooked via on_proc_exit().
> > Only has any effect for normal shutdown.
> > END blocks, if any, are run.
> > SPI functions will die if called at this time.
> >
> >This updated version no longer tries to call object destructors.
> >I've added a note in the Limitations section of the PL/Perl docs.
> >It also adds a PERL_SET_CONTEXT() that's needed but was missing.
>
> I have committed this.

Many thanks.

> Tim, can you rebase the last two patches against current CVS HEAD?

ASAP...

Tim.