Thread: spgist recovery assertion failure

spgist recovery assertion failure

From
Noah Misch
Date:
When I caused a crash during the create_index regression test, recovery hit an
assertion failure.  Minimal test case:

psql -X <<EOSQL
CREATE TABLE t (c text);
INSERT INTO t SELECT 'P0123456789abcdef' FROM generate_series(1,1000);
INSERT INTO t VALUES ('P0123456789abcdefF');
CREATE INDEX ON t USING spgist (c);
EOSQL
pg_ctl -m immediate -w restart

The log ends with:

29294 2015-07-27 04:41:43.330 GMT LOG:  database system was not properly shut down; automatic recovery in progress
29294 2015-07-27 04:41:43.330 GMT LOG:  redo starts at 0/17A4070
TRAP: FailedAssertion("!(xldata->parentBlk == -1)", File: "spgxlog.c", Line: 338)
29292 2015-07-27 04:41:43.338 GMT LOG:  startup process (PID 29294) was terminated by signal 6: Aborted
29292 2015-07-27 04:41:43.338 GMT LOG:  aborting startup due to startup process failure

REL9_4_STABLE is unaffected.  I suspect, but have not checked, that a standby
replaying WAL from a cluster running "make installcheck" would observe the
same problem.

Thanks,
nm



Re: spgist recovery assertion failure

From
Michael Paquier
Date:
On Mon, Jul 27, 2015 at 2:00 PM, Noah Misch <noah@leadboat.com> wrote:
> When I caused a crash during the create_index regression test, recovery hit an
> assertion failure.  Minimal test case:
>
> psql -X <<EOSQL
> CREATE TABLE t (c text);
> INSERT INTO t SELECT 'P0123456789abcdef' FROM generate_series(1,1000);
> INSERT INTO t VALUES ('P0123456789abcdefF');
> CREATE INDEX ON t USING spgist (c);
> EOSQL
> pg_ctl -m immediate -w restart

On which platform are you seeing the failure? I am afraid I could not
reproduce the failure on Linux and OSX after testing it on HEAD.
-- 
Michael



Re: spgist recovery assertion failure

From
Noah Misch
Date:
On Mon, Jul 27, 2015 at 02:19:09PM +0900, Michael Paquier wrote:
> On Mon, Jul 27, 2015 at 2:00 PM, Noah Misch <noah@leadboat.com> wrote:
> > When I caused a crash during the create_index regression test, recovery hit an
> > assertion failure.  Minimal test case:
> >
> > psql -X <<EOSQL
> > CREATE TABLE t (c text);
> > INSERT INTO t SELECT 'P0123456789abcdef' FROM generate_series(1,1000);
> > INSERT INTO t VALUES ('P0123456789abcdefF');
> > CREATE INDEX ON t USING spgist (c);
> > EOSQL
> > pg_ctl -m immediate -w restart
> 
> On which platform are you seeing the failure? I am afraid I could not
> reproduce the failure on Linux and OSX after testing it on HEAD.

I saw it on ppc64 Fedora and on {ppc32 PostgreSQL, ppc64 kernel} AIX.  Like
you, I don't see it on x86_64 Ubuntu.  Perhaps it is specific to big-endian.



Re: spgist recovery assertion failure

From
Piotr Stefaniak
Date:
On 07/27/2015 07:19 AM, Michael Paquier wrote:
> On Mon, Jul 27, 2015 at 2:00 PM, Noah Misch <noah@leadboat.com> wrote:
>> When I caused a crash during the create_index regression test, recovery hit an
>> assertion failure.  Minimal test case:
>>
>> psql -X <<EOSQL
>> CREATE TABLE t (c text);
>> INSERT INTO t SELECT 'P0123456789abcdef' FROM generate_series(1,1000);
>> INSERT INTO t VALUES ('P0123456789abcdefF');
>> CREATE INDEX ON t USING spgist (c);
>> EOSQL
>> pg_ctl -m immediate -w restart
>
> On which platform are you seeing the failure? I am afraid I could not
> reproduce the failure on Linux and OSX after testing it on HEAD.
>

I'm having the same symptoms with
159cff58cf3b565be3c17901698a74238e9e23f8 on Ubuntu Linux 3.4.39 armv7l.

Attachment

Re: spgist recovery assertion failure

From
Michael Paquier
Date:
On Mon, Jul 27, 2015 at 2:33 PM, Piotr Stefaniak
<postgres@piotr-stefaniak.me> wrote:
> On 07/27/2015 07:19 AM, Michael Paquier wrote:
>>
>> On Mon, Jul 27, 2015 at 2:00 PM, Noah Misch <noah@leadboat.com> wrote:
>>>
>>> When I caused a crash during the create_index regression test, recovery
>>> hit an
>>> assertion failure.  Minimal test case:
>>>
>>> psql -X <<EOSQL
>>> CREATE TABLE t (c text);
>>> INSERT INTO t SELECT 'P0123456789abcdef' FROM generate_series(1,1000);
>>> INSERT INTO t VALUES ('P0123456789abcdefF');
>>> CREATE INDEX ON t USING spgist (c);
>>> EOSQL
>>> pg_ctl -m immediate -w restart
>>
>>
>> On which platform are you seeing the failure? I am afraid I could not
>> reproduce the failure on Linux and OSX after testing it on HEAD.
>>
>
> I'm having the same symptoms with
> 159cff58cf3b565be3c17901698a74238e9e23f8 on Ubuntu Linux 3.4.39 armv7l.

Yes, on armv7l this can be indeed reproduced.
-- 
Michael



Re: spgist recovery assertion failure

From
Heikki Linnakangas
Date:
On 07/27/2015 04:24 PM, Michael Paquier wrote:
> On Mon, Jul 27, 2015 at 2:33 PM, Piotr Stefaniak
> <postgres@piotr-stefaniak.me> wrote:
>> On 07/27/2015 07:19 AM, Michael Paquier wrote:
>>>
>>> On Mon, Jul 27, 2015 at 2:00 PM, Noah Misch <noah@leadboat.com> wrote:
>>>>
>>>> When I caused a crash during the create_index regression test, recovery
>>>> hit an
>>>> assertion failure.  Minimal test case:
>>>>
>>>> psql -X <<EOSQL
>>>> CREATE TABLE t (c text);
>>>> INSERT INTO t SELECT 'P0123456789abcdef' FROM generate_series(1,1000);
>>>> INSERT INTO t VALUES ('P0123456789abcdefF');
>>>> CREATE INDEX ON t USING spgist (c);
>>>> EOSQL
>>>> pg_ctl -m immediate -w restart
>>>
>>>
>>> On which platform are you seeing the failure? I am afraid I could not
>>> reproduce the failure on Linux and OSX after testing it on HEAD.
>>>
>>
>> I'm having the same symptoms with
>> 159cff58cf3b565be3c17901698a74238e9e23f8 on Ubuntu Linux 3.4.39 armv7l.
>
> Yes, on armv7l this can be indeed reproduced.

Fixed, thanks everyone! The problem was that in the WAL format change 
patch, I had used "char" in a struct to hold -1, but "char" is unsigned 
on PowerPC and ARM.

- Heikki