pg.ddx.io  pgsql-bugs@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Dmitry Dolgov <9erthalion6@gmail.com>
To: John Naylor <john.naylor@enterprisedb.com>
Cc: tharakan@gmail.com
Cc: pgsql-bugs@lists.postgresql.org
Subject: Re: BUG #17774: Assert triggered on brin_minmax_multi.c
Date: Wed, 8 Feb 2023 11:16:18 +0100
Message-ID: <20230208101618.w6vptrm66u7mddi6@ddolgov.remote.csb> (raw)
In-Reply-To: <20230208100658.mz2kkeruoma6iqtw@ddolgov.remote.csb>
References: <17774-c6f3e36dd4471e67@postgresql.org>
	<CAFBsxsEMigeTVhBOpsBHw+SJS1n776akNqVC8ATEDmGo_OPgrw@mail.gmail.com>
	<20230208100658.mz2kkeruoma6iqtw@ddolgov.remote.csb>

> On Wed, Feb 08, 2023 at 11:06:58AM +0100, Dmitry Dolgov wrote:
> > On Wed, Feb 08, 2023 at 04:26:49PM +0700, John Naylor wrote:
> > On Mon, Feb 6, 2023 at 3:06 PM PG Bug reporting form <noreply@postgresql.org>
> > wrote:
> > > This assert() is not easily reproducible, but thought the backtraces may
> > be
> > > interesting.
> > >
> > > TRAP: FailedAssertion("(delta >= 0) && (delta <= 1)", File:
> > > "brin_minmax_multi.c", Line: 2393, PID: 2922100)
> >
> > > #2  0x000055e143f0ae8b in ExceptionalCondition (
> > >     conditionName=0x55e143f92604 "(delta >= 0) && (delta <= 1)",
> > >     errorType=0x55e143f91ef4 "FailedAssertion",
> > >     fileName=0x55e143f91ee0 "brin_minmax_multi.c", lineNumber=2393)
> > >     at assert.c:69
> > > No locals.
> > > #3  0x000055e1437e8972 in brin_minmax_multi_distance_inet (
> > >     fcinfo=0x7ffc448234f0) at brin_minmax_multi.c:2393
> > >         delta = -2.3283064365386963e-10
> > >         i = -1
> > >         len = 4
> > >         addra = 0x55e14ee95fc0 ""
> > >         addrb = 0x55e14ee95fe0 ""
> > >         ipa = 0x55e14d95a1e0
> > >         ipb = 0x55e149a6fdc8
> > >         lena = 0
> > >         lenb = 32
> >
> > Thanks for the report! From the stack trace we can see that it computed a
> > negative delta, coming from:
> >
> > /* Calculate the difference between the addresses. */
> > delta = 0;
> > for (i = len - 1; i >= 0; i--)
> > {
> >   unsigned char a = addra[i];
> >   unsigned char b = addrb[i];
> >
> >   delta += (float8) b - (float8) a;
> >   delta /= 256;
> > }
> > Assert((delta >= 0) && (delta <= 1));
> >
> > I wonder if it needs to be something like "delta += Abs((float8) b -
> > (float8) a);".
>
> The negative delta might be only a consequence. From what I see it's
> called from build_distances, and the idea is to find the gaps between
> the max value of the current interval and the min value of the next one,
> so they should be ordered and delta should be always positive.
>
> In fact, I've just reproduced it by randomly inserting some inets into
> the test table, let me see if I can get a stable reproducer.

Yep, this sequence reproduces the issue reliably for me:

    create table brin_test (data inet);
    create index brin_multi on brin_test using brin (data inet_minmax_multi_ops);

    insert into brin_test values('127.0.0.1/0');
    insert into brin_test values('2001:db8:3333:4444:5555:6666:7777:8888');
    insert into brin_test values('0.0.0.0/12');

	TRAP: failed Assert("(delta >= 0) && (delta <= 1)"), File: "brin_minmax_multi.c", Line: 2389, PID: 76147
	[local] INSERT(ExceptionalCondition+0x9e)[0xb432a7]
	[local] INSERT(brin_minmax_multi_distance_inet+0x409)[0x494345]
	[local] INSERT(FunctionCall2Coll+0x99)[0xb4e027]
	[local] INSERT[0x4922c8]
	[local] INSERT[0x492deb]
	[local] INSERT[0x4943a7]
	[local] INSERT(brin_form_tuple+0x231)[0x498dd4]
	[local] INSERT(brininsert+0x406)[0x48a35f]
	[...]





view thread (13+ messages)  latest in thread

Message-ID: <20230208101618.w6vptrm66u7mddi6@ddolgov.remote.csb>
Permalink:  ../20230208101618.w6vptrm66u7mddi6@ddolgov.remote.csb/
Also on:    postgresql.org/message-id/20230208101618.w6vptrm66u7mddi6@ddolgov.remote.csb

 · 

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: 9erthalion6@gmail.com, john.naylor@enterprisedb.com, tharakan@gmail.com, pgsql-bugs@lists.postgresql.org
  Subject: Re: BUG #17774: Assert triggered on brin_minmax_multi.c
  In-Reply-To: <20230208101618.w6vptrm66u7mddi6@ddolgov.remote.csb>

* 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