Thread: plperl db crash

plperl db crash

From
Nabil Sayegh
Date:
I had a db lock up on one of our machines.
To reproduce it, I did a fresh install on a testing machine.

On the other machine where it occured the first time the db just hung,
but it didn't crash. I tried to /etc/init.d/postgresql stop
But it didn't stop.

Then I did pg_ctl -m immediate stop
The log said something like 'redo is not required', so i gues everything
should be fine.

However, like already said, I did a fresh install on a testing machine
and there it crashes:

------------------------------------------------------------------------
debian/unstable
postgresql 7.3.4

/usr/lib/postgresql/bin/createlang plperl plasma
psql plasma

CREATE FUNCTION perlsub(text, text, text) RETURNS text AS '
     my ($data, $pat, $repl) = $_;
     $data =~ s/$pat/$repl/;
     return $data
' LANGUAGE 'plperl';

-- Taken from here:
-- http://archives.postgresql.org/pgsql-general/2001-02/msg00798.php

plasma=# SELECT perlsub('abc','b','123');
server closed the connection unexpectedly
         This probably means the server terminated abnormally
         before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.
!#

---------------------------------------------------------------
Oct  2 19:15:00 billy postgres[23521]: [7] LOG:  connection received:
host=[local]
Oct  2 19:15:00 billy postgres[23521]: [8] LOG:  connection authorized:
user=plasma database=plasma
Oct  2 19:15:02 billy postgres[23329]: [7] LOG:  server process (pid
23521) was terminated by signal 11
Oct  2 19:15:02 billy postgres[23329]: [8] LOG:  terminating any other
active server processes
Oct  2 19:15:02 billy postgres[23329]: [9] LOG:  all server processes
terminated; reinitializing shared memory and semaphores
Oct  2 19:15:02 billy postgres[23523]: [10] LOG:  database system was
interrupted at 2003-10-02 19:13:01 CEST
Oct  2 19:15:02 billy postgres[23523]: [11] LOG:  checkpoint record is
at 0/83238C
Oct  2 19:15:02 billy postgres[23523]: [12] LOG:  redo record is at
0/83238C; undo record is at 0/0; shutdown TRUE
Oct  2 19:15:02 billy postgres[23523]: [13] LOG:  next transaction id:
513; next oid: 25168
Oct  2 19:15:02 billy postgres[23523]: [14] LOG:  database system was
not properly shut down; automatic recovery in progress
Oct  2 19:15:02 billy postgres[23523]: [15] LOG:  ReadRecord: record
with zero length at 0/8323CC
Oct  2 19:15:02 billy postgres[23523]: [16] LOG:  redo is not required
Oct  2 19:15:02 billy postgres[23524]: [10] LOG:  connection received:
host=[local]
Oct  2 19:15:02 billy postgres[23524]: [11] FATAL:  The database system
is starting up
Oct  2 19:15:04 billy postgres[23523]: [17] LOG:  database system is ready

---------------------------------------------------------------


--
  e-Trolley Sayegh & John, Nabil Sayegh
  Tel.: 0700 etrolley /// 0700 38765539
  Fax.: +49 69 8299381-8
  PGP : http://www.e-trolley.de


Re: plperl db crash

From
Josh Berkus
Date:
Nabil,

> However, like already said, I did a fresh install on a testing machine
> and there it crashes:
>
> ------------------------------------------------------------------------
> debian/unstable  <=== this is most likely your culprit
> postgresql 7.3.4

I've been using pl/perl in production for up to 3 years on some projects.   My
first thought would be that it's a problem with Perl on Debian/unstable, not
a problem with PostgreSQL.

I'd suggest that you do a gdb trace and post it to pgsql-bugs to get feedback
on where the issue lies.

--
Josh Berkus
Aglio Database Solutions
San Francisco

Re: plperl db crash

From
Oliver Elphick
Date:
On Thu, 2003-10-02 at 18:30, Nabil Sayegh wrote:
> I had a db lock up on one of our machines.
> To reproduce it, I did a fresh install on a testing machine.
>
> On the other machine where it occured the first time the db just hung,
> but it didn't crash. I tried to /etc/init.d/postgresql stop
> But it didn't stop.
>
> Then I did pg_ctl -m immediate stop
> The log said something like 'redo is not required', so i gues everything
> should be fine.
>
> However, like already said, I did a fresh install on a testing machine
> and there it crashes:
>
> ------------------------------------------------------------------------
> debian/unstable
> postgresql 7.3.4

