pg.ddx.io  pgsql-bugs@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Noah Misch <noah@leadboat.com>
To: Semab Tariq <semab.tariq@enterprisedb.com>
Cc: Thomas Munro <thomas.munro@gmail.com>
Cc: Sandeep Thakkar <sandeep.thakkar@enterprisedb.com>
Cc: Robert Haas <robertmhaas@gmail.com>
Cc: Andrey Borodin <x4mmm@yandex-team.ru>
Cc: Andres Freund <andres@anarazel.de>
Cc: CM Team <cm@enterprisedb.com>
Cc: PostgreSQL mailing lists <pgsql-bugs@lists.postgresql.org>
Cc: Michael Paquier <michael@paquier.xyz>
Cc: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Peter Geoghegan <pg@bowt.ie>
Subject: Re: CREATE INDEX CONCURRENTLY does not index prepared xact's data
Date: Sat, 6 Nov 2021 16:08:46 -0700
Message-ID: <20211106230846.GA790288@rfd.leadboat.com> (raw)
In-Reply-To: <20211105112236.GA711250@rfd.leadboat.com>
References: <CA+TgmobbOFpogLx6Qem1=WxGo9ineTSTwNE4_ucdgeBtyDCGrg@mail.gmail.com>
	<CANFyU96pdjUgGEopmU6KhaU782ff7HF4gvJ1RBqsbXiUWYQvMg@mail.gmail.com>
	<20211103044203.GA570491@rfd.leadboat.com>
	<CABimMB4mRs9N3eivR-=qF9M8oWc5E6OX7GywsWF0DXN4P5gNEA@mail.gmail.com>
	<CA+hUKG+67HCS6sJta2xiaf3Fbw+wx_jyGT+E7nKXWqK5zNyJ7Q@mail.gmail.com>
	<20211105013553.GA671366@rfd.leadboat.com>
	<CABimMB4RYDOtVKLp34U7n316ARr4cBBX0dxEgEXMA7X-Coh2=Q@mail.gmail.com>
	<20211105090347.GB671366@rfd.leadboat.com>
	<CABimMB6HFAu3fRn3sD0EKU=Hhz5fxQNixrhB__8Wk-p7v5zExg@mail.gmail.com>
	<20211105112236.GA711250@rfd.leadboat.com>

On Fri, Nov 05, 2021 at 04:22:36AM -0700, Noah Misch wrote:
> On Fri, Nov 05, 2021 at 03:21:15PM +0500, Semab Tariq wrote:
> > Breakpoint 1, 0x40000000003fcb50:0 in equalTupleDescs (
> >     tupdesc1=0x40010006f968, tupdesc2=0x87ffffffffffac50)
> 
> The addresses there are weird.  tupdesc1 is neither a stack address nor a heap
> address; it may be in a program text section.  tupdesc2 is a stack address.
> In the earlier stack trace from
> https://postgr.es/m/CANFyU94Xa8a5+4sZ7PxOiDLq+yN89g6y-9nNk-eLEvX6YUXbXA@mail.gmail.com
> both tupdesc1 and tupdesc2 were heap addresses.
> 
> > /home/pgbfarm/buildroot-gharial-HEAD/postgresql/src/test/subscription/tmp_check/t_080_step_equalTupleDescs_main_data/commands-gdb:8: Error in sourced command file:
> > Error accessing memory address 0x40010006f968: Bad address.
> 
> Thanks.  Please try the attached test version, which avoids exiting too early
> like the last version did.

If you haven't run that yet, please use this version instead.  It collects
more data.  The log will probably be too big to be proper for the mailing
list, so please compress it.

Attachments:

