From: | Kyotaro HORIGUCHI <horiguchi(dot)kyotaro(at)lab(dot)ntt(dot)co(dot)jp> |
---|---|
To: | thomas(dot)munro(at)enterprisedb(dot)com |
Cc: | fujita(dot)etsuro(at)lab(dot)ntt(dot)co(dot)jp, tgl(at)sss(dot)pgh(dot)pa(dot)us, eric(dot)cyr(at)gmail(dot)com, pgsql-bugs(at)lists(dot)postgresql(dot)org, pgsql-hackers(at)lists(dot)postgresql(dot)org |
Subject: | Re: BUG #15449: file_fdw using program cause exit code error when using LIMIT |
Date: | 2018-11-12 09:23:51 |
Message-ID: | 20181112.182351.248435870.horiguchi.kyotaro@lab.ntt.co.jp |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs pgsql-hackers |
At Fri, 9 Nov 2018 20:32:54 +1300, Thomas Munro <thomas(dot)munro(at)enterprisedb(dot)com> wrote in <CAEepm=21wvBaKY2cbN62xn8JoPygLLhTawK2TkBac8Suw68YBw(at)mail(dot)gmail(dot)com>
> On Fri, Nov 9, 2018 at 6:39 PM Kyotaro HORIGUCHI
> <horiguchi(dot)kyotaro(at)lab(dot)ntt(dot)co(dot)jp> wrote:
> > Mmm..I didn't get an error at hand on both CentOS7 and High Sierra.
> >
> > | $ perl -e 'for (my $i=0; $i< 1000000; $i++) { print "$i\n"; }' | head -5
> > ...
> > | 4
> > | $ echo $?
> > | 0
>
> That's the exit code from head. You can see python or perl's exit
> code by adding strace in front (on Linux):
Sorry. My stupid. I understand it as head ignores not only
SIGPIPE but SIGSEV and any error exit status of the calling
program. I tried head with a program ends with SEGV and saw that
head ignores it.
$ ./t
line 1
Segmentation fault (core dumped)
$ ./t | head -5 # SEGV before head closes the pipe
line 1
$
This is more tolerant than what I proposed before. (I think it is
too-much tolerant for us).
> > create foreign table ft5 (a text) server svf1 options (program 'ruby -e "for i in 1..1000 do puts i; end"');
> > select * from ft5 limit 5;
> > a
> > ---
> > 1
> > ...
> > 5
> > (5 rows)
> > (no error)
>
> 1000 is not enough... due to buffering, it works. Try 1000000:
Ah. Understood. Thanks. (Ruby's flush donesn't work for pipes..)
> postgres=# create foreign table ft5 (a text) server svf1 options
> (program 'ruby -e "for i in 1..1000000 do puts i; end"');
> CREATE FOREIGN TABLE
> postgres=# select * from ft5 limit 5;
> ERROR: program "ruby -e "for i in 1..1000000 do puts i; end"" failed
> DETAIL: child process exited with exit code 1
I saw the same failure. Ruby handles SIGPIPE and converts it to
exit(1). It cannot be handled by just ignoring SIGPIPE.
Ruby seems to be a friend of my second patch:p
regards.
--
Kyotaro Horiguchi
NTT Open Source Software Center
From | Date | Subject | |
---|---|---|---|
Next Message | Kyotaro HORIGUCHI | 2018-11-12 09:52:14 | Re: BUG #15449: file_fdw using program cause exit code error when using LIMIT |
Previous Message | Frank Büttner | 2018-11-12 09:14:56 | Re: BUG #15493: Wrong name of fields/missing fields for the internal statistic |
From | Date | Subject | |
---|---|---|---|
Next Message | Kyotaro HORIGUCHI | 2018-11-12 09:52:14 | Re: BUG #15449: file_fdw using program cause exit code error when using LIMIT |
Previous Message | Noah Misch | 2018-11-12 08:33:58 | Re: DSM segment handle generation in background workers |