Re: Tab completion regression test failed on illumos
On Fri, Nov 3, 2023 at 3:14 PM Japin Li wrote: > Thanks for your explantation, the termios.c_oflag on Illumos enables TABDLY > by default. It seems that various other open source Unixen dropped that between 29 and 2 years ago, but not illumos. I guess no one ever had IO::Pty installed on an older OpenBSD or NetBSD machine or we'd have seen this problem there too, but as of a few years ago they behave like Linux and FreeBSD: no tab expansion. https://github.com/apple-oss-distributions/xnu/blob/1031c584a5e37aff177559b9f69dbd3c8c3fd30a/bsd/sys/ttydefaults.h#L79 https://github.com/freebsd/freebsd-src/commit/210df5b10c855161149dd7a1e88f610972f2afaa https://github.com/NetBSD/src/commit/44a07dbdbdcb2b9e14340856c8267dc659a0ebd8 https://github.com/openbsd/src/commit/818e463522f2237e9da1be8aa7958dcc8af28fca https://github.com/illumos/illumos-gate/blob/0f9b8dcfdb872a210003f6b077d091b793c24a6e/usr/src/uts/common/io/tty_common.c#L35
Re: Tab completion regression test failed on illumos
On Fri, 03 Nov 2023 at 10:03, Thomas Munro wrote: > On Fri, Nov 3, 2023 at 2:22 PM Thomas Munro wrote: >> On Fri, Nov 3, 2023 at 3:42 AM Japin Li wrote: >> > I think this might be a bug comes from Illumos pseudo-tty. I can reproduce >> > this by using pseudo-tty on Illumos. >> >> I don't know but my guess is that this has to do with termios defaults >> being different. From a quick look at 'man termios', perhaps TABDLY >> is set to expand tabs to spaces? Can you fix it by tweaking the flags >> in src/common/sprompt.c? > > Argh, sorry that's completely the wrong end. I suppose that sort of > thing would have to happen in IPC::Run. I wonder what would happen if > IPC::Run called ->set_raw() on the IO::Pty object it constructs, or > failing that, if IO::Stty can be used to mess with the relevant > settings. Thanks for your explantation, the termios.c_oflag on Illumos enables TABDLY by default. -- Regrads, Japin Li ChengDu WenWu Information Technology Co., Ltd.
Re: Tab completion regression test failed on illumos
On Fri, Nov 3, 2023 at 2:22 PM Thomas Munro wrote: > On Fri, Nov 3, 2023 at 3:42 AM Japin Li wrote: > > I think this might be a bug comes from Illumos pseudo-tty. I can reproduce > > this by using pseudo-tty on Illumos. > > I don't know but my guess is that this has to do with termios defaults > being different. From a quick look at 'man termios', perhaps TABDLY > is set to expand tabs to spaces? Can you fix it by tweaking the flags > in src/common/sprompt.c? Argh, sorry that's completely the wrong end. I suppose that sort of thing would have to happen in IPC::Run. I wonder what would happen if IPC::Run called ->set_raw() on the IO::Pty object it constructs, or failing that, if IO::Stty can be used to mess with the relevant settings.
Re: Tab completion regression test failed on illumos
On Fri, Nov 3, 2023 at 3:42 AM Japin Li wrote: > On Thu, 02 Nov 2023 at 22:23, Tom Lane wrote: > > Japin Li writes: > >> It seems the 'SEL\t' is converted to 'SEL ' which is "SEL" with 5 > >> spaces. > > > > That would be plausible if readline were disabled, or otherwise > > not functioning. > > > > I think this might be a bug comes from Illumos pseudo-tty. I can reproduce > this by using pseudo-tty on Illumos. I don't know but my guess is that this has to do with termios defaults being different. From a quick look at 'man termios', perhaps TABDLY is set to expand tabs to spaces? Can you fix it by tweaking the flags in src/common/sprompt.c? Somewhere near the line that disables ECHO, perhaps you can figure out how to disable that in c_oflag? This is all the ancient forgotten magic that allows all Unixes to drive 70 year old electric typewriters, inserting suitable pauses and converting various things as it goes.
Re: Tab completion regression test failed on illumos
On Thu, 02 Nov 2023 at 22:23, Tom Lane wrote: > Japin Li writes: >> It seems the 'SEL\t' is converted to 'SEL ' which is "SEL" with 5 spaces. > > That would be plausible if readline were disabled, or otherwise > not functioning. > I think this might be a bug comes from Illumos pseudo-tty. I can reproduce this by using pseudo-tty on Illumos. Here is a simple test case: $ cat pseudo-tty.c #define _XOPEN_SOURCE 600 #include #include #include #include #include #include #include #define DEV_PTMX"/dev/ptmx" int main(void) { int ptm_fd; pid_t pid; char *pts_name; ptm_fd = open(DEV_PTMX, O_RDWR); grantpt(ptm_fd); unlockpt(ptm_fd); pts_name = ptsname(ptm_fd); pid = fork(); if (pid == -1) { fprintf(stderr, "could not fork a new process: %m\n"); close(ptm_fd); return -1; } else if (pid == 0) { int pts_fd; close(ptm_fd); pts_fd = open(pts_name, O_RDWR); write(pts_fd, "SEL\tH", 5); close(pts_fd); } else { int status; char buffer[512] = { 0 }; ssize_t bytes; bytes = read(ptm_fd, buffer, sizeof(buffer)); printf("%ld: '%s'\n", bytes, buffer); waitpid(pid, , 0); close(ptm_fd); } return 0; } On IllumsOS $ gcc -o pseudo-tty pseudo-tty.c $ ./pseudo-tty 9: 'SEL H' On Ubuntu $ gcc -o pseudo-tty pseudo-tty.c $ ./pseudo-tty 5: 'SEL H' -- Regrads, Japin Li ChengDu WenWu Information Technology Co., Ltd.
Re: Tab completion regression test failed on illumos
Japin Li writes: > It seems the 'SEL\t' is converted to 'SEL ' which is "SEL" with 5 spaces. That would be plausible if readline were disabled, or otherwise not functioning. regards, tom lane
Re: Tab completion regression test failed on illumos
On Thu, 02 Nov 2023 at 13:42, Japin Li wrote: > On Thu, 02 Nov 2023 at 13:01, Noah Misch wrote: >> On Wed, Nov 01, 2023 at 03:19:39PM +0800, Japin Li wrote: >>> I try to run regression test on illumos, the 010_tab_completion will >>> failed because of timeout. >> >>> Any suggestions? Thanks in advance! >> >> This test failed for me, in a different way, when I briefly installed IO::Pty >> on a Solaris buildfarm member: >> https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=wrasse=2023-01-03%2022%3A39%3A26 >> > Thanks for confirm this! > > I try to install IO::Pty using cpan, however, I cannot get the same error. > >> The IPC::Run pty tests also fail on Solaris. If I were debugging this, I'd >> start by fixing IO::Pty and IPC::Run to pass their own test suites on Solaris >> or illumos. Then I'd see if problems continue for this postgresql test. > > So, it might be a bug comes from Perl. After enable debug for IPC::Run, I found the following logs: IPC::Run 0001 0123456789012-4 [#2(415745)]: writing to fd 11 (kid's stdin) IPC::Run 0001 0123456789012-4 [#2(415745)]: write( 11, 'SEL ' ) = 4 <- Here write 4 bytes. IPC::Run 0001 0123456789012-4 [#2(415745)]: fds for select: ---r--r IPC::Run 0001 0123456789012-4 [#2(415745)]: timeout=0 IPC::Run 0001 0123456789012-4 [#2(415745)]: selected ---r IPC::Run 0001 0123456789012-4 [#2(415745)]: filtering data from fd 11 (kid's stdout) IPC::Run 0001 0123456789012-4 [#2(415745)]: reading from fd 11 (kid's stdout) IPC::Run 0001 0123456789012-4 [#2(415745)]: read( 11 ) = 8 chars 'SEL ' <- But read 8 bytes. It seems the 'SEL\t' is converted to 'SEL ' which is "SEL" with 5 spaces. -- Regrads, Japin Li ChengDu WenWu Information Technology Co., Ltd.
Re: Tab completion regression test failed on illumos
On Thu, 02 Nov 2023 at 13:01, Noah Misch wrote: > On Wed, Nov 01, 2023 at 03:19:39PM +0800, Japin Li wrote: >> I try to run regression test on illumos, the 010_tab_completion will >> failed because of timeout. > >> Any suggestions? Thanks in advance! > > This test failed for me, in a different way, when I briefly installed IO::Pty > on a Solaris buildfarm member: > https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=wrasse=2023-01-03%2022%3A39%3A26 > Thanks for confirm this! I try to install IO::Pty using cpan, however, I cannot get the same error. > The IPC::Run pty tests also fail on Solaris. If I were debugging this, I'd > start by fixing IO::Pty and IPC::Run to pass their own test suites on Solaris > or illumos. Then I'd see if problems continue for this postgresql test. So, it might be a bug comes from Perl. -- Regrads, Japin Li ChengDu WenWu Information Technology Co., Ltd.
Re: Tab completion regression test failed on illumos
On Wed, Nov 01, 2023 at 03:19:39PM +0800, Japin Li wrote: > I try to run regression test on illumos, the 010_tab_completion will > failed because of timeout. > Any suggestions? Thanks in advance! This test failed for me, in a different way, when I briefly installed IO::Pty on a Solaris buildfarm member: https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=wrasse=2023-01-03%2022%3A39%3A26 The IPC::Run pty tests also fail on Solaris. If I were debugging this, I'd start by fixing IO::Pty and IPC::Run to pass their own test suites on Solaris or illumos. Then I'd see if problems continue for this postgresql test.
Re: Tab completion regression test failed on illumos
Japin Li writes: > I try to run regression test on illumos, the 010_tab_completion will > failed because of timeout. Why are you getting this? > Begin standard error > psql::6: WARNING: wal_level is insufficient to publish logical > changes > HINT: Set wal_level to "logical" before creating subscriptions. > End standard error Not sure, but perhaps that unexpected output is confusing the test. regards, tom lane
Re: Tab completion regression test failed on illumos
Hi, > I try to run regression test on illumos, the 010_tab_completion will > failed because of timeout. > > Here is my build commands and logs: > > [...] > > Any suggestions? Thanks in advance! It's hard to say what went wrong with this output due to lack of backtrace. I would suggest adding debug output to 010_tab_completion.pl to figure out on which line the script fails. Then I would figure out the exact command that failed. Then I would execute it manually and compare the result with my expectations. -- Best regards, Aleksander Alekseev
Tab completion regression test failed on illumos
Hi hackers, I try to run regression test on illumos, the 010_tab_completion will failed because of timeout. Here is my build commands and logs: $ ../configure --enable-cassert --enable-debug --enable-nls --with-perl \ --with-python --with-tcl --with-openssl --with-libxml --with-libxslt \ --without-icu --enable-tap-tests --prefix=/home/japin/postgres/build/pg $ make -j $(nproc) ... $ cd src/bin/psql/ && make check make -C ../../../src/backend generated-headers make[1]: Entering directory '/home/japin/postgres/build/src/backend' make -C catalog distprep generated-header-symlinks make[2]: Entering directory '/home/japin/postgres/build/src/backend/catalog' make[2]: Nothing to be done for 'distprep'. make[2]: Nothing to be done for 'generated-header-symlinks'. make[2]: Leaving directory '/home/japin/postgres/build/src/backend/catalog' make -C nodes distprep generated-header-symlinks make[2]: Entering directory '/home/japin/postgres/build/src/backend/nodes' make[2]: Nothing to be done for 'distprep'. make[2]: Nothing to be done for 'generated-header-symlinks'. make[2]: Leaving directory '/home/japin/postgres/build/src/backend/nodes' make -C utils distprep generated-header-symlinks make[2]: Entering directory '/home/japin/postgres/build/src/backend/utils' make[2]: Nothing to be done for 'distprep'. make[2]: Nothing to be done for 'generated-header-symlinks'. make[2]: Leaving directory '/home/japin/postgres/build/src/backend/utils' make[1]: Leaving directory '/home/japin/postgres/build/src/backend' rm -rf '/home/japin/postgres/build'/tmp_install /opt/local/bin/mkdir -p '/home/japin/postgres/build'/tmp_install/log make -C '../../..' DESTDIR='/home/japin/postgres/build'/tmp_install install >'/home/japin/postgres/build'/tmp_install/log/install.log 2>&1 make -j1 checkprep >>'/home/japin/postgres/build'/tmp_install/log/install.log 2>&1 PATH="/home/japin/postgres/build/tmp_install/home/japin/postgres/build/pg/bin:/home/japin/postgres/build/src/bin/psql:$PATH" LD_LIBRARY_PATH="/home/japin/postgres/build/tmp_install/home/japin/postgres/build/pg/lib" INITDB_TEMPLATE='/home/japin/postgres/build'/tmp_install/initdb-template initdb -A trust -N --no-instructions --no-locale '/home/japin/postgres/build'/tmp_install/initdb-template >>'/home/japin/postgres/build'/tmp_install/log/initdb-template.log 2>&1 echo "# +++ tap check in src/bin/psql +++" && rm -rf '/home/japin/postgres/build/src/bin/psql'/tmp_check && /opt/local/bin/mkdir -p '/home/japin/postgres/build/src/bin/psql'/tmp_check && cd /home/japin/postgres/build/../src/bin/psql && TESTLOGDIR='/home/japin/postgres/build/src/bin/psql/tmp_check/log' TESTDATADIR='/home/japin/postgres/build/src/bin/psql/tmp_check' PATH="/home/japin/postgres/build/tmp_install/home/japin/postgres/build/pg/bin:/home/japin/postgres/build/src/bin/psql:$PATH" LD_LIBRARY_PATH="/home/japin/postgres/build/tmp_install/home/japin/postgres/build/pg/lib" INITDB_TEMPLATE='/home/japin/postgres/build'/tmp_install/initdb-template PGPORT='65432' top_builddir='/home/japin/postgres/build/src/bin/psql/../../..' PG_REGRESS='/home/japin/postgres/build/src/bin/psql/../../../src/test/regress/pg_regress' /opt/local/bin/prove -I /home/japin/postgres/build/../src/test/perl/ -I /home/japin/postgres/build/../src/bin/psql t/*.pl # +++ tap check in src/bin/psql +++ t/001_basic.pl ... ok t/010_tab_completion.pl .. Dubious, test returned 25 (wstat 6400, 0x1900) No subtests run t/020_cancel.pl .. ok Test Summary Report --- t/010_tab_completion.pl (Wstat: 6400 Tests: 0 Failed: 0) Non-zero exit status: 25 Parse errors: No plan found in TAP output $ cat tmp_check/log/regress_log_010_tab_completion # Checking port 59378 # Found port 59378 Name: main Data directory: /home/japin/postgres/build/src/bin/psql/tmp_check/t_010_tab_completion_main_data/pgdata Backup directory: /home/japin/postgres/build/src/bin/psql/tmp_check/t_010_tab_completion_main_data/backup Archive directory: /home/japin/postgres/build/src/bin/psql/tmp_check/t_010_tab_completion_main_data/archives Connection string: port=59378 host=/tmp/2tdG0Ck7Zb Log file: /home/japin/postgres/build/src/bin/psql/tmp_check/log/010_tab_completion_main.log [07:06:06.492](0.050s) # initializing database system by copying initdb template # Running: cp -RPp /home/japin/postgres/build/tmp_install/initdb-template /home/japin/postgres/build/src/bin/psql/tmp_check/t_010_tab_completion_main_data/pgdata # Running: /home/japin/postgres/build/src/bin/psql/../../../src/test/regress/pg_regress --config-auth /home/japin/postgres/build/src/bin/psql/tmp_check/t_010_tab_completion_main_data/pgdata ### Starting node "main" # Running: pg_ctl -w -D