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: Fri, 5 Nov 2021 04:22:36 -0700
Message-ID: <20211105112236.GA711250@rfd.leadboat.com> (raw )
In-Reply-To: <CABimMB6HFAu3fRn3sD0EKU=Hhz5fxQNixrhB__8Wk-p7v5zExg@mail.gmail.com >
References: <CANFyU94Xa8a5+4sZ7PxOiDLq+yN89g6y-9nNk-eLEvX6YUXbXA@mail.gmail.com >
<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 >
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.
Attachments:
step-to-crash-v0.2.patch (text/plain, 2.7K) 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..f55bd5b
--- /dev/null
+++ b/src/test/subscription/t/080_step_equalTupleDescs.pl
@@ -0,0 +1,111 @@
+# 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 => 1;
+use IPC::Run;
+
+my $node = PostgreSQL::Test::Cluster->new('main');
+$node->init;
+$node->start;
+
+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";
+
+$ENV{PATH} =~ /^([^:]*):/;
+my $bindir = $1;
+die "could not guess bindir from PATH=$ENV{PATH}" unless $1;
+
+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 } . $node->basedir . q{/gdb_started.txt
+set logging on
+set logging off
+};
+$gdb->pump until $gdb_in eq '';
+sleep .1 while !-f $node->basedir.'/gdb_started.txt';
+
+# 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
+set $loopvar = 25000
+while ($loopvar--)
+ stepi
+end
+maintenance info sections ALLOBJ
+quit
+};
+
+for (;;) {
+ $psql->pump_nb;
+ $gdb->pump_nb;
+ last if $in eq '' && $gdb_in eq '';
+ sleep .1;
+}
+
+$psql->finish;
+$gdb->finish;
+ok(1);
view thread (107+ messages) latest in thread
Message-ID: <20211105112236.GA711250@rfd.leadboat.com>
Permalink: ../20211105112236.GA711250@rfd.leadboat.com/
Also on: postgresql.org/message-id/20211105112236.GA711250@rfd.leadboat.com
copy link · copy postgr.es · copy git am
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: <20211105112236.GA711250@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