step-to-crash-v0.3.patch (text/plain, 3.6K) download Author: Noah Misch <noah@leadboat.com> Commit: Noah Misch <noah@leadboat.com> diff --git a/src/test/subscription/t/080_step_equalTupleDescs.pl b/src/test/subscription/t/080_step_equalTupleDescs.pl new file mode 100644 index 0000000..5125af4 --- /dev/null +++ b/src/test/subscription/t/080_step_equalTupleDescs.pl @@ -0,0 +1,156 @@ +# run with: make -C src/test/subscription check PROVE_TESTS=t/080_step_equalTupleDescs.pl +# email src/test/subscription/tmp_check/log/regress_log_080_step_equalTupleDescs + +use strict; +use warnings; +use PostgreSQL::Test::Cluster; +use PostgreSQL::Test::Utils; +use Test::More tests => 10; +use IPC::Run; +use Time::HiRes qw(usleep); + +my $node = PostgreSQL::Test::Cluster->new('main'); +$node->init; +my $gdb_start_witness = $node->basedir . '/gdb_started.txt'; + +$ENV{PATH} =~ /^([^:]*):/; +my $bindir = $1; +die "could not guess bindir from PATH=$ENV{PATH}" unless $1; + +for (1 .. 10) +{ + poll_start($node); + $node->safe_psql('postgres', 'DROP TABLE IF EXISTS attmp'); + unlink $gdb_start_witness; + + my $in = ''; + my $out = ''; + my $timer = IPC::Run::timeout(180); + my $psql = $node->background_psql('postgres', \$in, \$out, $timer, + on_error_stop => 0); + + $in .= q{ +SELECT pg_backend_pid(), 'after_pid'; +}; + $psql->pump until $out =~ /^([0-9]*)\|after_pid/m; + my $pid = $1; + print "backend pid: $pid\n"; + + my $gdb_in = ''; + my $gdb_cmdline = [ qw(gdb --nx --pid), $pid, "$bindir/postgres" ]; + print("# Running: " . join(" ", @{$gdb_cmdline}) . "\n"); + my $gdb = IPC::Run::start($gdb_cmdline, '<', \$gdb_in, $timer); + + $gdb_in = q{ +b equalTupleDescs +ignore 1 9 +set logging file } . $gdb_start_witness . q{ +set logging on +set logging off +}; + $gdb->pump until $gdb_in eq ''; + sleep .1 while !-f $gdb_start_witness; + + # first 28 lines of src/test/regress/sql/alter_table.sql + $in .= q{ +-- +-- ALTER_TABLE +-- + +-- Clean up in case a prior regression run failed +SET client_min_messages TO 'warning'; +DROP ROLE IF EXISTS regress_alter_table_user1; +RESET client_min_messages; + +CREATE USER regress_alter_table_user1; + +-- +-- add attribute +-- + +CREATE TABLE attmp (initial int4); + +COMMENT ON TABLE attmp_wrong IS 'table comment'; +COMMENT ON TABLE attmp IS 'table comment'; +COMMENT ON TABLE attmp IS NULL; + +ALTER TABLE attmp ADD COLUMN xmin integer; -- fails + +ALTER TABLE attmp ADD COLUMN a int4 default 3; + +ALTER TABLE attmp ADD COLUMN b name; + +ALTER TABLE attmp ADD COLUMN c text; +}; + + $in .= q{ +\q +}; + + $gdb_in .= q{ +continue +p *tupdesc1 +p *tupdesc2 +p tupdesc1->attrs[0] +p tupdesc1->attrs[1] +p tupdesc1->attrs[2] +p tupdesc2->attrs[0] +p tupdesc2->attrs[1] +p tupdesc2->attrs[2] +backtrace full +info proc mappings +set $loopvar = 40 +while ($loopvar--) + frame $loopvar + info frame +end +set $loopvar = 25000 +while ($loopvar--) + stepi +end +maintenance info sections ALLOBJ +info proc mappings +quit +}; + + for (;;) + { + $psql->pump_nb; + $gdb->pump_nb; + last if $in eq '' && $gdb_in eq ''; + sleep .1; + } + + $psql->finish; + $gdb->finish; + ok(1); + + # Like $node->kill9, but don't care if a crash already downed the node. + kill(9, $node->{_pid}); + $node->{_pid} = undef; +} + + +# copied from 017_shm.pl +sub poll_start +{ + my ($node) = @_; + + my $max_attempts = 180 * 10; + my $attempts = 0; + + while ($attempts < $max_attempts) + { + $node->start(fail_ok => 1) && return 1; + + # Wait 0.1 second before retrying. + usleep(100_000); + + $attempts++; + } + + # No success within 180 seconds. Try one last time without fail_ok, which + # will BAIL_OUT unless it succeeds. + $node->start && return 1; + return 0; +}

view thread (107+ messages)  latest in thread

Message-ID: <20211106230846.GA790288@rfd.leadboat.com>
Permalink:  ../20211106230846.GA790288@rfd.leadboat.com/
Also on:    postgresql.org/message-id/20211106230846.GA790288@rfd.leadboat.com

 ·  · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-bugs@postgresql.org
  Cc: noah@leadboat.com, semab.tariq@enterprisedb.com, thomas.munro@gmail.com, sandeep.thakkar@enterprisedb.com, robertmhaas@gmail.com, x4mmm@yandex-team.ru, andres@anarazel.de, cm@enterprisedb.com, pgsql-bugs@lists.postgresql.org, michael@paquier.xyz, tgl@sss.pgh.pa.us, pg@bowt.ie
  Subject: Re: CREATE INDEX CONCURRENTLY does not index prepared xact's data
  In-Reply-To: <20211106230846.GA790288@rfd.leadboat.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox