Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mjUoU-0003H4-9P for pgsql-bugs@arkaria.postgresql.org; Sat, 06 Nov 2021 23:09:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mjUnw-0005YA-7k for pgsql-bugs@arkaria.postgresql.org; Sat, 06 Nov 2021 23:08:56 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mjUnv-0005Y1-Jz for pgsql-bugs@lists.postgresql.org; Sat, 06 Nov 2021 23:08:55 +0000 Received: from mail-qk1-x72e.google.com ([2607:f8b0:4864:20::72e]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1mjUns-0006vy-BJ for pgsql-bugs@lists.postgresql.org; Sat, 06 Nov 2021 23:08:54 +0000 Received: by mail-qk1-x72e.google.com with SMTP id bk22so12172359qkb.6 for ; Sat, 06 Nov 2021 16:08:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=leadboat.com; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=Xp0MpbmuNj6FOvZhn/WdqvyUmktMUsi96pz8u30EkkM=; b=MBe/VTmqcGBWbu9NN2M06xEQ8eGaBZ8Npfvgx3jHqlJTy01Oh0BwmyShnYeZOM2e61 WV+bcfp03JYHGlnpGMq5gI3FIqwY00sSfkxivxM0/+DNyKLHq2cRNLiEauxqoV5XKBvu yw0ZhLqfo+gemBa+YSU9otVDI5SDWOWJEbSng= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=Xp0MpbmuNj6FOvZhn/WdqvyUmktMUsi96pz8u30EkkM=; b=rlHYSFSswV+S54+TYaTMqmPYEkTd9ttTllulWXOrCjxCDBghBPc6JAdpoeRe8VgWLJ hpq/XNlh/82ozdxj0+bA9czoM0NTeeKKSV95lAojZP9u63k24Kz733QCry6HVKtzYg5/ bYiAu7xRxGJ5yicsbf1CErInNZi/ozIrnBzrUk1yP/MCK+llBsaQwsoZMdO19vKxeW7Y xz6+ps3WEGo42064FNrLXsqBFt9MqdTXWNVbNd0cjVdg6TwCQ6nRVlSSTVJkQjbaYNCg sTFCOW6DDZE0eQld+SUUd4iuJW+oO8bk2udsQKqvjdbaJC8Wy1hdn7VporK92nJEWv2S K06Q== X-Gm-Message-State: AOAM533jXgZ0QixiVCTW7KF0Dv5FIJvjoi8G6osv6eaNsdJ2SW/2ePKj 5lU/ANGfXDKl/EQ2ufEEfStsAg== X-Google-Smtp-Source: ABdhPJzMo2A44+jD35mDfmiUeye72SqtQYOs6usZFWJ5JOoNr+QkFcIy8RBLgatxL1kxzYRVITXUgg== X-Received: by 2002:a05:620a:172a:: with SMTP id az42mr6278532qkb.99.1636240131048; Sat, 06 Nov 2021 16:08:51 -0700 (PDT) Received: from rfd.leadboat.com ([2600:1702:a20:5750::46]) by smtp.gmail.com with ESMTPSA id j19sm1747554qkp.28.2021.11.06.16.08.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 06 Nov 2021 16:08:50 -0700 (PDT) Date: Sat, 6 Nov 2021 16:08:46 -0700 From: Noah Misch To: Semab Tariq Cc: Thomas Munro , Sandeep Thakkar , Robert Haas , Andrey Borodin , Andres Freund , CM Team , PostgreSQL mailing lists , Michael Paquier , Tom Lane , Peter Geoghegan Subject: Re: CREATE INDEX CONCURRENTLY does not index prepared xact's data Message-ID: <20211106230846.GA790288@rfd.leadboat.com> References: <20211103044203.GA570491@rfd.leadboat.com> <20211105013553.GA671366@rfd.leadboat.com> <20211105090347.GB671366@rfd.leadboat.com> <20211105112236.GA711250@rfd.leadboat.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="SLDf9lqlvOQaIe6s" Content-Disposition: inline In-Reply-To: <20211105112236.GA711250@rfd.leadboat.com> User-Agent: Mutt/1.5.24 (2015-08-30) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --SLDf9lqlvOQaIe6s Content-Type: text/plain; charset=us-ascii Content-Disposition: inline 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. --SLDf9lqlvOQaIe6s Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="step-to-crash-v0.3.patch" Author: Noah Misch Commit: Noah Misch 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; +} --SLDf9lqlvOQaIe6s--