Is this the Debian package or your own build?  If it's the package, what
is the package's full release number?

--
Oliver Elphick                                Oliver.Elphick@lfix.co.uk
Isle of Wight, UK                             http://www.lfix.co.uk/oliver
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839  932A 614D 4C34 3E1D 0C1C
                 ========================================
     "Set your affection on things above, not on things on
      the earth."          Colossians 3:2


Re: plperl db crash

From
"Nabil Sayegh"
Date:
> Is this the Debian package or your own build?  If it's the package, what
> is the package's full release number?

It is 7.3.4-5 (not self built)
Is there a way to dump a list of all my installed packages ?

cu

Re: plperl db crash

From
Oliver Elphick
Date:
On Fri, 2003-10-03 at 02:23, Nabil Sayegh wrote:
> > Is this the Debian package or your own build?  If it's the package, what
> > is the package's full release number?
>
> It is 7.3.4-5 (not self built)
> Is there a way to dump a list of all my installed packages ?

One way is:

dpkg --get-selections | grep -Ev 'deinstall|purge$' | awk '{print $1}'

Strictly, this tells you the requested rather than the actual state of
your packages.

--
Oliver Elphick                                Oliver.Elphick@lfix.co.uk
Isle of Wight, UK                             http://www.lfix.co.uk/oliver
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839  932A 614D 4C34 3E1D 0C1C
                 ========================================
     "I beseech you therefore, brethren, by the mercies of
      God, that ye present your bodies a living sacrifice,
      holy, acceptable unto God, which is your reasonable
      service. And be not conformed to this world; but be ye
      transformed by the renewing of your mind, that ye may
      prove what is that good, and acceptable, and perfect,
      will of God."        Romans 12:1,2


Re: plperl db crash

From
Oliver Elphick
Date:
On Thu, 2003-10-02 at 18:30, Nabil Sayegh wrote:
> I had a db lock up on one of our machines.
> To reproduce it, I did a fresh install on a testing machine.
...
> ------------------------------------------------------------------------
> debian/unstable
> postgresql 7.3.4
>
> /usr/lib/postgresql/bin/createlang plperl plasma
> psql plasma
>
> CREATE FUNCTION perlsub(text, text, text) RETURNS text AS '
>      my ($data, $pat, $repl) = $_;
                                 ^^^
That should be @_ (but that wouldn't cause the crash).

>      $data =~ s/$pat/$repl/;
>      return $data
> ' LANGUAGE 'plperl';
>
> -- Taken from here:
> -- http://archives.postgresql.org/pgsql-general/2001-02/msg00798.php
>
> plasma=# SELECT perlsub('abc','b','123');
> server closed the connection unexpectedly

I'm just uploading 7.3.4-6 to unstable.

I've tested this function with that release and your problem does not
occur on my system, but I'm not aware of having done anything to affect
it.

--
Oliver Elphick                                Oliver.Elphick@lfix.co.uk
Isle of Wight, UK                             http://www.lfix.co.uk/oliver
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839  932A 614D 4C34 3E1D 0C1C
                 ========================================
     "I beseech you therefore, brethren, by the mercies of
      God, that ye present your bodies a living sacrifice,
      holy, acceptable unto God, which is your reasonable
      service. And be not conformed to this world; but be ye
      transformed by the renewing of your mind, that ye may
      prove what is that good, and acceptable, and perfect,
      will of God."        Romans 12:1,2


Re: plperl db crash

From
Nabil Sayegh
Date:
Josh Berkus wrote:
> I'd suggest that you do a gdb trace and post it to pgsql-bugs to get feedback
> on where the issue lies.

gdb doesn't notice the 'crash'.
It seems to be handled by the postmaster itself.

I think I will contact Oliver Elphick then.

thx
--
  e-Trolley Sayegh & John, Nabil Sayegh
  Tel.: 0700 etrolley /// 0700 38765539
  Fax.: +49 69 8299381-8
  PGP : http://www.e-trolley.de


Re: plperl db crash

From
Nabil Sayegh
Date:
Nabil Sayegh wrote:
> I had a db lock up on one of our machines.
> To reproduce it, I did a fresh install on a testing machine.
>
> On the other machine where it occured the first time the db just hung,
> but it didn't crash. I tried to /etc/init.d/postgresql stop
> But it didn't stop.

Another fact I had forgotten:
The 'original' problem occured when I wanted to
DROP FUNCTION perlsub;
The 'original' system was 7.3.4-5, too.
It didn't crash when executing the function but locked up the db when i
wanted to remove the function.

Sorry for not mentioning it before :|

However the testing system crashes when executing the function.

I will upgrade ASA it is in my apt sources.

cu
--
  e-Trolley Sayegh & John, Nabil Sayegh
  Tel.: 0700 etrolley /// 0700 38765539
  Fax.: +49 69 8299381-8
  PGP : http://www.e-trolley.de


Re: plperl db crash

From
Nabil Sayegh
Date:
Oliver Elphick wrote:
> I'm just uploading 7.3.4-6 to unstable.
>
> I've tested this function with that release and your problem does not
> occur on my system, but I'm not aware of having done anything to affect
> it.
>

Here's the strace output:

---------------------------------------8<---------------------------------
)    = 1 (in [4], left {288, 80000})
--- SIGCHLD (Child exited) @ 0 (0) ---
rt_sigprocmask(SIG_SETMASK, ~[ILL TRAP ABRT BUS FPE SEGV CONT SYS],
NULL, 8) = 0
waitpid(-1, [WIFSIGNALED(s) && WTERMSIG(s) == SIGSEGV && WCOREDUMP(s)],
WNOHANG) = 6147
time(NULL)                              = 1065208172
socket(PF_UNIX, SOCK_DGRAM, 0)          = 8
fcntl64(8, F_SETFD, FD_CLOEXEC)         = 0
connect(8, {sa_family=AF_UNIX, path="/dev/log"}, 16) = 0
time([1065208172])                      = 1065208172
getpid()                                = 6136
rt_sigaction(SIGPIPE, {0x40334540, [], SA_RESTORER, 0x40289578},
{SIG_IGN}, 8) = 0
send(8, "<134>Oct  3 21:09:32 postgres[61"..., 100, 0) = 100
rt_sigaction(SIGPIPE, {SIG_IGN}, NULL, 8) = 0
time(NULL)                              = 1065208172
time([1065208172])                      = 1065208172
getpid()                                = 6136
rt_sigaction(SIGPIPE, {0x40334540, [], SA_RESTORER, 0x40289578},
{SIG_IGN}, 8) = 0
send(8, "<134>Oct  3 21:09:32 postgres[61"..., 92, 0) = 92
rt_sigaction(SIGPIPE, {SIG_IGN}, NULL, 8) = 0
send(5, "\2\0\0\0\30\0\0\0\0\0\0\0\3\30\0\0\0\0\0\0\0\0\0\0", 24, 0) = 24
waitpid(-1, 0xbffff39c, WNOHANG)        = 0
time(NULL)                              = 1065208172
time([1065208172])                      = 1065208172
getpid()                                = 6136
rt_sigaction(SIGPIPE, {0x40334540, [], SA_RESTORER, 0x40289578},
{SIG_IGN}, 8) = 0
send(8, "<134>Oct  3 21:09:32 postgres[61"..., 123, 0) = 123
rt_sigaction(SIGPIPE, {SIG_IGN}, NULL, 8) = 0
semctl(983040, 0, IPC_RMID, 0xbffff2dc) = 0
semctl(1015809, 0, IPC_RMID, 0xbffff2dc) = 0
semctl(1048578, 0, IPC_RMID, 0xbffff2dc) = 0
semctl(1081347, 0, IPC_RMID, 0xbffff2dc) = 0
semctl(1114116, 0, IPC_RMID, 0xbffff2dc) = 0
shmdt(0x4040a000)                       = 0
shmctl(3768320, IPC_RMID, 0)            = 0
shmget(5432001, 9732096, IPC_CREAT|IPC_EXCL|0600) = 3801111
shmat(3801111, 0, 0)                    = 0x4040a000
open("/var/lib/postgres/data/postmaster.pid", O_RDWR|O_LARGEFILE) = 9
read(9, "6136\n/var/lib/postgres/data\n  54"..., 8092) = 48
_llseek(9, 0, [0], SEEK_SET)            = 0
write(9, "6136\n/var/lib/postgres/data\n  54"..., 48) = 48
close(9)                                = 0
getpid()                                = 6136
open("/var/lib/postgres/data/global/pg_control", O_RDWR|O_LARGEFILE) = 9
read(9, "\23\240^\34?\350\375<H\0\0\0M\372\356\v\4\0\0\0`\311}?"...,
360) = 360
close(9)                                = 0
semget(5432001, 17, IPC_CREAT|IPC_EXCL|0600) = 1146880
semctl(1146880, 16, SETVAL, 0xbffff23c) = 0
semop(1146880, 0xbffff2a4, 1)           = 0
semctl(1146880, 0, SETVAL, 0xbffff26c)  = 0
semctl(1146880, 1, SETVAL, 0xbffff26c)  = 0
semctl(1146880, 2, SETVAL, 0xbffff26c)  = 0
semctl(1146880, 3, SETVAL, 0xbffff26c)  = 0
semctl(1146880, 4, SETVAL, 0xbffff26c)  = 0
semctl(1146880, 5, SETVAL, 0xbffff26c)  = 0
semctl(1146880, 6, SETVAL, 0xbffff26c)  = 0
semctl(1146880, 7, SETVAL, 0xbffff26c)  = 0
semctl(1146880, 8, SETVAL, 0xbffff26c)  = 0
semctl(1146880, 9, SETVAL, 0xbffff26c)  = 0
semctl(1146880, 10, SETVAL, 0xbffff26c) = 0
semctl(1146880, 11, SETVAL, 0xbffff26c) = 0
semctl(1146880, 12, SETVAL, 0xbffff26c) = 0
semctl(1146880, 13, SETVAL, 0xbffff26c) = 0
semctl(1146880, 14, SETVAL, 0xbffff26c) = 0
semctl(1146880, 15, SETVAL, 0xbffff26c) = 0
semget(5432002, 17, IPC_CREAT|IPC_EXCL|0600) = 1179649
semctl(1179649, 16, SETVAL, 0xbffff23c) = 0
semop(1179649, 0xbffff2a4, 1)           = 0
semctl(1179649, 0, SETVAL, 0xbffff26c)  = 0
semctl(1179649, 1, SETVAL, 0xbffff26c)  = 0
semctl(1179649, 2, SETVAL, 0xbffff26c)  = 0
semctl(1179649, 3, SETVAL, 0xbffff26c)  = 0
semctl(1179649, 4, SETVAL, 0xbffff26c)  = 0
semctl(1179649, 5, SETVAL, 0xbffff26c)  = 0
semctl(1179649, 6, SETVAL, 0xbffff26c)  = 0
semctl(1179649, 7, SETVAL, 0xbffff26c)  = 0
semctl(1179649, 8, SETVAL, 0xbffff26c)  = 0
semctl(1179649, 9, SETVAL, 0xbffff26c)  = 0
semctl(1179649, 10, SETVAL, 0xbffff26c) = 0
semctl(1179649, 11, SETVAL, 0xbffff26c) = 0
semctl(1179649, 12, SETVAL, 0xbffff26c) = 0
semctl(1179649, 13, SETVAL, 0xbffff26c) = 0
semctl(1179649, 14, SETVAL, 0xbffff26c) = 0
semctl(1179649, 15, SETVAL, 0xbffff26c) = 0
semget(5432003, 17, IPC_CREAT|IPC_EXCL|0600) = 1212418
semctl(1212418, 16, SETVAL, 0xbffff23c) = 0
semop(1212418, 0xbffff2a4, 1)           = 0
semctl(1212418, 0, SETVAL, 0xbffff26c)  = 0
semctl(1212418, 1, SETVAL, 0xbffff26c)  = 0
semctl(1212418, 2, SETVAL, 0xbffff26c)  = 0
semctl(1212418, 3, SETVAL, 0xbffff26c)  = 0
semctl(1212418, 4, SETVAL, 0xbffff26c)  = 0
semctl(1212418, 5, SETVAL, 0xbffff26c)  = 0
semctl(1212418, 6, SETVAL, 0xbffff26c)  = 0
semctl(1212418, 7, SETVAL, 0xbffff26c)  = 0
semctl(1212418, 8, SETVAL, 0xbffff26c)  = 0
semctl(1212418, 9, SETVAL, 0xbffff26c)  = 0
semctl(1212418, 10, SETVAL, 0xbffff26c) = 0
semctl(1212418, 11, SETVAL, 0xbffff26c) = 0
semctl(1212418, 12, SETVAL, 0xbffff26c) = 0
semctl(1212418, 13, SETVAL, 0xbffff26c) = 0
semctl(1212418, 14, SETVAL, 0xbffff26c) = 0
semctl(1212418, 15, SETVAL, 0xbffff26c) = 0
semget(5432004, 17, IPC_CREAT|IPC_EXCL|0600) = 1245187
semctl(1245187, 16, SETVAL, 0xbffff23c) = 0
semop(1245187, 0xbffff2a4, 1)           = 0
semctl(1245187, 0, SETVAL, 0xbffff26c)  = 0
semctl(1245187, 1, SETVAL, 0xbffff26c)  = 0
semctl(1245187, 2, SETVAL, 0xbffff26c)  = 0
semctl(1245187, 3, SETVAL, 0xbffff26c)  = 0
semctl(1245187, 4, SETVAL, 0xbffff26c)  = 0
semctl(1245187, 5, SETVAL, 0xbffff26c)  = 0
semctl(1245187, 6, SETVAL, 0xbffff26c)  = 0
semctl(1245187, 7, SETVAL, 0xbffff26c)  = 0
semctl(1245187, 8, SETVAL, 0xbffff26c)  = 0
semctl(1245187, 9, SETVAL, 0xbffff26c)  = 0
semctl(1245187, 10, SETVAL, 0xbffff26c) = 0
semctl(1245187, 11, SETVAL, 0xbffff26c) = 0
semctl(1245187, 12, SETVAL, 0xbffff26c) = 0
semctl(1245187, 13, SETVAL, 0xbffff26c) = 0
semctl(1245187, 14, SETVAL, 0xbffff26c) = 0
semctl(1245187, 15, SETVAL, 0xbffff26c) = 0
semget(5432005, 17, IPC_CREAT|IPC_EXCL|0600) = 1277956
semctl(1277956, 16, SETVAL, 0xbffff23c) = 0
semop(1277956, 0xbffff2a4, 1)           = 0
semctl(1277956, 0, SETVAL, 0xbffff26c)  = 0
brk(0)                                  = 0x827d000
brk(0x829e000)                          = 0x829e000
fork()                                  = 6148
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
sigreturn()                             = ? (mask now [])
rt_sigprocmask(SIG_SETMASK, ~[ILL TRAP ABRT BUS FPE SEGV CONT SYS],
NULL, 8) = 0
accept(4, {sa_family=AF_UNIX, path=@}, [2]) = 9
getsockname(9, {sa_family=AF_UNIX,
path="/var/run/postgresql/.s.PGSQL.5432"}, [36]) = 0
fork()                                  = 6149
close(9)                                = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
--- SIGCHLD (Child exited) @ 0 (0) ---
rt_sigprocmask(SIG_SETMASK, ~[ILL TRAP ABRT BUS FPE SEGV CONT SYS],
NULL, 8) = 0
waitpid(-1, [WIFEXITED(s) && WEXITSTATUS(s) == 0], WNOHANG) = 6149
send(5, "\2\0\0\0\30\0\0\0\0\0\0\0\5\30\0\0\0\0\0\0\0\0\0\0", 24, 0) = 24
waitpid(-1, 0xbffff39c, WNOHANG)        = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
sigreturn()                             = ? (mask now [])
select(5, [3 4], [], NULL, {60, 0} <unfinished ...>

---------------------------------8<-------------------------------------


--
  e-Trolley Sayegh & John, Nabil Sayegh
  Tel.: 0700 etrolley /// 0700 38765539
  Fax.: +49 69 8299381-8
  PGP : http://www.e-trolley.de


Re: plperl db crash

From
Nabil Sayegh
Date:
Oliver Elphick wrote:
> Wait for the new release and try it.  Then let me know if it still isn't
> working.

fixed

with libpgperl 7.3.4-6 it works.

TFYH
--
  e-Trolley Sayegh & John, Nabil Sayegh
  Tel.: 0700 etrolley /// 0700 38765539
  Fax.: +49 69 8299381-8
  PGP : http://www.e-trolley.de